메모장
Gmail SMTP 메일 발송 본문
- Google 계정 관리 > 보안 > 2단계 인증 > 사용
- 앱 비밀번호 > 메일, 기기 선택 > 생성
build.gradle
implementation 'org.springframework.boot:spring-boot-starter-mail'
// https://mvnrepository.com/artifact/com.sun.mail/javax.mail
implementation group: 'com.sun.mail', name: 'javax.mail', version: '1.6.2'
MailConfig
@Configuration
public class MailConfig {
private final String host = "smtp.gmail.com";
private final String user = "구글 이메일";
private final String pwd = "앱 비밀번호";
private final int port = 465;
@Bean
public JavaMailSender javaMailSender() {
JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
javaMailSender.setHost(host);
javaMailSender.setPort(port);
javaMailSender.setUsername(user);
javaMailSender.setPassword(pwd);
Properties prop = new Properties();
prop.setProperty("mail.smtp.auth", "true");
prop.setProperty("mail.smtp.starttls.enable", "true");
prop.setProperty("mail.smtp.ssl.enable", "true");
prop.setProperty("mail.smtp.ssl.trust", "smtp.gmail.com");
javaMailSender.setJavaMailProperties(prop);
return javaMailSender;
}
}
MailVO
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class MailVO implements Serializable {
private String to = "";
private String subject = "";
private List<FileDTO> fileList = new ArrayList<>();
}
Service
public void sendBoard(BoardDTO boardDTO) {
MailVO mailVO = MailVO
.builder()
.to("받는 메일")
.subject("메일 제목")
.fileList(boardDTO.getFileList())
.build();
Map<String, Object> mailMap = new HashMap<>();
// 템플릿에 넣을 데이터(key, value)
mailMap.put("seq", boardDTO.getSeq());
mailMap.put("Name", boardDTO.getName());
// 템플릿 파일명 ex) board-mail.html
mailMap.put("html", "board-mail");
mailService.sendMail(mailVO, mailMap);
}
private final JavaMailSender javaMailSender;
private final TemplateEngine templateEngine;
public void sendMail(MailVO mailVO, Map<String, Object> mailMap) {
try {
MimeMessagePreparator preparator = mimeMessage -> {
String content = getMailHtmlText(mailMap);
MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
messageHelper.setTo(mailVO.getTo());
messageHelper.setSubject(mailVO.getSubject());
messageHelper.setText(content, true);
messageHelper.setFrom("보낼 메일");
// 첨부파일
if (mailVO.getFileList() != null) {
for (FileDTO fileDTO : mailVO.getFileList()) {
String path = fileDTO.getPath() + "/" + fileDTO.getName();
FileDataSource fileDataSource = new FileDataSource(path);
String oriName = fileDTO.getOriName();
messageHelper.addAttachment(MimeUtility.encodeText(oriName, "UTF-8", "B"), fileDataSource);
}
}
};
javaMailSender.send(preparator);
} catch (Exception e) {
e.printStackTrace();
}
}
private String getMailHtmlText(Map<String, Object> mailMap) {
Context context = new Context();
mailMap.forEach(context::setVariable);
return templateEngine.process(mailMap.get("html").toString(), context);
}
'Java' 카테고리의 다른 글
Jasypt 이용한 application.yml 암호화 (0) | 2023.02.24 |
---|---|
스프링 컨테이너(IoC) (0) | 2023.01.19 |
Swagger (0) | 2023.01.13 |
게시판 파일 수정 (0) | 2023.01.11 |
@AuthenticationPrincipal 이용한 게시판 접근 제한 (0) | 2023.01.10 |