文章出處

當用戶購買完商品后,我們應該向用戶發送一封郵件,告訴他訂單已生成之類的信息,郵箱地址是從用戶的基本信息中獲取,好了,首先我們來看一下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://www.baidu.com"
                + ",么么噠~", "text/html;charset=utf-8");
        //附件人地址
        message.setFrom(new InternetAddress("shanhe@163.com"));
        Transport transport = session.getTransport();
        //鏈接郵件服務器的認證信息
        transport.connect("smtp.163.com", "shanhe", "此密碼是你開啟郵箱stamp和IMAP后網易給你的密碼(不是原來登錄密碼)");
        // 設置收件人地址,并發送郵件
        transport.sendMessage(message, new InternetAddress[]{new InternetAddress("841059275@qq.com")});
        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("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

@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參數中是用戶的郵箱和電話,第一個是郵箱第二個是電話,用逗號隔開了,所以我們首先要獲取用戶的郵箱地址,然后再來發送郵件。好了,支付完成后給用戶發送郵件的功能就完成了。

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()