Spring boot SMTP 사용하기
Spring boot SMTP 사용하기
SMTP
sendmail 설치하기
다음의 명령어를 통해 sendmail 서비스를 설치한다.
> sudo apt-get install sendmail sendmail-cf
sendmail 설정
설정을 위해 우선 sendmail 서비스를 정지한다.
> sudo systemctl stop sendmail
기존 설정 파일을 백업한다.
> cd /etc/mail
> sudo cp sendmail.mc sendmail.mc.backup
> sudo cp sendmail.cf sendmail.cf.backup
외부와 메일을 주고받기 위해 smtp
와 submission
의 DAEMON_OPTIONS
에서 Addr을 0.0.0.0
으로 설정한다.
> sudo vim /etc/mail/sendmail.mc
- 기존 설정
56 dnl DAEMON_OPTIONS(`Family=inet6, Name=MTA-v6, Port=smtp, Addr=::1')dnl
57 DAEMON_OPTIONS(`Family=inet, Name=MTA-v4, Port=smtp, Addr=127.0.0.1')dnl
58 dnl DAEMON_OPTIONS(`Family=inet6, Name=MSP-v6, Port=submission, M=Ea, Addr=::1')dnl
59 DAEMON_OPTIONS(`Family=inet, Name=MSP-v4, Port=submission, M=Ea, Addr=127.0.0.1')dnl
- 수정된 설정
56 dnl DAEMON_OPTIONS(`Family=inet6, Name=MTA-v6, Port=smtp, Addr=::1')dnl
57 DAEMON_OPTIONS(`Family=inet, Name=MTA-v4, Port=smtp, Addr=0.0.0.0')dnl
58 dnl DAEMON_OPTIONS(`Family=inet6, Name=MSP-v6, Port=submission, M=Ea, Addr=::1')dnl
59 DAEMON_OPTIONS(`Family=inet, Name=MSP-v4, Port=submission, M=Ea, Addr=0.0.0.0')dnl
변경한 설정을 적용해 sendmail.cf
파일 재생성한다.
> sudo m4 /etc/mail/sendmail.mc > ./sendmail.cf
sendmail.cf
위치를 이동한다.
> sudo mv ./sendmail.cf /etc/mail
root
계정이 아닌 일반 계정으로 메일을 보낼 경우 에러가 발생할 수 있다. 다음과 같이 권한 설정을 한다.
> sudo chown root:smmsp /etc/mail/sendmail.cf
호스트 이름을 수정한다.
/etc/hosts
10 127.0.1.1 da-dogk domain.com da-dogk
서비스를 시작한다.
> sudo systemctl start sendmail
Spring Boot
gradle 추가
build.gradle
dependencies {
...
implementation('org.springframework.boot:spring-boot-starter-mail:3.1.2')
설정 추가
src/main/resources/application.yml
spring:
mail:
host: localhost
port: 25
properties:
mail:
debug: false
smtp:
starttls:
enable: false
auth: false
코드 추가
예시 코드
@Service
@RequiredArgsConstructor
@Log4j2
public class SchoolService {
private final JavaMailSender javaMailSender;
...
public void sendAuthCodeMail(AuthMailRequest dto) {
...
try {
...
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, false, "UTF-8");
mimeMessageHelper.setTo(dto.getEmail());
mimeMessageHelper.setFrom("service@dadogk2.duckdns.org");
mimeMessageHelper.setSubject("다독: 대학생 이메일 인증 코드입니다.");
mimeMessageHelper.setText("인증 코드: " + code + "\n본 메일 주소는 발송용입니다.");
javaMailSender.send(mimeMessage);
} catch (MessagingException e) {
// TODO: 전송 실패에 대한 예외 처리
}
}