【SSH網上商城專案實戰25】使用java email給使用者傳送郵件
阿新 • • 發佈:2018-11-06
當用戶購買完商品後,我們應該向使用者傳送一封郵件,告訴他訂單已生成之類的資訊,郵箱地址是從使用者的基本資訊中獲取,好了,首先我們來看一下java中傳送郵件的方法。
1. java中傳送email的方法 |
在完善這個專案之前,先來回顧一下java中是如何傳送郵件的,首先肯定需要傳送郵件的jar包:mail.jar
,匯入到lib目錄下,好了,下面我們先寫一個普通的java程式來回顧一下java email的知識點:
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(" [email protected]")); Transport transport = session.getTransport(); //連結郵件伺服器的認證資訊 transport.connect("smtp.163.com", "nishengwus", "xxxxx密碼"); // 設定收件人地址,併發送郵件 transport.sendMessage(message, new InternetAddress[]{new InternetAddress("[email protected]")}); transport.close(); } }
上面就是用java傳送郵件的流程:建立會話–>封裝郵件資訊–>設定發件人地址–>設定收件人地址–>傳送。
2. 封裝傳送郵件功能 |
回顧了java傳送郵件的方法後,我們將這個流程封裝到一個工具類中,新建一個EmailUtilImpl實現類,完成後 抽取成EmailUtil介面,如下:
//抽取後的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("[email protected]")); 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()
方法,如下:
@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引數中是使用者的郵箱和電話,第一個是郵箱第二個是電話,用逗號隔開了,所以我們首先要獲取使用者的郵箱地址,然後再來發送郵件。好了,支付完成後給使用者傳送郵件的功能就完成了。