1. 程式人生 > >Spring Boot中使用JavaMailSender傳送郵件

Spring Boot中使用JavaMailSender傳送郵件

相信使用過Spring的眾多開發者都知道Spring提供了非常好用的JavaMailSender介面實現郵件傳送。在Spring Boot的Starter模組中也為此提供了自動化配置。下面通過例項看看如何在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依賴之後,會根據配置檔案中的內容去建立JavaMailSender例項,因此我們可以直接在需要使用的地方直接@Autowired來引入郵件傳送物件。

進階使用

在上例中,我們通過使用SimpleMailMessage實現了簡單的郵件傳送,但是實際使用過程中,我們還可能會帶上附件、或是使用郵件模組等。這個時候我們就需要使用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>

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("[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);
}

嘗試執行一下,就可以收到內容為你好, didi, 這是一封模板郵件!的郵件。這裡,我們通過傳入username的引數,在郵件內容中替換了模板中的${username}變數。

 本文由 程式猿DD-翟永超 創作,採用 CC BY 3.0 CN協議 進行許可。 可自由轉載、引用,但需署名作者且註明文章出處。如轉載至微信公眾號,請在文末新增作者公眾號二維碼。

------------------------------------------------------------------------------------------------------------------------------ 

相關推薦

Spring Boot使用JavaMailSender傳送郵件

http://www.cnblogs.com/wxc-xiaohuang/p/9532631.html https://blog.csdn.net/icannotdebug/article/details/79725297 https://docs.spring.io/spring/docs/4.3.21

spring boot 用javaMail傳送郵件,很多坑

直接傳送總是報錯 554 dt:spm 被163攔截,認為非法,抄送一份給自己就解決了。但是顯示抄送人,很煩。 service層 package com.llong.email.mail; import org.springframework.beans.factory.anno

Spring Boot引入mail郵件服務

傳送郵件,包括簡單郵件,html郵件,帶附件郵件,內嵌圖片郵件四種類型。 1、配置 pom.xml <dependency> <groupId>org.springframework.boot</groupId> <artifactI

spring自帶JavaMailSender傳送郵件

spring自帶的MailSender類在spring-context-support-xxx.RELEASE.jar檔案中,這裡以4.3.4版本為例。1、新建gradle專案,引入依賴配置。 compile group:"org.springframework",name:

Spring Boot使用JavaMailSender傳送郵件

相信使用過Spring的眾多開發者都知道Spring提供了非常好用的JavaMailSender介面實現郵件傳送。在Spring Boot的Starter模組中也為此提供了自動化配置。下面通過例項看看如何在Spring Boot中使用JavaMailSender傳送郵件。 快速入門 在Spring

spring-boot實戰【12】:Spring Boot使用JavaMailSender發送郵件

nts fun rop oci 單元測試 prop 快速入門 cat tid 相信使用過Spring的眾多開發者都知道Spring提供了非常好用的JavaMailSender接口實現郵件發送。在Spring Boot的Starter模塊中也為此提供了自動化配置。下面通過實例

Spring Boot學習(十四)之Spring boot使用QQ郵箱傳送郵件

相信使用過Spring的眾多開發者都知道Spring提供了非常好用的JavaMailSender介面實現郵件傳送。在Spring Boot的Starter模組中也為此提供了自動化配置。下面通過例項看看如

使用springJavaMailSender傳送郵件

步驟:     一:pom.xml       <!-- java郵件 -->       <dependency>         &nb

spring-boot(十)郵件傳送

springboot仍然在狂速發展,才五個多月沒有關注,現在看官網已經到1.5.3.RELEASE版本了。準備慢慢在寫寫springboot相關的文章,本篇文章使用springboot最新版本1.5.3進行開發。 傳送郵件應該是網站的必備功能之一,什麼註冊驗證,忘記密碼或者是給使用者傳送營銷資訊

Spring JavaMailSender傳送郵件

個人選擇的傳送服務伺服器是QQ,所以要進行開啟QQ郵箱的SMTP服務,過程如圖所示: 在賬戶下設定開啟SMTP服務,需記住顯示的STMP密碼,點選“開啟”後發簡訊過去即可開啟 EmailSendTest: import org.junit.Test; im

Spring Boot使用WebSocket總結(二):向指定使用者傳送WebSocket訊息並處理對方不線上的情況

Spring Boot中使用WebSocket總結(二):向指定使用者傳送WebSocket訊息並處理對方不線上的情況 在上一篇文章(www.zifangsky.cn/1355.html)中我介紹了在Spring專案中使用WebSocket的幾種實現方式。但是,上篇文章中只介紹了服務端採用廣播模式給所有客戶

Spring bootlog4j2配置yml方式併發送郵件

(1) 引包 (注:當排除預設logback日誌時,放spring-boot-starter-web下不能把logback清理乾淨,報Class path contains multiple SLF4J bindings.) <!-- 發郵件 --> <

Spring boot 使用Jersey框架實現簡訊傳送

1.Jersey框架 Jersey RESTful 框架是開源的RESTful框架, 實現了JAX-RS (JSR 311 & JSR 339)規範。它擴充套件了JAX-RS 參考實現, 提供了更多的特性和工具, 可以進一步地簡化 RESTful se

Spring Boot實戰系列(6)郵件傳送

本篇主要介紹了Spring Boot中郵件傳送,分別講解了簡單的文字郵件、HTML郵件、附件郵件、圖片郵件、模板郵件。 快速導航 新增Maven依賴 配置檔案增加郵箱相關配置 Service、Test專案程式碼構建 五種郵件傳送型別講解 文字郵件 htm

spring JavaMailSender 傳送郵件

配置JavaMailSenderImpl類 ** * @Configuration 表示是配置類 * @ComponentScan("com") 需要掃描的包路徑 * @PropertySource("classpath:mail.properties") 需要載入的

探究Spring Boot的接收引數問題與客戶端傳送請求傳遞資料

結合此篇參考[Spring框架學習筆記(9)——API介面設計相關知識及具體編碼實現](https://www.cnblogs.com/stars-one/p/12305429.html) 在使用Spring Boot進行接收引數的時候,發現了許多問題,之前一直都很忙,最近才稍微有空研究一下此問題。 網上

spring boot 訪問 REST 接口

pri clas rest pla oot bject res .get obj RestTemplate restTemplate = new RestTemplate(); Object result = restTemplate.getForObject("http

3.Spring Boot使用Swagger2構建強大的RESTful API文檔

pack 效果 type 現象 業務邏輯 blank depend imp any 原文:http://www.jianshu.com/p/8033ef83a8ed 由於Spring Boot能夠快速開發、便捷部署等特性,相信有很大一部分Spring Boot的用戶會用來構

spring-boot實戰【07】【轉】:Spring BootWeb應用的統一異常處理

http integer private fin ima lex clas 友好 ref 我們在做Web應用的時候,請求處理過程中發生錯誤是非常常見的情況。Spring Boot提供了一個默認的映射:/error,當處理中拋出異常之後,會轉到該請求中處理,並且該請求有一個全

spring-boot實戰【06】【轉】:Spring Boot使用Swagger2

des values 產生 service sof div 解決 整合 data 由於Spring Boot能夠快速開發、便捷部署等特性,相信有很大一部分Spring Boot的用戶會用來構建RESTful API。而我們構建RESTful API的目的通常都是由於多終端的