Spring Boot mail 발송

MIHYUN KIM·2024년 1월 31일

EG_TroubleShooting

목록 보기
3/5

1. pom.xml 수정

<!-- Spring Boot Starter Mail -->
<dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-mail</artifactId></dependency>

2. application.yml 수정

spring
  mail:
    host: smtp.naver.com  #smtp.mailplug.co.kr #smtp.office365.com
    port: 465                 #587
    username: 대표 이메일
    password: 대표 이메일 비번
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: false
            required: false
          ssl:
            enable: true

3. controller 수정

@RestController
public class MailApiController {
   
    @Autowired
    private JavaMailSender javaMailSender;
    
   @PostMapping("/auth/certificationMail")
   public ResponseDto<Integer> mailCheck(HttpServletRequest request, @RequestBody User user) { 
      
      System.out.println("email:::"+user.getEmail());
      
      String path = request.getRequestURL().toString();
            path = path.replace("/auth/certificationMail", "");
      String returnUrl = path + "/auth/verify";
      
      String verificationCode = createCode();
      
      try {
           MimeMessage mimeMessage = javaMailSender.createMimeMessage();
           MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
           
           String htmlBody = gethtmlBody(returnUrl, verificationCode);
           
           // 발신자 메일 주소 설정
           helper.setFrom("발신자이메일@naver.com");
           // 수신자 메일 주소 설정
           helper.setTo(user.getEmail());
           
           // 메일 제목 설정
           helper.setSubject("메일 인증 테스트");
           // HTML 내용을 설정합니다.
         helper.setText(htmlBody, true);
         
         javaMailSender.send(mimeMessage);
         
         return new ResponseDto<Integer>(HttpStatus.OK.value(), Integer.parseInt(verificationCode));
         
      } catch (MessagingException e) {
         e.printStackTrace();
         return new ResponseDto<Integer>(HttpStatus.BAD_REQUEST.value(),0);
      }

   }
   
   public String gethtmlBody(String link, String code) { 
      
        String htmlBody = "<html><body>"
                      + "<p><b>회원가입 화면에서 아래 인증코드 6자리를 입력 후 인증확인 버튼을 눌러주세요.</b></p><br/>"
                      + "<p><b>인증코드: "+ code +"</b></p>"
                      //+ "<a href='"+link+"'>"+"TEST 링크 >>>> "+link+"</a>"
                      + "</body></html>";
        return htmlBody;
   }
   
   
    private String createCode() {
        int lenth = 6;
        try {
            Random random = SecureRandom.getInstanceStrong();
            StringBuilder builder = new StringBuilder();
            for (int i = 0; i < lenth; i++) {
                builder.append(random.nextInt(10));
            }
            return builder.toString();
        } catch (NoSuchAlgorithmException e) {
           e.printStackTrace();
            //log.debug("MemberService.createCode() exception occur");
           return null;
        }
    }
}
profile
우당탕탕_Dev_Log

0개의 댓글