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를 전송하여 실행 결과 확인