[SpringBoot] 이메일 전송 (Gmail SMTP Server)

devdo·2022년 10월 18일
0

SpringBoot

목록 보기
29/34

구글 계정만 있으면 Gmail SMTP Server를 통해 무료로 이메일을 전송할 수 있다.

springboot를 쓸려면 다음과 같이 설정지메일 send code를 사용해야 한다. 간단한 테스트를 위해 작성하면 다음과 같이 작성하면 된다.


Google 보안 앱 비밀번호 설정

로그인 계정 -> 보안 -> 보안 수준이 낮은 앱의 액세스(사용!) // 아예 아래페이지에서! 구글 계쩡 설정가보면 찾을 수가 없음!
https://myaccount.google.com/lesssecureapps

그리고 아래 앱 비밀번호 설정 으로 들어가,
앱선택, 기기선택 후 앱 비빌번호를 생성된다.
생선된 앱 비밀번호는 springboot 설정시 적어주어야 한다.


spring mail 설정

  • gradle
    // https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-mail
    implementation group: 'org.springframework.boot', name: 'spring-boot-starter-mail', version: '2.6.7'

  • application.yml
server:
    mail:
      host: smtp.gmail.com
      port: 587
      username: {user gmail}
      password: {gmail 보안 앱 비밀번호}
      properties:
        mail:
          smtp:
            starttls:
              enable: true

Code

  • MailSendService
@Slf4j
@Component
@RequiredArgsConstructor
public class MailSendService {

    private final JavaMailSender javaMailSender;

    public boolean sendMail(String mail, String subject, String text) {

        boolean result = false;

        MimeMessagePreparator msg = new MimeMessagePreparator() {
            @Override
            public void prepare(MimeMessage mimeMessage) throws Exception {
                MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
                mimeMessageHelper.setTo(mail);
                mimeMessageHelper.setSubject(subject);
                mimeMessageHelper.setText(text, true);
            }
        };
        try {
            javaMailSender.send(msg);
            log.info("javaMailSender.send");
            result = true;

        } catch (Exception e) {
            e.printStackTrace();
        }

        return result;

    }

}
  • MailController
@RestController
@RequiredArgsConstructor
public class MailController {
    private final MailSendService mailSendService;

    @GetMapping("/mail/send")
    public void sendMail(String email) {

        mailSendService.sendMail("ehtjd33@gmail.com", "제목입니다.", "테스트입니다.");

    }
}
profile
배운 것을 기록합니다.

0개의 댓글