JDK : 17
SpringBoot 2.7.11
※ 단순히 dto를 받아서 메일만 전송하는 역할만을 수행하므로
재사용 가능성이 낮다고 판단하여 @Controller, @Service 외에는 Bean으로 설정하지 않고 진행했다.
build.gradle에 두 코드를 추가한다.
// 메일전송
implementation 'com.sun.mail:jakarta.mail'
implementation 'org.springframework:spring-context-support'
@PostMapping("/newPassword")
@ResponseBody
public Boolean newPassword(@RequestBody myDto dto) {
return mailService.sendMail(dto);
}
* STEP2의 mailService.sendMail(dto) 구현
public Boolean sendMail(myDto dto) {
// dto 구성(예시)
/*
String sender; // 송신자 메일주소
String recipient; // 수신자 메일주소
String cc; // 참조자 이메일
*/
JavaMailSenderImpl mailSender = mailSender();
try {
MimeMessage message = mailSender.createMimeMessage();
message.setFrom(new InternetAddress(dto.getSender()));
message.setRecipient(Message.RecipientType.TO, new InternetAddress(dto.getRecipient()));
if(dto.getCc() != null && !dto.getCc().equals("")) {
message.setRecipient(Message.RecipientType.CC, new InternetAddress(dto.getCc()));
}
message.setText("한번에 되면 대박쓰"); // 메일 본문
message.setSubject("메일이 날라갑니당"); // 메일 제목
mailSender.send(message);
} catch (MessagingException e) {
e.printStackTrace();
}
return true;
}
// 경우에 따라서 별도 @Bean으로 설정하여 사용도 가능
private static JavaMailSenderImpl mailSender() {
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
// userName, password 생략시
// 인증절차 없이 메일전송 가능
mailSender.setHost("${smtp_host}"); // 메일서버 호스트
mailSender.setPort(Integer.parseInt("${smtp_port}")); // 메일서버 포트번호
mailSender.setUsername("${smtp_id}"); // 송신자 아아디
mailSender.setPassword("${smtp_password}"); // 송신자 비밀번호
mailSender.setDefaultEncoding("utf-8");
// 경우에 따라서 불필요한 내용들 주석처리 가능
Properties javaMailProperties = new Properties();
javaMailProperties.put("mail.smtp.starttls.enable", "false");
javaMailProperties.put("mail.smtp.auth", "false");
javaMailProperties.put("mail.smtps.ssl.checkserveridentity", "false"); // smtps?
javaMailProperties.put("mail.smtps.ssl.trust", "*"); //smtps?
javaMailProperties.put("mail.smtp.ssl.enable", "false");
javaMailProperties.put("mail.debug", "true");
javaMailProperties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
mailSender.setJavaMailProperties(javaMailProperties);
return mailSender;
}
저렇게 작성하니 메일 본문에 html요소를 담지 못하고 단순히 String 문자만 받고 있었다.
개행처리나 내용을 좀 더 예쁘게 만들 필요가 생겼다.
set
String mailText = "<p>안녕하세요 제이름은 <strong>"+박하나+"</strong> 입니다.</p><p>앞으로도 잘 부탁 드립니다.</p>";
//기존
// message.setText("한번에 되면 대박쓰"); // 메일 본문
// 두번째 인자로 "text/html; charset=UTF-8"
// 형식이 html임을표기, setText가 아닌 setContext로 변경
message.setContent(mailText,"text/html; charset=UTF-8"); // 메일 본문