본문 바로가기

SPRING

[Spring boot] Gmail SMTP ( Simple Mail Transfer Protocol) 이메일 전송하는 방법

 

JAVA에선 이미 메일을 보낼 수 있게 개발 해놓은 인터페이스가 존재하는데 바로 'JavaMailSender' 이다. 

그 중 나는 Gmail SMTP 를 사용해서 이메일을 발송할 것이다.

 

SMTP ( Simple Mail Transfer Protocol) : 메일 서버에서 인터넷을 통해 보내는 전자 메일에 사용하는 전자 메일 프로토콜

 

 

먼저 코드를 작성하기에 앞서 보안 선처리가 필요하다.

 

 

구글 로그인 후 계정 > 보안 에 들어간다

 

 

 

2단계 인증 로그인이 완료되었으면

 

 

 

검색에 '앱비밀번호' 를 검색해서 들어가준다

 

 

 

그리고 다음과 같이 앱 비밀번호를 하나 만들어준다

나는 앱 이름을 my_exchange로 설정하였고 설정을 완료하면 다음과 같이 앱 비밀번호를 생성해준다

생성된 비밀번호는 코드에서 사용할 것이므로 따로 기록해놓자 !!

 

 

이제 소스코드를 작성해보자

 

 

	implementation 'org.springframework.boot:spring-boot-starter-mail'

 

먼저 의존성을 추가해준다

 

 

  spring:
      mail:
        default-encoding: UTF-8
        host: smtp.gmail.com
        port: 587
        username: "발신자 이메일"
        password: "발급받은 앱 비밀번호"
        properties:
          mail:
            mime:
              charset: UTF-8
            smtp:
              auth: true
              starttls:
                enable: true

 

application.yml에 다음과 같이 mail 설정을 추가해주고

 

 

@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class SendEmailRequestDto {

    private String address;
    private String title;
    private String content;

}

 

메일을 요청하기 위한 dto 도 작성해준다

 

 

@Component
@RequiredArgsConstructor
public class SmtpUtils {

    @Value("${spring.mail.username}")
    private String sender;
    private final JavaMailSender emailSender;

    public void sendEmail(SendEmailRequestDto sendEmailRequestDto){
        SimpleMailMessage message = new SimpleMailMessage();

        message.setFrom(sender);
        message.setTo(sendEmailRequestDto.getAddress());
        message.setSubject(sendEmailRequestDto.getTitle());
        message.setText(sendEmailRequestDto.getContent());

        try{
            emailSender.send(message);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

 

위와 같이 SmtpUtil을 작성해주면 끝이다

참고로 emil을 보내는 메소드를 호출할 땐 꼭 exception 처리를 해주자 !

 

 

이제 실제로 메일을 보내봐야징

 

    @Test
    void sendEmail() {

        // Given
        SendEmailRequestDto sendEmailRequestDto = SendEmailRequestDto.builder()
                .address("recipient email address")
                .title("test")
                .content("test 입니당")
                .build();

        // When
        smtpUtils.sendEmail(sendEmailRequestDto);

    }

 

Junit 테스팅 코드

 

 

 

결과

 

 

아주 잘 발송됐다 끄읏 -!