Spring_네이버 메일 인증
2022. 12. 28. 16:54ㆍSpring
728x90
1. naver 이메일 설정
네이버 메일 → 환경설정 → POP3/IMAP 설정 - POP3/SMTP 사용 사용함 설정
2. Spring
- mailConfig
package com.ssafy.backend.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import java.util.Properties;
@Configuration
public class MailConfig {
// env 파일에 저장된 값 사용
@Value("${mail.host}")
private String mailHost;
@Value("${mail.username}")
private String mailUsername;
@Value("${mail.userpassword}")
private String mailUserpassword;
@Value("${mail.port}")
private int mailPort;
@Bean
public JavaMailSender javaMailService(){
JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
javaMailSender.setHost(mailHost);
javaMailSender.setUsername(mailUsername);
javaMailSender.setPassword(mailUserpassword);
javaMailSender.setPort(mailPort);
javaMailSender.setJavaMailProperties(getMailProperties());
return javaMailSender;
}
private Properties getMailProperties(){
Properties properties = new Properties();
properties.setProperty("mail.transport.protocol", "smtp"); // 프로토콜 설정
properties.setProperty("mail.smtp.starttls.enable", "true"); // smtp strattles 사용
properties.setProperty("mail.debug", "true"); // 디버그 사용
properties.setProperty("mail.smtp.auth", "true"); // smtp 인증
properties.setProperty("mail.smtp.ssl.enable","true"); // ssl 사용
properties.setProperty("mail.smtp.ssl.trust", mailHost); // ssl 인증 서버는 smtp.naver.com
return properties;
}
}
- MailController
package com.ssafy.backend.controller;
import com.ssafy.backend.dto.MailDto;
import com.ssafy.backend.service.MailService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@RestController
@RequestMapping("/api/v1")
public class MailController {
@Autowired
private MailService mailService;
@GetMapping("/mailsend")
public ResponseEntity<?> signup(
@Valid @RequestBody MailDto mailDto
) throws Exception {
String code = mailService.sendSimpleMessage(mailDto.getEmail());
System.out.println("인증코드 : " + code);
return ResponseEntity.ok(code);
}
}
- MailService
package com.ssafy.backend.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.MailException;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;
import javax.mail.MessagingException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.UnsupportedEncodingException;
import java.util.Random;
@Service
public class MailService{
@Autowired
JavaMailSender emailsender; // Bean 등록해둔 MailConfig 를 emailsender 라는 이름으로 autowired
@Value("${mail.useremail}")
private String mailEmail;
@Value("${mail.username}")
private String mailName;
private String ePw; // 인증번호
// 메일 내용 작성
public MimeMessage createMessage(String to) throws MessagingException, UnsupportedEncodingException {
MimeMessage message = emailsender.createMimeMessage();
message.addRecipients(MimeMessage.RecipientType.TO, to);// 보내는 대상
message.setSubject("회원가입 이메일 인증");// 제목
StringBuilder msgg = new StringBuilder();
msgg.append("<div style='margin:100px;'>");
msgg.append("<h1>ttt 회원가입 인증 메일</h1>");
msgg.append("<div>");
msgg.append("Code : ").append(ePw);
msgg.append("</div>");
msgg.append("</div>");
message.setText(msgg.toString(), "utf-8", "html");// 내용, charset 타입, subtype
// 보내는 사람의 이메일 주소, 보내는 사람 이름
message.setFrom(new InternetAddress(mailEmail, mailName));// 보내는 사람
return message;
}
// 랜덤 인증 코드 전송
public 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 까지 랜덤, rnd 값에 따라서 아래 switch 문이 실행됨
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();
}
// 메일 발송
// sendSimpleMessage 의 매개변수로 들어온 to 는 곧 이메일 주소가 되고,
// MimeMessage 객체 안에 내가 전송할 메일의 내용을 담는다.
// 그리고 bean 으로 등록해둔 javaMail 객체를 사용해서 이메일 send!!
public String sendSimpleMessage(String to) throws Exception {
ePw = createKey(); // 랜덤 인증번호 생성
MimeMessage message = createMessage(to); // 메일 발송
try {// 예외처리
emailsender.send(message);
} catch (MailException es) {
es.printStackTrace();
throw new IllegalArgumentException();
}
return ePw; // 메일로 보냈던 인증 코드를 서버로 반환
}
}
- env.properties
# mail
mail.host = smtp.naver.com
mail.username = 아이디
mail.userpassword= 비밀번호
mail.port= 465
mail.useremail = 이메일
'Spring' 카테고리의 다른 글
Spring_MySQL 연결_gradle (0) | 2023.03.22 |
---|---|
Spring_tinyLog (0) | 2023.03.09 |
Spring_JPA_페이지네이션 (0) | 2022.12.28 |
Spring_env 파일 설정 (0) | 2022.12.28 |
Spring_stomp (0) | 2022.12.28 |