* [내 메일함 관리] - POP3/IMAP 설정 클릭 - POP3/SMTP 설정 클릭 해서 아래와 같이 설정하고 저장
* yml에 설정해줄 포트 번호나 서버 정보도 그 아래에서 확인할 수 있다.
STMP를 통해 메일을 발신할 때 발신자 메일이 필요하기 때문에 application.yml에 발신자 정보를 추가한다. ※ 이메일을 발송하기 위해서는 메일 서버가 필요한데 직접 구축할 수도 있고 구글이나 네이버 등에서 제공하는 SMTP 서버를 이용할 수도 있다. 나는 후자를 택했고 그중 네이버를 이용했다.
spring:
mail:
host: smtp.naver.com # SMTP 서버 호스트
port: 465 # SMTP 서버 포트
username: # SMTP 서버 로그인 아이디 (발신자)
password: # SMTP 서버 로그인 패스워드 (앱 비밀번호)
properties:
mail:
smtp:
auth: true # 사용자 인증 시도 여부 (기본값 : false)
ssl:
enable: true
starttls:
enable: true # StartTLS 활성화 여부 (기본값 : false)
이메일 내용 구성을 구성하고 전달하기 위한 틀 만들기
@Data
@Builder
public class EmailMessage {
private String to;
private String subject;
private String message;
}
메일을 보내기 위한 로직 구현
@Service
@RequiredArgsConstructor
public class EmailService {
private final JavaMailSender javaMailSender;
@Value("${spring.mail.username}")
private String from;
public void sendMail(EmailMessage emailMessage) {
MimeMessage mimeMessage = javaMailSender.createMimeMessage(); // MimeMessage 객체 생성
try {
// MimeMessageHelper를 사용하여 보다 쉽게 MimeMessage를 구성할 수 있다.
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, false, "UTF-8");
// 이메일 수신자 설정
mimeMessageHelper.setTo(emailMessage.getTo());
// 이메일 제목 설정
mimeMessageHelper.setSubject(emailMessage.getSubject());
// 본문 내용 설정, false는 HTML 형식의 메세지를 사용하지 않음을 나타낸다.
mimeMessageHelper.setText(emailMessage.getMessage(), false);
// 이메일 발신자 설정
mimeMessageHelper.setFrom(new InternetAddress(from + "@naver.com"));
// 이메일 보내기
javaMailSender.send(mimeMessage);
} catch (MessagingException e) {
throw new RuntimeException(e);
}
}
}
Spring Framework에서는 JavaMailSender라는 인터페이스를 제공하여 이메일 보내는 작업을 쉽게 할 수 있도록 도와준다. 제일 처음에 추가한 'spring-boot-starter-mail' 을 추가한 이유도 이 인터페이스를 사용하기 위해서다.
MimeMessage 는 JavaMail API에서 제공하는 클래스로 멀티파트 MIME 형식의 이메일 메세지를 생성하는 데 사용된다. : MIME 형식을 사용하면 텍스트, HTML, 이미지, 첨부 파일 등 다양한 유형의 콘텐츠를 포함하는 복잡한 이메일 메세지를 작성할 수 있다.
컨트롤러 구현
@RestController
@RequiredArgsConstructor
@RequestMapping("/test")
public class EmailController {
private final EmailService emailService;
@PostMapping("/send-email")
public ResponseEntity sendEmail() {
EmailMessage emailMessage = EmailMessage.builder()
.to("수신아이디@naver.com")
.subject("테스트메일")
.message("비밀번호 재설정을 위한 이메일입니다.")
.build();
emailService.sendMail(emailMessage);
return new ResponseEntity(HttpStatus.OK);
}
}
결과
포스트맨으로 200도 잘 떴고, 수신받는 이메일로 들어가 확인해보니 테스트 메일이 잘 들어와 있는 것을 확인할 수 있었다.