728x90
1.Naver SMTP 설정
네이버 메일 -> 환경설정 -> SMTP 설정을 사용함으로 바꿔줍니다.
2.Build.gradle 설정
implementation 'org.springframework.boot:spring-boot-starter-mail'
3.NaverMail.yml 설정
spring:
mail:
host: smtp.naver.com #smtp 서버 주소
port: 465 # 메일 인증서버 포트
username: xxxx@naver.com #네이버 아이디
password: xxxx #네이버 비밀번호
properties:
mail:
smtp:
starttls:
enable: true
auth: true
ssl:
enable: true
yml에 JavaMailSender에 쓰일 Properties를 선언해줍니다.
4.EmailDto
@NoArgsConstructor
@AllArgsConstructor
@Getter
public class EmailDto {
@Email(message = "이메일 형식이 아닙니다")
@NotBlank(message = "이메일을 입력해주세요")
private String email;
}
5.EmailController
@RestController
@RequiredArgsConstructor
public class EmailController {
private final EmailService emailService;
@PostMapping("/api/email")
public void emailCertification(@Valid @RequestBody EmailDto emailDto){
emailService.sendEmail(emailDto);
}
}
6.EmailService
@Service
@RequiredArgsConstructor
public class EmailService {
private final JavaMailSender mailSender;
private final SpringTemplateEngine templateEngine;
@Value("${spring.mail.username}")
private String fromEmail;
private static final String title = "인증 코드 발송";
public void sendEmail(EmailDto emailDto) {
try{
MimeMessage message = createMail(emailDto.getEmail());
mailSender.send(message);
}catch (MessagingException | MailSendException ex){
throw new CustomException(ErrorCode.SEND_EMAIL_ERROR);
}
}
private MimeMessage createMail(String email) throws MessagingException {
String code = createCode();
MimeMessage message = mailSender.createMimeMessage();
message.addRecipients(RecipientType.TO, email); //보낼 이메일 설정
message.setSubject(title); // 제목 설정
message.setFrom(fromEmail); // 보내는 이메일 , yml에 설정한 email과 같아야함
// message.setText("이메일 인증 코드:" + code); // 단순 텍스트
message.setText(setContext(code),"utf-8","html"); // html
return message;
}
private String createCode() { // 랜덤한 영어 +숫자 10자리
StringBuffer buffer = new StringBuffer();
Random random = new Random();
for(int i=0; i<10;i++){
if(random.nextBoolean()){
buffer.append((char)(random.nextInt(26)+65));
}else{
buffer.append(random.nextInt(10));
}
}
return buffer.toString();
}
public String setContext(String code){ // thymeleaf를 이용한 context 설정
Context context = new Context();
context.setVariable("code",code);
return templateEngine.process("email",context); // email.html
}
}
createCode():인증번호를 발송 할 랜덤한 영어+ 숫자 10자리를 만드는 메소드
createMail(): 인증번호를 보낼 이메일을 받아 보내는 이메일의 구체적인 제목이나 내용등을 정해 이메일을 만드는 메소드
sendEmail(): Controller에서 email을 받아 이메일을 만들고 보내는 메소드
SetContext():thymeleaf를 이용한 context 설정 메소드
7.email.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" lang="en">
<body>
<div style="margin:100px;">
<br>
<p> 아래 코드를 회원가입 창으로 돌아가 입력해주세요.</p>
<br>
<div align="center" style="border:1px solid black;">
<h3 style="color:blue"> 회원가입 인증 코드 입니다. </h3>
<div style="font-size:130%" th:text="${code}"> </div>
</div>
<br/>
</div>
</body>
</html>
728x90
'Spring' 카테고리의 다른 글
프로메테우스 설치 및 사용법 (1) | 2023.11.07 |
---|---|
Actuator (0) | 2023.11.03 |
Querydsl 페이징과 카운터쿼리 최적화 (0) | 2023.04.27 |
Querydsl 동적 쿼리 (0) | 2023.04.26 |
Querydsl 프로젝션 결과 반환 (0) | 2023.04.26 |