Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- GDI
- 한 번만 실행
- ClickOnce
- 크래시로그
- API
- php
- protobuf-c
- 설치제거
- MFC
- crashlog
- M8200
- C/C++
- 블루투스 헤드셋
- Font
- 와이브로
- 데이터 전달
- VS2008
- net
- 기념일관리
- self-signed ssl
- JavaScript
- phpmailer
- C#
- Antialiasing
- 자바스크립트
- PDA
- EUC-KR
- plcrashreporter
- docker
- .net
Archives
- Today
- Total
~☆~ 우하하!!~ 개발블로그
[연재] SpringBoot diary - 메일 발송 기능 본문
728x90
반응형
diary 프로그램에 메일 발송 기능을 추가해보려고 해.
Spring Boot 에서 메일발송 기능을 구현하려면 아래 dependency 를 추가해 주어야 해.
implementation "org.springframework.boot:spring-boot-starter-mail"
메일발송이 필요할 때 사용할 설정을 Bean 으로 만들어 사용하도록 할 생각이야. @Configuration 애노테이션을 붙여서 SendMailConfig 클래스를 아래와 같이 작성했어.
SendMailConfig.java
package com.woohahaapps.study.diary.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 SendMailConfig {
@Value("${spring.mail.host}")
public String host;
@Value("${spring.mail.port}")
public int port;
@Value("${spring.mail.username}")
public String sendEmailAddress;
@Value("${spring.mail.password}")
public String sendEmailPassword;
@Value("${spring.mail.properties.mail.smtp.auth}")
public boolean auth;
@Value("${spring.mail.properties.mail.smtp.starttls.enable}")
public boolean starttlsEnable;
@Bean
public JavaMailSender getJavaMailSender() {
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost(host);
mailSender.setPort(port);
mailSender.setUsername(sendEmailAddress);
mailSender.setPassword(sendEmailPassword);
Properties props = mailSender.getJavaMailProperties();
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.auth", auth);
props.put("mail.smtp.starttls.enable", starttlsEnable);
props.put("mail.debug", "true");
return mailSender;
}
}
위 클래스를 작성하다가 실수한게 있었는데, @Value 애노테이션을 사용하기 위해서 import 한 패키지명이야. 아무생각없이 앞에 나온 lombok 을 선택했었는데…
org.springframework.beans.factory.annotation 을 선택해야 했더라고.
보다시피 host, port, sendEmailAddress, sendEmailPassword, auth, starttlsEnable 멤버의 값은 환경설정 파일에 정의되어 있는 값을 읽어들이고 있어.
환경설정 파일에서는 아래와 같이 정의해주고 있지.
#SendMail
spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username={발송이메일 주소}
spring.mail.password={구글 2단계 인증 앱 비밀번호}
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
Gmail 을 이용해서 메일을 발송하기 위해서 설정하는 방법은 Gmail SMTP 로 메일 발송 설정하기 포스트를 참고하면 되겠어.
이제 일기가 작성되면 일기 내용을 작성자 이메일 주소로 쏴주는 코드를 작성해볼께.
DiaryService.java
@Service
public class DiaryService {
...
public void CreateDiary(String date, String content) throws DiaryException {
System.out.println("Service:date=" + date + ",content=" + content);
String email = SecurityContextHolder.getContext().getAuthentication().getName();
if (email.isBlank() || date.isBlank() || content.isBlank()) {
throw new DiaryException("일기정보가 부족합니다:" + (email.isBlank() ? " email" : "") + (date.isBlank() ? " date" : "") + (content.isBlank() ? " content" : ""));
}
diaryMapper.CreateDiary(date, content, email);
// Mail 발송
SimpleMailMessage message = new SimpleMailMessage();
message.setTo(email);
message.setSubject("[diary] " + date);
message.setText(content);
mailSender.send(message);
}
...
}
일기 저장이 완료되면 메일 발송 작업을 진행하도록 했어.
수신된 이메일을 보여줄께.
반응형
'SpringBoot' 카테고리의 다른 글
[연재] SpringBoot diary - 로그인 실패 사유 표시하기 (0) | 2024.11.15 |
---|---|
[연재] SpringBoot diary - swagger 연동 (API 테스트 목적) (0) | 2024.11.15 |
[SpringBoot] diary - Sign in with Google (0) | 2024.11.13 |
[SpringBoot] AWS SES 를 이용하여 메일 발송 테스트 (0) | 2024.11.01 |
[연재] Spring Boot diary : 접근보안 (feat. Postman) (0) | 2024.04.29 |