當使用者購買完商品後,我們應該向使用者發送一封郵件,告訴他訂單已生成之類的資訊,郵箱位址是從使用者的基本資訊中擷取,好了,首先我們來看一下java中發送郵件的方法。
1. java中發送email的方法 |
在完善這個項目之前,先來回顧一下java中是如何發送郵件的,首先肯定需要發送郵件的jar包:
mail.jar
,導入到lib目錄下,好了,下面我們先寫一個普通的java程式來回顧一下java email的知識點:
1 public class SendEmailDemo {
2
3 public static void main(String[] args) throws Exception {
4
5 //1. 登陸郵件用戶端(建立會話session)
6 Properties prop = new Properties();
7 prop.setProperty("mail.transport.protocol", "smtp");
8 //建立了session會話
9 Session session = Session.getDefaultInstance(prop);
10 //設定debug模式來調試發送資訊
11 session.setDebug(true);
12 //建立一封郵件對象
13 Message message = new MimeMessage(session);
14 //寫信
15 message.setSubject("歡迎通路我的CSDN部落格首頁!");
16 //正文内容
17 message.setContent("歡迎通路我的CSDN部落格首頁:http://blog.csdn.net/eson_15"
18 + ",麼麼哒~", "text/html;charset=utf-8");
19 //附件人位址
20 message.setFrom(new InternetAddress("[email protected]"));
21 Transport transport = session.getTransport();
22 //連結郵件伺服器的認證資訊
23 transport.connect("smtp.163.com", "nishengwus", "xxxxx密碼");
24 // 設定收件人位址,并發送郵件
25 transport.sendMessage(message, new InternetAddress[]{new InternetAddress("[email protected]")});
26 transport.close();
27 }
28 }
上面就是用java發送郵件的流程:建立會話–>封裝郵件資訊–>設定發件人位址–>設定收件人位址–>發送。
2. 封裝發送郵件功能 |
回顧了java發送郵件的方法後,我們将這個流程封裝到一個工具類中,建立一個EmailUtilImpl實作類,完成後 抽取成EmailUtil接口,如下:
1 //抽取後的EmailUtil接口
2 public interface EmailUtil {
3
4 public abstract void sendEmail(String emailAddress, String id);
5
6 }
7
8 //EmailUtilImpl實作類
9 @Component("emailUtil")
10 public class EmailUtilImpl implements EmailUtil {
11 //參數接收顧客的郵箱位址和訂單編号
12 @Override
13 public void sendEmail(String emailAddress, String id) {
14 // 1. 登陸郵件用戶端(建立會話session)
15 Properties prop = new Properties();
16 Session session = null;
17 Message message = null;
18 Transport transport = null;
19 try {
20 prop.setProperty("mail.transport.protocol", "smtp");
21 // 建立了session會話
22 session = Session.getDefaultInstance(prop);
23 // 設定debug模式來調試發送資訊
24 session.setDebug(true);
25 // 建立一封郵件對象
26 message = new MimeMessage(session);
27 // 寫信
28 message.setSubject("網上商城訂單回報");
29 // 正文内容
30 message.setContent("顧客您好,歡迎您光顧網上商城,訂單" + id + "已支付成功!", "text/html;charset=utf-8");
31 // 附件人位址
32 message.setFrom(new InternetAddress("[email protected]"));
33 transport = session.getTransport();
34 // 連結郵件伺服器的認證資訊
35 transport.connect("smtp.sina.com", "soft03_test", "soft03_test");
36
37 // 設定收件人位址,并發送郵件
38 transport.sendMessage(message, new InternetAddress[] { new InternetAddress(emailAddress) });
39 } catch (Exception e) {
40 e.printStackTrace();
41 throw new RuntimeException(e);
42 } finally {
43 try {
44 transport.close();
45 } catch (MessagingException e) {
46 e.printStackTrace();
47 throw new RuntimeException(e);
48 }
49 }
50 }
3. 完善payAction |
完成了工具類的封裝,接下來我們把該工具類放到BaseAction中,通過
@Resource
注解注入進來,供Action使用,下面我們完善前面的payAction中的
backBank()
方法,如下:
1 @Controller("payAction")
2 @Scope("prototype")
3 public class PayAction extends BaseAction<Object> implements ParameterAware {
4
5 //省略不相關的代碼……
6
7 public void backBank() {
8 BackData backData = (BackData)model;
9 System.out.println(model);
10 boolean isOK = payService.checkBackData(backData);
11 if(isOK) {
12 //1. 更新訂單狀态,參數是自己根據資料庫中的情況傳進去的,用來測試
13 forderService.updateStatusById(Integer.valueOf(201605006), 2);
14 //2. 根據user郵箱位址,發送郵件
15 String emailAddress = backData.getR8_MP().split(",")[0];
16 emailUtil.sendEmail(emailAddress, backData.getR6_Order());
17 //3. 發送手機短信,下一篇部落格來介紹發送短信的功能
18 System.out.println("----success!!----");
19 } else {
20 System.out.println("----false!!!----");
21 }
22 }
23 }
從易寶那邊傳回的資訊中r6_Order參數中儲存的是訂單的編号,r8_MP參數中是使用者的郵箱和電話,第一個是郵箱第二個是電話,用逗号隔開了,是以我們首先要擷取使用者的郵箱位址,然後再來發送郵件。好了,支付完成後給使用者發送郵件的功能就完成了。