SSH框架網(wǎng)上商城項(xiàng)目第25戰(zhàn)之使用java email給用戶(hù)發(fā)送郵件
當(dāng)用戶(hù)購(gòu)買(mǎi)完商品后,我們應(yīng)該向用戶(hù)發(fā)送一封郵件,告訴他訂單已生成之類(lèi)的信息,郵箱地址是從用戶(hù)的基本信息中獲取,好了,首先我們來(lái)看一下java中發(fā)送郵件的方法。
1. java中發(fā)送email的方法
在完善這個(gè)項(xiàng)目之前,先來(lái)回顧一下java中是如何發(fā)送郵件的,首先肯定需要發(fā)送郵件的jar包:mail.jar,導(dǎo)入到lib目錄下,好了,下面我們先寫(xiě)一個(gè)普通的java程序來(lái)回顧一下java email的知識(shí)點(diǎn):
public class SendEmailDemo { public static void main(String[] args) throws Exception { //1. 登陸郵件客戶(hù)端(創(chuàng)建會(huì)話session) Properties prop = new Properties(); prop.setProperty("mail.transport.protocol", "smtp"); //創(chuàng)建了session會(huì)話 Session session = Session.getDefaultInstance(prop); //設(shè)置debug模式來(lái)調(diào)試發(fā)送信息 session.setDebug(true); //創(chuàng)建一封郵件對(duì)象 Message message = new MimeMessage(session); //寫(xiě)信 message.setSubject("歡迎訪問(wèn)我的CSDN博客主頁(yè)!"); //正文內(nèi)容 message.setContent("歡迎訪問(wèn)我的CSDN博客主頁(yè):http://blog.csdn.net/eson_15" + ",么么噠~", "text/html;charset=utf-8"); //附件人地址 message.setFrom(new InternetAddress("nishengwus@163.com")); Transport transport = session.getTransport(); //鏈接郵件服務(wù)器的認(rèn)證信息 transport.connect("smtp.163.com", "nishengwus", "xxxxx密碼"); // 設(shè)置收件人地址,并發(fā)送郵件 transport.sendMessage(message, new InternetAddress[]{new InternetAddress("694076359@qq.com")}); transport.close(); } }
上面就是用java發(fā)送郵件的流程:創(chuàng)建會(huì)話–>封裝郵件信息–>設(shè)置發(fā)件人地址–>設(shè)置收件人地址–>發(fā)送。
2. 封裝發(fā)送郵件功能
回顧了java發(fā)送郵件的方法后,我們將這個(gè)流程封裝到一個(gè)工具類(lèi)中,新建一個(gè)EmailUtilImpl實(shí)現(xiàn)類(lèi),完成后 抽取成EmailUtil接口,如下:
//抽取后的EmailUtil接口 public interface EmailUtil { public abstract void sendEmail(String emailAddress, String id); } //EmailUtilImpl實(shí)現(xiàn)類(lèi) @Component("emailUtil") public class EmailUtilImpl implements EmailUtil { //參數(shù)接收顧客的郵箱地址和訂單編號(hào) @Override public void sendEmail(String emailAddress, String id) { // 1. 登陸郵件客戶(hù)端(創(chuàng)建會(huì)話session) Properties prop = new Properties(); Session session = null; Message message = null; Transport transport = null; try { prop.setProperty("mail.transport.protocol", "smtp"); // 創(chuàng)建了session會(huì)話 session = Session.getDefaultInstance(prop); // 設(shè)置debug模式來(lái)調(diào)試發(fā)送信息 session.setDebug(true); // 創(chuàng)建一封郵件對(duì)象 message = new MimeMessage(session); // 寫(xiě)信 message.setSubject("網(wǎng)上商城訂單反饋"); // 正文內(nèi)容 message.setContent("顧客您好,歡迎您光顧網(wǎng)上商城,訂單" + id + "已支付成功!", "text/html;charset=utf-8"); // 附件人地址 message.setFrom(new InternetAddress("soft03_test@sina.com")); transport = session.getTransport(); // 鏈接郵件服務(wù)器的認(rèn)證信息 transport.connect("smtp.sina.com", "soft03_test", "soft03_test"); // 設(shè)置收件人地址,并發(fā)送郵件 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
完成了工具類(lèi)的封裝,接下來(lái)我們把該工具類(lèi)放到BaseAction中,通過(guò)@Resource注解注入進(jìn)來(lái),供Action使用,下面我們完善前面的payAction中的backBank()方法,如下:
@Controller("payAction") @Scope("prototype") public class PayAction extends BaseAction<Object> implements ParameterAware { //省略不相關(guān)的代碼…… public void backBank() { BackData backData = (BackData)model; System.out.println(model); boolean isOK = payService.checkBackData(backData); if(isOK) { //1. 更新訂單狀態(tài),參數(shù)是自己根據(jù)數(shù)據(jù)庫(kù)中的情況傳進(jìn)去的,用來(lái)測(cè)試 forderService.updateStatusById(Integer.valueOf(201605006), 2); //2. 根據(jù)user郵箱地址,發(fā)送郵件 String emailAddress = backData.getR8_MP().split(",")[0]; emailUtil.sendEmail(emailAddress, backData.getR6_Order()); //3. 發(fā)送手機(jī)短信,下一篇博客來(lái)介紹發(fā)送短信的功能 System.out.println("----success!!----"); } else { System.out.println("----false!!!----"); } } }
從易寶那邊返回的信息中r6_Order參數(shù)中保存的是訂單的編號(hào),r8_MP參數(shù)中是用戶(hù)的郵箱和電話,第一個(gè)是郵箱第二個(gè)是電話,用逗號(hào)隔開(kāi)了,所以我們首先要獲取用戶(hù)的郵箱地址,然后再來(lái)發(fā)送郵件。好了,支付完成后給用戶(hù)發(fā)送郵件的功能就完成了。
原文鏈接:http://blog.csdn.net/eson_15/article/details/51475046
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
java實(shí)現(xiàn)多人多牌數(shù)比較游戲
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)多人多牌數(shù)比較游戲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01java 避免出現(xiàn)NullPointerException(空指針)的方法總結(jié)
這篇文章主要介紹了java 避免出現(xiàn)NullPointerException(空指針)的方法總結(jié)的相關(guān)資料,需要的朋友可以參考下2017-09-09Java動(dòng)態(tài)腳本Groovy獲取Bean技巧
這篇文章主要給大家分享的是Java動(dòng)態(tài)腳本Groovy獲取Bean技巧,在Java代碼中當(dāng)我們需要一個(gè)Bean對(duì)象,通常會(huì)使用spring中@Autowired注解,用來(lái)自動(dòng)裝配對(duì)象。下面我們一起進(jìn)入文章學(xué)習(xí)個(gè)表格多 詳細(xì)內(nèi)容吧2021-12-12SpringCloud開(kāi)發(fā)課程查詢(xún)功能
這篇文章主要介紹了SpringCloud開(kāi)發(fā)課程查詢(xún)功能,本文通過(guò)圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12講解Java設(shè)計(jì)模式編程中的建造者模式與原型模式
這篇文章主要介紹了Java設(shè)計(jì)模式編程中的建造者模式與原型模式,設(shè)計(jì)模式有利于團(tuán)隊(duì)開(kāi)發(fā)過(guò)程中的代碼維護(hù),需要的朋友可以參考下2016-02-02Spring @Valid和@Validated區(qū)別和用法實(shí)例
這篇文章主要介紹了Spring @Valid和@Validated區(qū)別和用法實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04SpringMVC中@RequestMapping注解的實(shí)現(xiàn)
RequestMapping是一個(gè)用來(lái)處理請(qǐng)求地址映射的注解,本文主要介紹了SpringMVC中@RequestMapping注解的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01