支付成功後,系統需自動發送郵件通知用戶訂單狀態。第 25 戰基於 JavaMail API 封裝通用郵件發送組件,集成至支付回調流程,實現異步通知閉環。
Properties 配置 SMTP 協議Session 會話對象,開啟 Debug 模式MimeMessage:設置主題、HTML 正文、發件人Transport,連接郵件服務器(SMTP 主機、賬號、授權碼)public interface EmailUtil {
void sendEmail(String emailAddress, String orderId);
}
@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.sina.com(新浪郵箱)soft03_test@sina.com(需開啟 SMTP 服務並獲取授權碼)session.setDebug(true),生產環境關閉本節完成了訂單支付後的郵件通知鏈路,配合下節短信通知,構建多渠道用戶觸達體系。