본문 바로가기
springBoot

springBoot email 전송 (구글 앱비밀번호 발급)

by 뇽꾸리 2022. 9. 14.
반응형

1. 구글 앱 비밀번호 발급  (구글계정 > 보안 > 2단계인증 > 앱비밀번호 ) 

yml 혹은 properties 설정 

 spring :
    mail:
       host: smtp.gmail.com
       port: 587
       username: 이메일아이디
       password: 앱비밀번호
       properties:
          mail:
            smtp:
              auth: true
              starttls:
                enable: true
@Controller
@RequiredArgsConstructor
public class MailController {
    private final MailSenderUtil mailSenderUtil;

    @PostMapping("/mail/sendSimpleEmail")
    public void execSimpleMail(@RequestBody MailDto mailDto) {
        mailSenderUtil.sendSimpleEmail(mailDto);
    }
    
    @PostMapping("/mail/sendEmail")
    public void execMail(@RequestBody MailDto mailDto) {
        mailSenderUtil.sendEmail(mailDto);
    }
}
@Component
@RequiredArgsConstructor
public class MailSenderUtil {
    private final JavaMailSender javaMailSender;
    private static final String ePw = createKey();

  
    /*
     * @Description 간단한 text 이메일 전송 예제
     * @Param ReqMailModel
     * @Return
     * @Exception
     * */
    public void sendSimpleEmail(ReqMailModel mailDto) {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setTo(mailDto.getAddress()); //보내는 대상
        message.setSubject(mailDto.getTitle()); //제목
        message.setText(mailDto.getMessage()); //내용
        javaMailSender.send(message);
    }

    /*
     * @Since 2022.09.14
     * @Description 이메일 전송 샘플
     * @Param ReqMailModel
     * @Return
     * @Exception
     * */
    public void sendEmail(ReqMailModel mailDto) {
        try {
            MimeMessage message = javaMailSender.createMimeMessage();
            message.addRecipients(MimeMessage.RecipientType.TO, mailDto.getAddress());//보내는 대상
            message.setSubject(mailDto.getTitle()); //제목
            message.setText(createHtml(), "utf-8", "html"); //내용
            javaMailSender.send(message);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    public static String createHtml(){
        String msgg="";
        msgg+= "<div style='margin:100px;'>";
        msgg+= "<h1> 안녕하세요 뇽꾸리 입니다. </h1>";
        msgg+= "<br>";
        msgg+= "<p>아래 코드를 회원가입 창으로 돌아가 입력해주세요<p>";
        msgg+= "<br>";
        msgg+= "<p>감사합니다!<p>";
        msgg+= "<br>";
        msgg+= "<div align='center' style='border:1px solid black; font-family:verdana';>";
        msgg+= "<h3 style='color:blue;'>회원가입 인증 코드입니다.</h3>";
        msgg+= "<div style='font-size:130%'>";
        msgg+= "CODE : <strong>";
        msgg+= ePw+"</strong><div><br/> ";
        msgg+= "</div>";
        return msgg;
    }
    public static String createKey() {
        StringBuffer key = new StringBuffer();
        Random rnd = new Random();

        for (int i = 0; i < 8; i++) { // 인증코드 8자리
            int index = rnd.nextInt(3); // 0~2 까지 랜덤

            switch (index) {
                case 0:
                    key.append((char) ((int) (rnd.nextInt(26)) + 97));
                    //  a~z  (ex. 1+97=98 => (char)98 = 'b')
                    break;
                case 1:
                    key.append((char) ((int) (rnd.nextInt(26)) + 65));
                    //  A~Z
                    break;
                case 2:
                    key.append((rnd.nextInt(10)));
                    // 0~9
                    break;
            }
        }
        return key.toString();
    }
}

 

반응형

댓글