首頁 >Java >java教程 >Spring Boot中利用JavaMailSender傳送郵件的方法範例(附原始碼)

Spring Boot中利用JavaMailSender傳送郵件的方法範例(附原始碼)

黄舟
黄舟原創
2017-03-09 10:10:202030瀏覽

這篇文章主要介紹了Spring Boot中利用JavaMailSender發送郵件的方法範例, 相信使用過Spring的眾多開發者都知道Spring提供了非常好用的JavaMailSender介面實作郵件傳送。在Spring Boot的Starter模組中也為此提供了自動化配置。需要的朋友可以參考借鏡。

快速入門

在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("dyc87112@qq.com");
 message.setTo("dyc87112@qq.com");
 message.setSubject("主题:简单邮件");
 message.setText("测试邮件内容");
 mailSender.send(message);
 }
}

到這裡,一個簡單的郵件發送就完成了,執行一下該單元測試,看看效果如何?

「由於Spring Boot的starter模組提供了自動化配置,所以在引入了spring-boot-starter-mail依賴之後,會根據設定檔中的內容去建立JavaMailSender實例,因此我們可以直接在需要使用的地方直接 @Autowired來引入郵件發送物件。了簡單的郵件發送,但是在實際使用過程中,我們也可能會帶附件、或使用郵件模組等。這時候我們就需要使用MimeMessage來設定複雜的郵件內容,我們就來依序實作一下。

傳送附件在上面單元測試中加入以下測試案例(透過MimeMessageHelper來傳送一封帶有附件的郵件):

@Test
public void sendAttachmentsMail() throws Exception {
 MimeMessage mimeMessage = mailSender.createMimeMessage();
 MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
 helper.setFrom("dyc87112@qq.com");
 helper.setTo("dyc87112@qq.com");
 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("dyc87112@qq.com");
 helper.setTo("dyc87112@qq.com");
 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>

在resources/templates/下,建立一個範本頁面template.vm:

<html>
<body>
 <h3>你好, ${username}, 这是一封模板邮件!</h3>
</body>
</html>

我們之前在Spring Boot中開發Web應用時,提到在Spring Boot的自動化配置下,模板預設位於resources/templates/目錄下

最後,我們在單元測試中加入發送模板郵件的測試案例,具體如下:

@Test
public void sendTemplateMail() throws Exception {
 MimeMessage mimeMessage = mailSender.createMimeMessage();
 MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
 helper.setFrom("dyc87112@qq.com");
 helper.setTo("dyc87112@qq.com");
 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);
}

嘗試運行一下,就可以收到內容為你好,

didi, 這是一封範本郵件!的郵件

。這裡,我們透過傳入username的參數,在郵件內容中取代了模板中的

${username}

變數。

以上是Spring Boot中利用JavaMailSender傳送郵件的方法範例(附原始碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn