Spring Boot에서 JavaMailSender를 사용하여 메시지를 보내는 방법의 예제(소스 코드 첨부)

빠른 시작
Spring Boot 프로젝트의 Pom.xml에 spring-boot-starter-mail 의존 도입:

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-mail</artifactId>
</dependency>
다른 자동화 설정 모듈과 마찬가지로 의존 도입을 마친 후 application.properties 에서 해당하는 속성 내용만 설정해야 한다.
다음은 QQ 메일박스를 예로 들면 application.properties 에 다음과 같은 설정을 추가합니다 (자신의 사용자 이름과 비밀번호를 바꾸는 것을 주의하십시오).

spring.mail.host=smtp.qq.com
spring.mail.username= 
spring.mail.password= 
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
단원 테스트를 통해 간단한 메일을 보냅니다.

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
public class ApplicationTests {
 @Autowired
 private JavaMailSender mailSender;
 @Test
 public void sendSimpleMail() throws Exception {
 SimpleMailMessage message = new SimpleMailMessage();
 message.setFrom("[email protected]");
 message.setTo("[email protected]");
 message.setSubject(" : ");
 message.setText(" ");
 mailSender.send(message);
 }
}
여기까지만 하면 간단한 메일 발송이 완성됩니다. 이 단원 테스트를 실행하여 효과가 어떤지 보십시오.
"Spring Boot의 starter 모듈은 자동화된 설정을 제공하기 때문에spring-boot-starter-mail 의존을 도입한 후 프로필의 내용에 따라 자바 MailSender 실례를 만들 수 있기 때문에 우리는 직접 사용해야 할 곳에서 @Autowired로 메일 발송 대상을 불러올 수 있습니다."
진급 사용
상례에서 우리는 Simple Mail Message를 사용하여 간단한 메일 발송을 실현했지만 실제 사용 과정에서 첨부 파일을 가져오거나 메일 모듈 등을 사용할 수도 있다.이때 우리는 MimeMessage를 사용하여 복잡한 메일 내용을 설정해야 한다. 다음은 순서대로 실현해 보자.
첨부 파일 보내기
위 단원 테스트에 다음과 같은 테스트 용례를 추가합니다(MimeMessageHelper를 통해 첨부 파일이 있는 메일을 보냄).

@Test
public void sendAttachmentsMail() throws Exception {
 MimeMessage mimeMessage = mailSender.createMimeMessage();
 MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
 helper.setFrom("[email protected]");
 helper.setTo("[email protected]");
 helper.setSubject(" : ");
 helper.setText(" ");
 FileSystemResource file = new FileSystemResource(new File("weixin.jpg"));
 helper.addAttachment(" -1.jpg", file);
 helper.addAttachment(" -2.jpg", file);
 mailSender.send(mimeMessage);
}
정적 리소스 포함
첨부 파일을 보내는 것 외에 우리는 메일 내용에 그림 등 정적 자원을 삽입하여 메일을 더욱 잘 읽을 수 있기를 희망할 수 있다. 첨부 파일에서 구체적인 그림을 보는 것이 아니라 다음 테스트 용례는 MimeMessageHelper를 통해 메일 본문에 정적 자원을 삽입하는 방법을 보여 준다.

@Test
public void sendInlineMail() throws Exception {
 MimeMessage mimeMessage = mailSender.createMimeMessage();
 MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
 helper.setFrom("[email protected]");
 helper.setTo("[email protected]");
 helper.setSubject(" : ");
 helper.setText("<html><body><img src=\"cid:weixin\" ></body></html>", true);
 FileSystemResource file = new FileSystemResource(new File("weixin.jpg"));
 helper.addInline("weixin", file);
 mailSender.send(mimeMessage);
}
여기서 주의해야 할 것은addInline 함수에서 자원 이름weixin은 본문의cid:weixin과 대응해야 한다는 것이다
템플릿 메일
일반적으로 우리가 메일 발송 서비스를 사용할 때 일정한 장면이 있는데 예를 들어 비밀번호 초기화, 등록 확인 등이다. 모든 사용자에게 보내는 내용은 작은 부분만 변화할 수 있다.그래서 우리는 다양한 메일을 템플릿으로 설정하기 위해 템플릿 엔진을 사용하는 경우가 많다. 그러면 우리는 발송할 때 변화 부분의 매개 변수를 바꾸기만 하면 된다.
Spring Boot에서 템플릿 엔진을 사용하여 템플릿화된 메일을 보내는 것도 매우 쉽습니다. 다음은velocity를 예로 들어 보겠습니다.
velocity 모듈의 종속성을 도입하려면:

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-velocity</artifactId>
</dependency>
리소스/templates/에서 템플릿 페이지template를 만듭니다.vm:

<html>
<body>
 <h3> , ${username},  !</h3>
</body>
</html>
우리가 이전에 Spring Boot에서 웹 응용 프로그램을 개발할 때, Spring Boot의 자동화 설정에서 템플릿은 기본적으로resources/templates/디렉터리에 있다고 언급한 적이 있다
마지막으로 단원 테스트에 템플릿 메일을 보내는 테스트 용례를 추가합니다. 구체적으로는 다음과 같습니다.

@Test
public void sendTemplateMail() throws Exception {
 MimeMessage mimeMessage = mailSender.createMimeMessage();
 MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
 helper.setFrom("[email protected]");
 helper.setTo("[email protected]");
 helper.setSubject(" : ");
 Map<String, Object> model = new HashedMap();
 model.put("username", "didi");
 String text = VelocityEngineUtils.mergeTemplateIntoString(
 velocityEngine, "template.vm", "UTF-8", model);
 helper.setText(text, true);
 mailSender.send(mimeMessage);
}
실행을 시도하면 내용을 받을 수 있습니다. 디디, 이것은 템플릿 메일입니다!우편물여기에서username에 전송된 매개 변수를 통해 메일 내용에서 템플릿의 변수 ${username} 를 대체했습니다.
전체 예: Chapter4-5-1
총결산
이상은 바로 이 글의 전체 내용입니다. 본고의 내용이 여러분의 학습이나 업무에 어느 정도 도움이 되고 의문이 있으면 댓글로 교류하시기 바랍니다.

좋은 웹페이지 즐겨찾기