首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

SSH 框架電商專案實戰:JavaMail 訂單郵件通知功能實現

     編輯:Java 相關知識

支付成功後,系統需自動發送郵件通知用戶訂單狀態。第 25 戰基於 JavaMail API 封裝通用郵件發送組件,集成至支付回調流程,實現異步通知閉環。

一、 JavaMail 核心發送流程回顧

  1. 創建 Properties 配置 SMTP 協議
  2. 獲取 Session 會話對象,開啟 Debug 模式
  3. 構建 MimeMessage:設置主題、HTML 正文、發件人
  4. 獲取 Transport,連接郵件服務器(SMTP 主機、賬號、授權碼)
  5. 發送郵件至收件人地址,關閉連接

二、 組件化封裝:EmailUtil

1. 接口定義

public interface EmailUtil {
    void sendEmail(String emailAddress, String orderId);
}

2. 實現類(Spring 管理)

@Component("emailUtil")
public class EmailUtilImpl implements EmailUtil {
    @Override
    public void sendEmail(String emailAddress, String orderId) {
        Properties prop = new Properties();
        prop.setProperty("mail.transport.protocol", "smtp");
        Session session = Session.getDefaultInstance(prop);
        session.setDebug(true);

        MimeMessage message = new MimeMessage(session);
        message.setSubject("網上商城訂單通知");
        message.setContent("親,歡迎光臨網上商城,訂單 " + orderId + " 已支付成功!", "text/html;charset=utf-8");
        message.setFrom(new InternetAddress("soft03_test@sina.com"));

        Transport transport = session.getTransport();
        transport.connect("smtp.sina.com", "soft03_test", "soft03_test");
        transport.sendMessage(message, new InternetAddress[]{new InternetAddress(emailAddress)});
        transport.close();
    }
}

異常統一拋出 RuntimeException,由全局異常處理器記錄日誌,不阻塞主流程。

三、 支付回調整合

在 PayAction.backBank() 中,驗證易寶回調數據合法後:

if (isOK) {
    // 1. 更新訂單狀態
    forderService.updateStatusById(Integer.valueOf(201605006), 2);
    // 2. 解析易寶返回的 r8_MP(格式:email,phone)
    String emailAddress = backData.getR8_MP().split(",")[0];
    // 3. 發送郵件
    emailUtil.sendEmail(emailAddress, backData.getR6_Order());
    // 4. 短信發送(下節實現)
    System.out.println("----success!!----");
}

四、 關鍵配置說明

  • SMTP 服務器:smtp.sina.com(新浪郵箱)
  • 發件賬號:soft03_test@sina.com(需開啟 SMTP 服務並獲取授權碼)
  • 郵件編碼:UTF-8,支援中文內容
  • 調試模式:開發階段開啟 session.setDebug(true),生產環境關閉

五、 擴展建議

  • 引入消息隊列(RabbitMQ/Kafka)實現真正異步發送,削峰填谷
  • 模板引擎(Velocity/FreeMarker)分離郵件內容與代碼
  • 發送狀態持久化,支援重試與到達率統計
  • 多郵箱輪詢發送,提升信譽度與送達率

本節完成了訂單支付後的郵件通知鏈路,配合下節短信通知,構建多渠道用戶觸達體系。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved