-
[SpringBoot] - 이메일 인증 기능 구현(구글 SMTP)Spring 2024. 6. 13. 22:31반응형
- 구글 SMTP 서비스 설정하기
1. 자신의 Gmail로 접속하여 우측 상단의 톱니바퀴를 클릭하여 모든 설정 보기를 클릭한다.
2. 우측의 화면과 같이 IMAP 사용 설정을 해준다.
3. 화면을 빠져나와 구글 계정관리로 접속한다.
4. 보안에서 2단계 인증으로 접속한다.(설정하지 않았다면 설정을 해주면 된다.)
5. 2단계 인증을 클릭 후 제일 하단에 앱 비밀번호 메뉴를 선택해주고 사용 할 이름을 적은 후 만들기 버튼을 클릭하여 비밀번호 생성을 완료한다. 이 해당 비밀번호는 꼭 기억해두어야한다.
Build.gradle - 의존성 추가
implementation 'org.springframework.boot:spring-boot-starter-mail'
Application.yml
#Email 인증 mail: host: smtp.gmail.com port: 587 username: "이메일 주소" password: "초기 설정에서 발급 받은 비밀번호" properties: mail: smtp: auth: true starttls: enable: true required: true connectiontimeout: 5000 timeout: 5000 writetimeout: 5000 auth-code-expiration-millis: 1800000 # 30 * 60 * 1000 == 30?
MailConfig.Config
@Configuration public class MailConfig { @Bean public JavaMailSender javaMailSender() { JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); mailSender.setHost("smtp.gmail.com"); mailSender.setPort(587); mailSender.setUsername("설정 한 이메일 주소"); mailSender.setPassword("발급 받은 비밀번호"); Properties props = mailSender.getJavaMailProperties(); props.put("mail.transport.protocol", "smtp"); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enable", "true"); props.put("mail.debug", "true"); return mailSender; } }
MailService
@Service @RequiredArgsConstructor public class MailService { private final JavaMailSender javaMailSender; private static final String senderEmail = "메일을 보낼 구글 이메일"; // 랜덤으로 숫자 생성 public String createNumber() { Random random = new Random(); StringBuilder key = new StringBuilder(); for (int i = 0; i < 8; i++) { // 인증 코드 8자리 int index = random.nextInt(3); // 0~2까지 랜덤, 랜덤값으로 switch문 실행 switch (index) { case 0 -> key.append((char) (random.nextInt(26) + 97)); // 소문자 case 1 -> key.append((char) (random.nextInt(26) + 65)); // 대문자 case 2 -> key.append(random.nextInt(10)); // 숫자 } } return key.toString(); } public MimeMessage createMail(String mail, String number) throws MessagingException { MimeMessage message = javaMailSender.createMimeMessage(); message.setFrom(senderEmail); message.setRecipients(MimeMessage.RecipientType.TO, mail); message.setSubject("이메일 인증"); String body = ""; body += "<h3>요청하신 인증 번호입니다.</h3>"; body += "<h1>" + number + "</h1>"; body += "<h3>감사합니다.</h3>"; message.setText(body, "UTF-8", "html"); return message; } // 메일 발송 public String sendSimpleMessage(String sendEmail) throws MessagingException { String number = createNumber(); // 랜덤 인증번호 생성 MimeMessage message = createMail(sendEmail, number); // 메일 생성 try { javaMailSender.send(message); // 메일 발송 } catch (MailException e) { e.printStackTrace(); throw new IllegalArgumentException("메일 발송 중 오류가 발생했습니다."); } return number; // 생성된 인증번호 반환 } }
MailDto
@Data @AllArgsConstructor @NoArgsConstructor public class MailDTO { private String email; }
MailController
@RestController @RequiredArgsConstructor public class MailController { private final MailService mailService; @ResponseBody @PostMapping("/emailCheck") // 이 부분은 각자 바꿔주시면 됩니다. public String emailCheck(@RequestBody MailDTO mailDTO) throws MessagingException, UnsupportedEncodingException { String authCode = mailService.sendSimpleMessage(mailDTO.getEmail()); return authCode; // Response body에 값을 반환 } }
이렇게 간단하게 이메일 인증 서비스를 완료할 수 있다. 테스트를 해보자
PostMan을 통해 해당 url로 이메일 받을 사람을 입력하여 요청한다면 아래와같이 인증번호가 출력되어나온다.
실제 확인이 가능한 이메일 주소로 요청한 경우 해당 메일함을 확인한다면 이와같이 인증번호가 전송되어 나온다.
반응형'Spring' 카테고리의 다른 글
SpringBoot 초간단 엑셀 다운로드 기능 구현(Apache POI) (0) 2024.10.25 [Spring boot] - 소셜로그인(Naver,Google) + 일반로그인 구현 (0) 2024.07.23 [SpringBoot] - 구글, 네이버 소셜로그인 구현 설정 (0) 2024.07.23 [SpringBoot] - 소셜로그인작동 원리 (0) 2024.07.22 [Spring Boot] - 초간단 휴대폰 인증 기능 구현 (coolsms-건당20원) (0) 2024.06.14