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