이메일 전송기능을 구현할 때, 본격적으로 쓰고싶다면 SendGrid, Mailgun, Amazon SES 같은 전문 이메일 서비스 API를 쓰는 게 좋긴 하겠지만 간단하게 쓰려면 구글 메일 서버 이용하는 게 편한듯
구글계정 -> 보안 -> 앱 비밀번호
앱 비밀번호는 2단계 인증이 사용 설정된 계정에서만 이용할 수 있습니다.
spring:
mail:
host: smtp.gmail.com # 하루 최대 500통
port: 587
username: ****@gmail.com
password: **** **** **** ****
properties:
mail:
smtp:
auth: true # 사용자 인증 시도 여부
starttls:
enable: true
@Service
class MailService(
private val mailSender: JavaMailSender,
private val templateEngine: TemplateEngine,
) {
private val log = KotlinLogging.logger {}
fun sendSimpleMailMessage(
to:String,
emailDto: EmailDto
) {
val simpleMailMessage =
SimpleMailMessage()
// 메일을 받을 수신자 설정
simpleMailMessage.setTo(to)
// 메일의 제목 설정
simpleMailMessage.subject = emailDto.emailTemplate.subject
// 메일의 내용 설정
simpleMailMessage.text = "test"
mailSender.send(simpleMailMessage)
log.info("메일 발송 성공!")
}
// 서버사이드 템플릿 엔진을 사용해서 email 내용을 만들고 싶을 경우
fun sendEmailTemplate(
to: String,
emailDto: EmailDto,
) {
val output = StringOutput()
//메일로 전송하면 인라인 방식의 css만 적용된다?
templateEngine.render(emailDto.emailTemplate.templateTarget, emailDto.body, output)
val mimeMessage =
mailSender.createMimeMessage()
val helper =
MimeMessageHelper(mimeMessage, true, Charsets.UTF_8.name())
helper.setSubject(emailDto.emailTemplate.subject)
helper.setFrom(InternetAddress("test@gmail.com", "Test"))
helper.setTo(to)
helper.setText(output.toString(), true)
mailSender.send(mimeMessage)
}