往期推薦html
SpringBoot系列(一)idea新建Springboot項目html5
SpringBoot系列(四)web靜態資源配置詳解spring
SpringBoot系列(五)Mybatis整合完整詳細版跨域
SpringBoot系列(六)集成thymeleaf詳解版安全
Springboot系列(七) 集成接口文檔swagger,使用,測試服務器
SpringBoot系列(八)分分鐘學會Springboot多種解決跨域方式網絡
SpringBoot系列(九)單,多文件上傳的正確姿式app
SpringBoot系列(十)優雅的處理統一異常處理與統一結果返回
SpringBoot系列(十一)攔截器與攔截器鏈的配置與使用詳解,你知道多少?
SpringBoot系列(十三)統一日誌處理,logback+slf4j AOP+自定義註解,走起!
目錄:
SMTP是一種提供可靠且有效的電子郵件傳輸的協議。SMTP是創建在FTP文件傳輸服務上的一種郵件服務,主要用於系統之間的郵件信息傳遞,並提供有關來信的通知。SMTP獨立於特定的傳輸子系統,且只須要可靠有序的數據流信道支持,SMTP的重要特性之一是其能跨越網絡傳輸郵件,即「SMTP郵件中繼」。使用SMTP,可實現相同網絡處理進程之間的郵件傳輸,也可經過中繼器或網關實現某處理進程與其餘網絡之間的郵件傳輸。
簡單來講:咱們使用的這些郵件發送功能,他們之間都有一個專門的電子郵件的服務器,相似於郵局,你將郵件發給郵局,郵局又會根據你的郵寄地址發送給相應的郵局,而後接收方去郵局取郵件。而郵件服務器呢,就是互聯網之間的一個郵局,不一樣的網絡之間也能實現電子郵件的發送。
Spring框架在java郵件服務的基礎上進行了封裝,SpringBoot在Spring的基礎上對郵件服務進一步的封裝,讓SpringBoot發送郵件更爲便利,靈活。
這裏咱們以QQ郵箱爲例,要想在SpringBoot發送QQ郵件必須先打開QQ郵箱的SMTP功能,默認是關閉的,具體操做以下。進入郵箱→設置→帳戶,而後找到下面這個:
將第一個開啓,這裏我已經開啓了,就不用再開啓了,至於那個POP3協議,這是一種從郵件服務器上讀取郵件的協議,經過POP3協議,收信人不須要參與到與郵件服務器之間的郵件讀取過程,簡化了用戶操做. 收信人能夠「離線」地進行郵件處理,很方便地接收,閱讀郵件。
而後咱們開啓以後還須要獲取一個受權碼,這個受權碼咱們後面編寫郵件配置須要用到。獲取受權碼可能須要驗證身份什麼的。將受權碼保存下來。
依賴導入:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
爲了方便測試咱們也須要將starter-web的依賴導入進來。
配置文件:
spring: mail: host: smtp.qq.com username: qzstudynote@qq.com password: zxcvbnmkj properties: mail: smtp: socketFactory: class: javax.net.ssl.SSLSocketFactory ## ssl: ## enable :true default-encoding: utf-8
配置說明:
編寫controller,或者是直接在測試模塊添加測試就行
@RestController public class MailController { @Autowired JavaMailSenderImpl javaMailSender; @RequestMapping("/mail") public String sendMail(){ SimpleMailMessage message = new SimpleMailMessage(); //郵件設置 message.setSubject("郵件主題"); message.setText("郵件內容"); message.setTo("xxxxxxx@139.com","111111111@qq.com"); message.setFrom("qzstudynote@qq.com"); javaMailSender.send(message); return "簡單郵件發送成功!" } }
代碼說明:JavaMailSenderImpl就是一個SpringBoot中用來發送郵件的一個實現類,咱們須要將它注入到bean中,以供使用。它裏面有一些方法,這裏只展現了簡單的幾個,其餘的也很簡單,好比說發送日期,抄送人等等。接受者能夠設置多個,如上。
@RequestMapping("/mineMail") public String sendMineMail() throws MessagingException { //一、建立一個複雜的郵件 MimeMessage mimeMessage = javaMailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true); //郵件主題 helper.setSubject("這是一個郵件啊"); //文本中添加圖片 helper.addInline("image1",new FileSystemResource("D:\\images\\spring\\1.jpg")); //郵件內容 helper.setText("全棧學習筆記<a href='https://www.cnblogs.com/swzx-1213/'>百度一下</a> <img src='cid:image1'></img>",true); helper.setTo("xxxxx@139.com"); helper.setFrom("qzstudynote@qq.com"); //附件添加圖片 helper.addAttachment("1.jpg",new File("D:\\images\\spring\\1.jpg")); //附件添加word文檔 helper.addAttachment("哈哈哈.docx",new File("D:\\images\\spring\\哈哈哈.docx")); javaMailSender.send(mimeMessage); return "複雜郵件發送!"; }
代碼說明:
項目中須要引入thymeleaf依賴,而且要在新建的html文件中加入:xmlns:th="http://www.thymeleaf.org" ,不會thymeleaf的請移步以前的文章。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
這裏在templates下面建立了一個email的html5文件。
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <p th:text="${name}"></p> <a th:text="這是一個連接" th:href="${link}"></a> <img th:src="${image1}"> </body> </html>
controller中再添加一個方法。
@RequestMapping("/thyMail") public String sendThymeleafMail() throws MessagingException { MimeMessage mimeMessage = javaMailSender.createMimeMessage(); MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage); messageHelper.setSubject("這是一個thymeleaf模板郵件"); messageHelper.setTo("xxxxxxxx@139.com"); messageHelper.setFrom("qzstudynote@qq.com"); Context context = new Context(); context.setVariable("name","這是一個新建的thymeleaf模板"); context.setVariable("link","https://www.cnblogs.com/swzx-1213/"); context.setVariable("image1","https://s1.ax1x.com/2020/04/14/JShDYt.th.jpg"); String value = templateEngine.process("email.html",context); messageHelper.setText(value,true); javaMailSender.send(mimeMessage); return "模板郵件發送成功"; }
代碼說明:
測試:
本文講了基礎的郵件發送原理,SMTP協議以及提到的POP3協議的概要內容。而後一塊兒引入依賴,添加項目屬性配置,最後講解了三大類發送郵件的方式。源碼獲取看下面!