iT邦幫忙

2023 iThome 鐵人賽

DAY 15
0
Mobile Development

Spring Boot+Android 30天 實戰開發 系列 第 15

【Day - 15】Spring Boot 集成郵件發送:spring-boot-starter-mail

  • 分享至 

  • xImage
  •  

1、引言

在現代的應用程式開發中,電子郵件傳送是一項至關重要的功能。它不僅可以用於使用者帳戶的驗證和重要通知,還能夠作為與使用者溝通的一種重要方式。無論是電子商務交易的訂單確認,還是重要事件的提醒,郵件都扮演著連接使用者與應用程式的橋樑。因此,實現可靠且高效的郵件傳送功能對於許多應用來說至關重要。

在本文中,我們將重點介紹如何使用spring-boot-starter-mail套件來在Spring Boot應用程式中實現電子郵件傳送。通過借助這個強大的套件,我們可以輕鬆地將郵件傳送功能整合到我們的應用程式中,同時減少了許多繁瑣的配置步驟。

2、套件引入

首先,打開您的Spring Boot專案的pom.xml文件,並在<dependencies>部分中添加以下依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

這個依賴會從Maven倉庫中下載所需的庫和檔案,使您能夠在專案中使用郵件發送功能。

3、配置郵件伺服器

application.yml檔案中,添加以下配置來指定您的郵件伺服器參數:

spring:
  mail:
    host: smtp.example.com       # SMTP伺服器地址
    port: 587                    # SMTP伺服器埠
    username: your-username      # SMTP伺服器使用者名稱
    password: your-password      # SMTP伺服器密碼
    properties:
      mail:
        smtp:
          auth: true              # 啟用SMTP身份驗證
          starttls:
            enable: true          # 啟用STARTTLS加密
  • 在這個配置中,您需要將以下參數替換為實際的值:
    • host:您的SMTP伺服器地址。
    • port:SMTP伺服器埠。
    • username:SMTP伺服器使用者名稱。
    • password:SMTP伺服器密碼。

此外,我們啟用了SMTP身份驗證以及STARTTLS加密。這些配置將確保您的郵件在傳輸過程中保持安全。

3.1 配置SMTP伺服器,使用Gmail信箱

對於大多數開發者和應用程式,使用現有的電子郵件服務提供商作為SMTP伺服器是一個方便且普遍的選擇。在這裡,我們將以Gmail郵箱為例,演示如何在Spring Boot應用程式中配置Gmail作為SMTP伺服器。

3.1.1 設置您的Google帳戶相關配置

在使用Gmail作為SMTP伺服器之前,需要為您的應用添加一個專屬密碼。這將允許您的應用程式使用使用者名稱和密碼通過SMTP連線到Gmail伺服器。以下是如何啟用此選項的步驟:

  1. 登錄您的Google帳戶,點擊"管理您的Google帳戶"。
    圖片無法顯示
  2. 點選左側欄的"安全性"選項卡
  3. 啟用"兩步驟驗證"
    圖片無法顯示
  4. 在搜尋欄中搜尋"應用程式密碼"
    補充! 如果沒有看到,可以透過以下網址設置: https://myaccount.google.com/apppasswords
    圖片無法顯示
  5. 產生應用程式密碼
    選擇應用程式>其他>輸入"SpringBoot">產生
    圖片無法顯示

3.1.2 設置您應用的配置檔

  • application.yml
spring:
  mail:
    host: smtp.gmail.com          # SMTP伺服器地址
    port: 587                     # SMTP伺服器端口
    username: my.account@gmail.com    # SMTP伺服器使用者名稱
    password: my.password           #輸入你Google帳戶產生的應用程式密碼
    properties:
      mail:
        smtp:
          auth: true              # 啟用SMTP身分驗證
          starttls:
            enable: true          # 啟用STARTTLS加密
    default-encoding: utf-8

4、實現郵件發送

在這一節中,我們將深入探討如何在您的業務邏輯中呼叫郵件傳送服務,從而實現電子郵件的傳送。我們將詳細介紹如何構造電子郵件的內容,包括收件人、主題、正文等。

4.1 測試郵件伺服器配置

在開始正式寄送郵件之前,我們應該確保我們的郵件伺服器配置是有效的。為了驗證這一點,我們可以編寫一個簡單的測試案例,嘗試透過郵件伺服器寄送一封測試郵件。

  • 程式碼:
@SpringBootTest
public class EmailTest {

    @Autowired
    private JavaMailSender javaMailSender;

