- 다양한 사이트에서 쉽게 볼 수 있는 회원가입 시 이메일 검증
- 스프링 부트로 사용자에게 메일 전송 기능 구현
1. 구글 Gmail SMTP 사용 위한 설정
- 구글 사이트 > 프로필 클릭 > Google 계정 관리
- 검색창에 > "앱 비밀번호" 검색
- 앱 이름 설정 > 만들기
- 16자리의 앱 비밀번호가 생성됨
2. build.gradle
dependencies {
// 메일 전송 위한 라이브러리 추가
implementation 'org.springframework.boot:spring-boot-starter-mail'
// 예제에서 확인을 위한 타임리프 추가 (필요하지 않다면 넣지 않아도 됨)
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
}
3. application.yml
spring:
mail:
host: smtp.gmail.com # SMTP 서버 호스트
port: 587 # SMTP 서버 포트
username: # SMTP 서버 로그인 아이디
password: # SMTP 서버 로그인 비밀번호
properties:
mail:
smtp:
auth: true # 사용자 인증 시도 여부
starttls:
enable: true # starttls 활성화 여부
- username : SMTP 설정을 완료한 gmail 아이디 (@gmail.com 은 제외하고 아이디만 기입)
- password : SMTP 설정 시 발급 받은 16자리의 비밀번호 (띄어쓰기 없이 기입)
4. MailService
- 메일 보내는 방식이 2가지 존재
- 1. SimpleMailMessage 를 통한 간단한 텍스트 전송 방법
- 2. MimeMessage 를 통한 html 반영 메일 전송 방법
- 2가지 방식의 서비스 단 메서드 예제를 구현함
import jakarta.mail.internet.MimeMessage;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
@Service
@Slf4j
@RequiredArgsConstructor
public class MailService {
private final JavaMailSender javaMailSender;
public void sendSimpleMailMessage() {
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
try {
// 메일을 받을 수신자 설정
simpleMailMessage.setTo("chm2006@naver.com");
// 메일의 제목 설정
simpleMailMessage.setSubject("테스트 메일 제목");
// 메일의 내용 설정
simpleMailMessage.setText("테스트 메일 내용");
javaMailSender.send(simpleMailMessage);
log.info("메일 발송 성공!");
} catch (Exception e) {
log.info("메일 발송 실패!");
throw new RuntimeException(e);
}
}
public void sendMimeMessage() {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
try{
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, false, "UTF-8");
// 메일을 받을 수신자 설정
mimeMessageHelper.setTo("chm2006@naver.com");
// 메일의 제목 설정
mimeMessageHelper.setSubject("html 적용 테스트 메일 제목");
// html 문법 적용한 메일의 내용
String content = """
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<body>
<div style="margin:100px;">
<h1> 테스트 메일 </h1>
<br>
<div align="center" style="border:1px solid black;">
<h3> 테스트 메일 내용 </h3>
</div>
<br/>
</div>
</body>
</html>
""";
// 메일의 내용 설정
mimeMessageHelper.setText(content, true);
javaMailSender.send(mimeMessage);
log.info("메일 발송 성공!");
} catch (Exception e) {
log.info("메일 발송 실패!");
throw new RuntimeException(e);
}
}
}
- 메일을 받을 수신자가 여러명인 경우 (setTo 부분 수정)
// 문자열 배열 형태
String[] receivers = {"abcd@gmail.com", "efgh@gmail.com"};
simpleMailMessage.setTo(receivers);
// ArrayList의 경우 => 배열로 전환해줘야 함!
ArrayList<String> receiverList = new ArrayList<>(Arrays.asList("abcd@gmail.com", "efgh@gmail.com"));
String[] changeReceivers = receiverList.toArray(new String[receiverList.size()]);
simpleMailMessage.setTo(changeReceivers);
5. MailController
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequiredArgsConstructor
public class MailController {
private final MailService mailService;
@GetMapping("/simple")
public void sendSimpleMailMessage() {
mailService.sendSimpleMailMessage();
}
@GetMapping("/html")
public void sendMimeMessage() {
mailService.sendMimeMessage();
}
}
6. 실행 결과
- @RestController 로 인해서 postman 으로 GET request를 전송하여 실행 결과 확인
- http://localhost:8080/simple (GET) 전송 시
- http://localhost:8080/html (GET) 전송 시
'Spring Boot' 카테고리의 다른 글
[Spring Boot] 구매한 도메인을 EC2에 연결 (AWS Route 53, 가비아) (0) | 2024.04.04 |
---|---|
[Spring Boot] Whitelabel Error Page 대신 원하는 에러 페이지 적용 (0) | 2024.04.04 |
[Spring Boot] 스프링 부트 엑셀 파일 업로드 예제( + 엑셀 파일 열기로 업로드 확인 ) (0) | 2024.03.28 |
[Spring Boot] 스프링 부트 엑셀 파일에 데이터 쓰기 (0) | 2024.03.27 |
[AWS] EC2 서버 시간 설정 (TimeZone 변경) (0) | 2024.03.26 |