Spring Boot學習(十四)之Spring boot中使用QQ郵箱傳送郵件
如其他自動化配置模組一樣,在完成了依賴引入之後,只需要在application.properties中配置相應的屬性內容。下面我們以QQ郵箱為例,在application.properties中加入如下配置(注意替換自己的使用者名稱和密碼):一種模版配置;<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.cicoding</groupId> <artifactId>cicoding-mail</artifactId> <version>1.0.0</version> <packaging>jar</packaging> <name>cicoding-mail</name> <description>Spring Boot project</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.2.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-velocity</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
另一種模版配置;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
spring.mail.host=smtp.qq.com
spring.mail.username=郵箱名
spring.mail.password=這裡填郵箱的授權碼
spring.mail.default-encoding=UTF-8
spring.mail.port=465
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.debug=true
- 注意:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
public class ApplicationTests {
@Autowired
private JavaMailSender mailSender;
@Autowired
private VelocityEngine velocityEngine;
@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來發送一封帶有附件的郵件):@Autowired
private JavaMailSender mailSender;
@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]m");
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模組的依賴:(在pom檔案已經一如依賴)@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", "cicoding");
String text = VelocityEngineUtils.mergeTemplateIntoString(
velocityEngine, "template.vm", "UTF-8", model);
helper.setText(text, true);
mailSender.send(mimeMessage);
}
在resources/templates/下,建立一個模板頁面template.vm:<html><body> <h3>你好, ${username}, 這是一封模板郵件!</h3></body></html>嘗試執行一下,就可以收到內容為你好, cicoding, 這是一封模板郵件!的郵件。這裡,我們通過傳入username的引數,在郵件內容中替換了模板中的${username}變數。
相關推薦
Spring Boot學習(十四)之Spring boot中使用QQ郵箱傳送郵件
相信使用過Spring的眾多開發者都知道Spring提供了非常好用的JavaMailSender介面實現郵件傳送。在Spring Boot的Starter模組中也為此提供了自動化配置。下面通過例項看看如
Spring Boot學習(十二)之Spring Boot使用@Async實現非同步呼叫
什麼是“非同步呼叫”?“非同步呼叫”對應的是“同步呼叫”,同步呼叫指程式按照定義順序依次執行,每一行程式都必須等待上一行程式執行完成之後才能執行;非同步呼叫指程式在順序執行時,不等待非同步呼叫的語句返回
spring boot 學習(十四)SpringBoot+Redis+SpringSession緩存之實戰
blog 安裝 user 個人 turn pid pass pin star SpringBoot + Redis +SpringSession 緩存之實戰 前言 前幾天,從師兄那兒了解到EhCache是進程內的緩存框架,雖然它已經提供了集群環境下的緩存同步策略,這種同步仍
RabbitMQ學習(十一)之spring整合傳送非同步訊息
實現使用Exchange型別為DirectExchange. routingkey的名稱預設為Queue的名稱。非同步傳送訊息。 1.配置檔案 [plain] view plain copy print? #============== rabbitmq co
Spring的學習(四):Web中的Spring
Spring通常用來開發Web應用。 SpringMVC的執行過程: 我們可以從以下的圖來分析SpringMVC的的執行過程。 1、客戶端在傳送請求的時候,會呼叫DispatcherServlet,Dispatch是SpringMVC的入口,Dispatche
劍指offer十四之鏈表中倒數第k個結點
gif img https question pla last 代碼 鏈表 || 一、題目 輸入一個鏈表,輸出該鏈表中倒數第k個結點。 二、思路 兩個指針,先讓第一個指針和第二個指針都指向頭結點,然後再讓第一個指正走(k-1)步,到達第k個節點。然後兩個指針同
Spring Boot學習(四)
自動配置 pat xml配置 XML 入口 spa ges auto classpath @SpringBootApplication 每一個Spring Boot項目都有一個名為*Application的入口類,入口類中有個main方法,在main方法中使用: Sprin
spring boot 學習(十二)攔截器實現IP黑名單
ppi html .html 日期類 dpa asp tails 我們 req 攔截器實現IP黑名單 前言 最近一直在搞 Hexo+GithubPage 搭建個人博客,所以沒怎麽進行 SpringBoot 的學習。所以今天就將上次的”?秒防刷新”進行了一番修改。上次是采用註
spring boot 學習(十一)使用@Async實現異步調用
fontsize south 操作 dom img water 截圖 ota app 使用@Async實現異步調用 什麽是”異步調用”與”同步調用” “同步調用”就是程序按照一定的順序依次執行,,每一行程序代碼必須等上一行代碼執行完畢才能執行;”異步調用”則是只要上一行代碼
Spring Boot(十四)RabbitMQ延遲隊列
system ofo 註意 contex ride build isa config msg 一、前言 延遲隊列的使用場景:1.未按時支付的訂單,30分鐘過期之後取消訂單;2.給活躍度比較低的用戶間隔N天之後推送消息,提高活躍度;3.過1分鐘給新註冊會員的用戶,發送註冊郵件
Spring Boot(十四)RabbitMQ延遲佇列
一、前言 延遲佇列的使用場景:1.未按時支付的訂單,30分鐘過期之後取消訂單;2.給活躍度比較低的使用者間隔N天之後推送訊息,提高活躍度;3.過1分鐘給新註冊會員的使用者,傳送註冊郵件等。 <!--more--> 實現延遲佇列的方式有兩種: 通過訊息過期後進入死信交換器,再由交換器轉
Spring Boot學習筆記(四)使用AOP整合log4j日誌
rsources下面建立log4j.properties 新增配置資訊 # LOG4J配置 log4j.rootCategory=INFO, stdout, file, errorfile //級別,控制檯,檔案,錯誤的日誌 log4j.category.c
Spring Boot學習(四):使用@SpringBootTest註解進行單元測試
一、簡介 專案中經常會遇到需要單元測試的情況,那麼SpringBoot如何實現這種需求,使用@SpringBootTest註解可以執行環境,測試後臺程式碼。 二、環境準備 eclipse + maven + Spring Boot 三、程式碼示例 pom.xml
十四、spring boot 2.x 整合 jpa 進階
本文主要針對jpa常見的用法進行演示講解,主要包括JPA常見的查詢、分頁查詢、HQL操作、SQL操作等幾個方面。 1、JPA支援的常用的查詢 /** * And查詢 等價於SQL中的and<br> */ List<
Spring Boot 構建企業級部落格學習(四)- Spting Boot 整合Thymeleaf模板
Spting Boot 整合Thymeleaf模板 理解Thymeleaf的概念、用法 Thymeleaf 與 Spring Boot 整合 Thymeleaf 實戰 Thymeleaf概念 理解Thymeleaf Thymeleaf是一種
從.Net到Java學習第四篇——spring boot+redis
“學習java已經十天,有時也懷念當初.net的經典,讓這語言將你我相連,懷念你......”接上一篇,本篇使用到的框架redis、FastJSON。 環境準備 安裝redis,下圖是我本機的redis綠色版,你可以網上自行下載安裝,如果不知道如何怎麼操作,可以移步到我的另一篇文章:ASP.NET R
SpringCloud SpringBoot mybatis 分散式微服務(十四)Spring Boot整合MyBatis
Spring中整合MyBatis就不多說了,最近大量使用Spring Boot,因此整理一下Spring Boot中整合MyBatis的步驟。搜了一下Spring Boot整合MyBatis的文章,方法都比較老,比較繁瑣。查了一下文件,實際已經支援較為簡單的整合與使用。下面就
Spring Boot 學習 (四)自定義 Banner
SpringBoot應用程式啟動過程中,都會預設在控制檯輸出上圖所顯示的內容,即是我們本篇文章所說的Banner。 當然,SpringBoot 提供了預設的Banner之外,也提供了自定義設定Banner的功能。 1、自定義Banner內容 自定義Banner很簡單
第十四篇: Spring Boot使用校驗框架validation校驗
Spring Boot在內部通過整合hibernate-validation已經實現了JSR-349驗證規範介面,在Spring Boot專案中只要直接使用就行了。一般用在Controller中用於驗證前端傳來的引數。驗證分兩種:對封裝的Bean進行驗證 或者 對方法簡單
Spring Boot教程十四:基於自定義註解的AOP資料來源自動切換
上一篇文章講到了多資料來源的配置和手動切換,手動切換費時費力,下面我們改進一下,改成基於註解的AOP資料來源自動切換。 基礎知識不在贅述,直接上程式碼: public class DataSourceContextHolder { private static