Spring發送電子郵件

来源:https://www.cnblogs.com/seve/archive/2019/08/01/11281992.html
-Advertisement-
Play Games

簡介 Spring基於javax.mail封裝了一套用於發送電子郵件的API,位於org.springframework.mail包下,下麵將介紹下發送普通文本郵件和基於thymeleaf模版的郵件。 普通郵件 導入javax.mail依賴 Spring配置類 郵件配置:mail.propertie ...


簡介

Spring基於javax.mail封裝了一套用於發送電子郵件的API,位於org.springframework.mail包下,下麵將介紹下發送普通文本郵件和基於thymeleaf模版的郵件。

普通郵件

導入javax.mail依賴

<!-- ...... -->
<!-- 省略Spring依賴 -->
<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
    <version>1.6.2</version>
</dependency>

Spring配置類

@PropertySource(value="classpath:mail.properties")
@Configuration
public class SpringConfig {
    @Autowired
    Environment environment;
    
    /**
     * Spring郵件配置
     */
    @Bean
    public JavaMailSenderImpl javaMailSenderImpl(){
        JavaMailSenderImpl javaMailSenderImpl = new JavaMailSenderImpl();
        javaMailSenderImpl.setHost(environment.getProperty("mail.host"));
        javaMailSenderImpl.setUsername(environment.getProperty("mail.username"));
        javaMailSenderImpl.setPassword(environment.getProperty("mail.password"));
        javaMailSenderImpl.setDefaultEncoding(environment.getProperty("mail.encoding"));
        return javaMailSenderImpl;
    }
}

郵件配置:mail.properties

#QQ郵箱發送郵件伺服器
mail.host=smtp.qq.com
#QQ郵箱賬戶名
[email protected]
#QQ郵箱授權碼,開啟IMAP/SMTP服務時會生成
mail.password=lrorsapyffcwbegg
#郵件發送編碼
mail.encoding=UTF-8

測試

@RunWith(SpringRunner.class)
@ContextConfiguration(classes=SpringConfig.class)
public class MailTest {
    @Autowired
    private JavaMailSenderImpl javaMailSenderImpl;
    
    @Test
    public void testSimpleMail() throws MessagingException{
        MimeMessage message = javaMailSenderImpl.createMimeMessage();
        
        //發送帶附件和內聯元素的郵件需要將第二個參數設置為true
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        
        //發送方郵箱,和配置文件中的mail.username要一致
        helper.setFrom("[email protected]");
        
        //接收方
        helper.setTo("[email protected]");
        
        //主題
        helper.setSubject("郵件測試");
        
        //郵件內容
        helper.setText("<html><body><img src='cid:myphoto'></body></html>", true);
        
        //郵件內容內嵌的圖片,addInline中的contentId要和郵件內容中的cid相對應
        FileSystemResource res = new FileSystemResource(new File("e:/yc/1.jpg"));
        helper.addInline("myphoto", res);
        
        //郵件附件
        FileSystemResource file = new FileSystemResource(new File("e:/yc/myphoto.zip"));
        helper.addAttachment("myphoto.zip", file);
        
        javaMailSenderImpl.send(message);
    }
}

基於thymeleaf模版的郵件

導入thymeleaf-spring依賴

<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring4</artifactId>
    <version>3.0.11.RELEASE</version>
</dependency>

Spring配置類中添加thymeleaf模板配置

    @Bean
    public TemplateEngine emailTemplateEngine() {
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
        templateResolver.setResolvablePatterns(Collections.singleton("*.html"));
        templateResolver.setPrefix("/templates/");
        templateResolver.setSuffix(".html");
        templateResolver.setTemplateMode(TemplateMode.HTML);
        templateResolver.setCharacterEncoding("UTF-8");
        templateResolver.setCacheable(false);
        templateEngine.addTemplateResolver(templateResolver);
        return templateEngine;
    }

模版文件:/src/main/resources/templates/msg.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <style type="text/css">span{color:orange}</style>
  </head>
  <body>
    <p>
        您好, <span th:text="${name}">xxx</span>,感謝您使用XXX服務,您正在進行郵箱驗證,本次請求的驗證碼為:
    </p>
    <p><span th:text="${validCode}">1111</span>(為了保障您帳號的安全性,請在1小時內完成驗證。)</p>
    <p>
        XXX團隊<br />
        2019年06月06日
    </p>
  </body>
</html>

測試

    @Autowired
    private TemplateEngine emailTemplateEngine;
    
    @Test
    public void testTemplateMail() throws MessagingException{
        MimeMessage message = javaMailSenderImpl.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        helper.setFrom("[email protected]");
        helper.setTo("[email protected]");
        helper.setSubject("郵件測試");
        
        //thymeleaf模版解析成String
        Context ctx = new Context();
        ctx.setVariable("name", "小姐姐");
        ctx.setVariable("validCode", "88888888");
        String htmlContent = emailTemplateEngine.process("msg.html", ctx);
        helper.setText(htmlContent, true);
        
        javaMailSenderImpl.send(message);
    }


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 不需要導入模塊(內置函數) math模塊 需要先導入math模塊,然後以 math.常量名/函數名的方式調用。 數學常量 e π sin(x)、cos(x)、tan(x) degrees(x) e的x次方 序列指的是列表(List)、元組(Tuple)、字元串(String)。 序列,是有序的,集合 ...
  • 1.簡述 AJAX(Asynchronous Javascript And XML),是一個局部刷新技術,即網頁不需要重新載入,只進行部分更新即可 例如:視頻彈幕,點贊,登錄驗證... 2.JavaScript原生AJAX 步驟: 1.創建XMLHttpRequest核心對象; var 變數名 = ...
  • 一個可以沉迷於技術的程式猿,wx加入加入技術群:fsx641385712 ...
  • 10.6 約束條件 10.61 not null 、default 10.62 unique mysql中存在一種專門的數據結構,叫 key,又稱為索引,通過該數據結構可以減少 i/o 次數,從而加速查詢效率 index key : 只有加速查詢的效果,沒有約束的功能 unique key:不僅有加 ...
  • 下載:地址 第1章 課程導學導學 第2章 小程式開發入門從幾個方面介紹小程式開發相關的內容,包括小程式開發者賬號註冊、小程式開發流程、小程式開發規範、小程式常用的API,例如網路請求、本地緩存等API,以及小程式組件等等的知識點。 第3章 深入Django視圖層分層次介紹Django視圖層的重要知識 ...
  • 一、Python簡介 python2: 源碼不統一,有重覆 (更新維護到2020年) python3: 源碼統一,無重覆 Python是一門動態解釋型的強類型定義語言 二、變數 變數命名規則 由數字、字母、下劃線組成 不能以數字開頭 要具有描述性 要區分大小寫 禁止使用python的關鍵字(在pyc ...
  • 01-單例設計模式 第一章:單例模式核心作用 (1)保證一個類只能有一個實例(一個對象) (2)並且提供一個供外界訪問該實例的全局訪問點 第二章:常見應用場景 (1)windows的任務管理器、回收站 (2)項目中,讀取配置文件的類,一般只有一個對象。沒必要每次使用配置文件的數據都要new一個對象去 ...
  • 在python3中socket傳送文件只能傳送‘bytes'類型,如下例子: decode encode bytes > str(unicode) >bytes ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...