    @Test
    public void sendTestEmail() {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setTo("收信人@example.com"); //設置收件人信箱
        message.setSubject("Test Email"); //設置信箱主題
        message.setText("This is a test email."); //設置信箱內容
        javaMailSender.send(message); //發送郵件
    }
}

這個簡單的測試用例將嘗試傳送一封測試郵件到指定的收件人地址。如果一切配置正確,您將能夠在收件匣中找到這封測試郵件。
圖片無法顯示

4.2 嵌入內容和附件

在郵件發送過程中,有時候您可能需要將HTML內容嵌入到郵件正文中,或者附加一些文件作為附件發送給收件人。這裡,我們將展示如何在電子郵件中嵌入HTML內容,並添加附件。

  • 範例程式碼:
@Test
public void sendEmailWithAttachment() throws MessagingException, IOException {
    MimeMessage message = javaMailSender.createMimeMessage();
    MimeMessageHelper helper = new MimeMessageHelper(message, true);

    helper.setTo("q1895hjuikldd85@gmail.com");
    helper.setSubject("附帶檔案的郵件");

    // HTML 內容
    String htmlContent = "<h1>來自Spring Boot應用</h1><p>這是一封 HTML 郵件。</p>";
    helper.setText(htmlContent, true);

    // 從類路徑附加檔案
    ClassPathResource resource = new ClassPathResource("static/attachment.txt");
    helper.addAttachment("Attachment.txt", resource);

    javaMailSender.send(message);
}

在本節中,我們深入探討了如何在電子郵件中嵌入HTML內容並添加附件,以便為使用者提供更具吸引力和豐富的郵件體驗。以下是我們涵蓋的主要要點:

  • 使用MimeMessageHelper類可以創建支援嵌入HTML內容和添加附件的MIME消息。
  • 使用setText方法,您可以將HTML內容嵌入到電子郵件正文中,並通過將第二個參數設置為true來指定內容為HTML格式。
  • 使用addAttachment方法,您可以將附件添加到電子郵件中。您可以從文件系統、類路徑等位置獲取附件文件。
  • 嵌入HTML內容和添加附件能夠為電子郵件提供更具個性化和吸引力的元素,提升了使用者體驗。

4.3 處理郵件模板

在本節中,我們將探討如何使用Thymeleaf模板引擎來處理郵件模板,從而實現更加動態和個性化的郵件發送。以下是每個小節的內容。

4.3.1 添加Thymeleaf依賴

首先,在pom.xml檔案中添加Thymeleaf依賴,以便我們可以在Spring Boot應用程式中使用它。

  • pom.xml
    <dependency>   
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    

4.3.2 建立郵件模板

src/main/resources/templates目錄下,建立一個名為email-template.html的Thymeleaf模板檔案。在模板中,您可以使用Thymeleaf的模板語法來插入動態內容,例如使用者的名字、訂單資訊等。

  • email-template.html
<!DOCTYPE html>
<html lang="zh-TW" xmlns:th="http://www.thymeleaf.org">
<head>
  <meta charset="UTF-8"/>
  <title>Spring Boot 電子郵件範本</title>
</head>
<body>
<h1>你好,<span th:text="${userName}">User</span>!</h1>
<p>您的訂單 <span th:text="${orderNumber}">12345</span> 已成功下訂。</p>
</body>
</html>

4.3.3 使用模板發送郵件

@Test
public void sendEmailWithTemplate() throws MessagingException {
    MimeMessage message = javaMailSender.createMimeMessage();
    MimeMessageHelper helper = new MimeMessageHelper(message, true);

    helper.setTo("recipient@example.com");
    helper.setSubject("訂單通知");

    // 創建 Thymeleaf context
    Context context = new Context();
    context.setVariable("userName", "Ian");
    context.setVariable("orderNumber", "58921");

    // Process the template
    String emailContent = templateEngine.process("email-template", context);

    helper.setText(emailContent, true);

    javaMailSender.send(message);
}
  • 收信人郵件
    圖片無法顯示

5、總結

本文深入介紹了在Spring Boot應用程式中實現郵件傳送功能的步驟。通過引入spring-boot-starter-mail套件,我們簡化了郵件傳送的流程,從配置SMTP伺服器到編寫郵件傳送程式碼,再到使用Thymeleaf模板引擎構建動態內容。這些方法使郵件傳送變得更加便捷和靈活,為應用增添了與使用者互動的方式。


上一篇
【Day - 14】Spring Boot 整合Spring Data JPA:輕鬆處理資料庫操作 (下)
下一篇
【Day - 16】深入了解 SpringDoc OpenAPI:自動生成精美的 API 文件
系列文
Spring Boot+Android 30天 實戰開發 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言