【SSH網上商城項目實戰25】使用java email給用戶發送郵件

  當用戶購買完商品後,我們應該向用戶發送一封郵件,告訴他訂單已生成之類的信息,郵箱地址是從用戶的基本信息中獲取,好了,首先我們來看一下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();
    }
}
  • 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
  • 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

  上面就是用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);
            }
        }
    }
  • 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
  • 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

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!!!----");
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

  從易寶那邊返回的信息中r6_Order參數中保存的是訂單的編號,r8_MP參數中是用戶的郵箱和電話,第一個是郵箱第二個是電話,用逗號隔開了,所以我們首先要獲取用戶的郵箱地址,然後再來發送郵件。好了,支付完成後給用戶發送郵件的功能就完成了。

  相關閱讀:http://blog.csdn.net/column/details/str2hiberspring.html
  整個項目的源碼下載地址:http://blog.csdn.net/eson_15/article/details/51479994


—–樂於分享,共同進步!
—–更多文章請看:http://blog.csdn.net/eson_15

(function () { ('pre.prettyprint code').each(function () { var lines = (this).text().split(\n).length;var numbering = $('
    ').addClass('pre-numbering').hide(); (this).addClass(hasnumbering).parent().append( numbering); for (i = 1; i
    發表評論
    所有評論
    還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
    相關文章