SpringBoot系列(十四)集成郵件發送服務及郵件發送的幾種方式

往期推薦html

SpringBoot系列(一)idea新建Springboot項目html5

SpringBoot系列(二)入門知識java

springBoot系列(三)配置文件詳解web

SpringBoot系列(四)web靜態資源配置詳解spring

SpringBoot系列(五)Mybatis整合完整詳細版跨域

SpringBoot系列(六)集成thymeleaf詳解版安全

Springboot系列(七) 集成接口文檔swagger,使用,測試服務器

SpringBoot系列(八)分分鐘學會Springboot多種解決跨域方式網絡

SpringBoot系列(九)單,多文件上傳的正確姿式app

SpringBoot系列(十)優雅的處理統一異常處理與統一結果返回

SpringBoot系列(十一)攔截器與攔截器鏈的配置與使用詳解,你知道多少?

SpringBoot系列(十二)過濾器配置詳解

SpringBoot系列(十三)統一日誌處理,logback+slf4j AOP+自定義註解,走起!

目錄:

1、SMTP協議簡介

 SMTP是一種提供可靠且有效的電子郵件傳輸的協議。SMTP是創建在FTP文件傳輸服務上的一種郵件服務,主要用於系統之間的郵件信息傳遞,並提供有關來信的通知。SMTP獨立於特定的傳輸子系統,且只須要可靠有序的數據流信道支持,SMTP的重要特性之一是其能跨越網絡傳輸郵件,即「SMTP郵件中繼」。使用SMTP,可實現相同網絡處理進程之間的郵件傳輸,也可經過中繼器或網關實現某處理進程與其餘網絡之間的郵件傳輸。

 簡單來講:咱們使用的這些郵件發送功能,他們之間都有一個專門的電子郵件的服務器,相似於郵局,你將郵件發給郵局,郵局又會根據你的郵寄地址發送給相應的郵局,而後接收方去郵局取郵件。而郵件服務器呢,就是互聯網之間的一個郵局,不一樣的網絡之間也能實現電子郵件的發送。

 Spring框架在java郵件服務的基礎上進行了封裝,SpringBoot在Spring的基礎上對郵件服務進一步的封裝,讓SpringBoot發送郵件更爲便利,靈活。

2、開啓SMTP服務並獲取受權碼

 這裏咱們以QQ郵箱爲例,要想在SpringBoot發送QQ郵件必須先打開QQ郵箱的SMTP功能,默認是關閉的,具體操做以下。進入郵箱→設置→帳戶,而後找到下面這個:

 將第一個開啓,這裏我已經開啓了,就不用再開啓了,至於那個POP3協議,這是一種從郵件服務器上讀取郵件的協議,經過POP3協議,收信人不須要參與到與郵件服務器之間的郵件讀取過程,簡化了用戶操做. 收信人能夠「離線」地進行郵件處理,很方便地接收,閱讀郵件。

 而後咱們開啓以後還須要獲取一個受權碼,這個受權碼咱們後面編寫郵件配置須要用到。獲取受權碼可能須要驗證身份什麼的。將受權碼保存下來。

3、依賴導入與配置說明

依賴導入

<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

配置說明

  • host就是你的郵件服務器地址,
  • username就是你的郵箱帳號,帶上後綴
  • password就是你剛剛複製的受權碼,我這裏是亂寫的;
  • default-encoding 設置郵件的編碼爲utf-8;
  • properties:額外的配置,這裏我寫了兩個,只用其中一個就好了,開啓ssl加密,保證安全鏈接。

4、郵件發送

1.簡單郵件發送

 編寫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中,以供使用。它裏面有一些方法,這裏只展現了簡單的幾個,其餘的也很簡單,好比說發送日期,抄送人等等。接受者能夠設置多個,如上。

2. 帶附件內容和正文帶圖片的郵件發送##

@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 "複雜郵件發送!";
}

代碼說明

  • 建立一個MimeMessage 郵件,可是咱們也須要建立一個工具類MimeMessageHelper,至關於代理類吧,郵件的屬性配置就由這個工具類來實現。
  • addInline(),第一個參數是一個contentId,String類型的,至關因而一個key,第二個參數是一個Resource對象,資源對象,這裏咱們傳了一個本地的圖片就用的FileSystemResource對象。固然這裏是說的咱們用的這個addInline方法的參數是這樣,還有其餘的參數類型,所謂重載。
  • setText(),這裏用到的第一個參數就是文本字符串,第二個就是是否解析文本中的html語法。
  • addAttachment() 這個方法是用來添加附件的,附件和咱們以前添加的圖片不同,附件做爲一種未下載的文件,而資源文件則是直接顯示到正文中。利用我本身的郵箱進行測試的截圖:

3. thymeleaf模板做爲郵件發送

 項目中須要引入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 "模板郵件發送成功";
    }

代碼說明:

  • Context 屬於org.thymeleaf.context這個包。
  • context.setVariable(),第一個參數是String,第二個是Object類型。第一個參數就對應thymeleaf模板上面相同名字的參數。
  • templateEngine.process()將指定路徑的html文件轉換成String類型返回。

 測試:

5、總結

 本文講了基礎的郵件發送原理,SMTP協議以及提到的POP3協議的概要內容。而後一塊兒引入依賴,添加項目屬性配置,最後講解了三大類發送郵件的方式。源碼獲取看下面!

相關文章
相關標籤/搜索