zoukankan      html  css  js  c++  java
  • 【SSH网上商城项目实战25】使用java email给用户发送邮件

    转自:https://blog.csdn.net/eson_15/article/details/51475046  

    当用户购买完商品后,我们应该向用户发送一封邮件,告诉他订单已生成之类的信息,邮箱地址是从用户的基本信息中获取,好了,首先我们来看一下java中发送邮件的方法。

     

    1. java中发送email的方法

      在完善这个项目之前,先来回顾一下java中是如何发送邮件的,首先肯定需要发送邮件的jar包:mail.jar,导入到lib目录下,好了,下面我们先写一个普通的java程序来回顾一下java email的知识点:

     1 public class SendEmailDemo {
     2 
     3     public static void main(String[] args) throws Exception {
     4 
     5         //1. 登陆邮件客户端(创建会话session)
     6         Properties prop = new Properties();
     7         prop.setProperty("mail.transport.protocol", "smtp");    
     8         //创建了session会话
     9         Session session = Session.getDefaultInstance(prop);
    10         //设置debug模式来调试发送信息
    11         session.setDebug(true);
    12         //创建一封邮件对象
    13         Message message = new MimeMessage(session);
    14         //写信
    15         message.setSubject("欢迎访问我的CSDN博客主页!");
    16         //正文内容
    17         message.setContent("欢迎访问我的CSDN博客主页:http://blog.csdn.net/eson_15"
    18                 + ",么么哒~", "text/html;charset=utf-8");
    19         //附件人地址
    20         message.setFrom(new InternetAddress("nishengwus@163.com"));
    21         Transport transport = session.getTransport();
    22         //链接邮件服务器的认证信息
    23         transport.connect("smtp.163.com", "nishengwus", "xxxxx密码");
    24         // 设置收件人地址,并发送邮件
    25         transport.sendMessage(message, new InternetAddress[]{new InternetAddress("694076359@qq.com")});
    26         transport.close();
    27     }
    28 }

      上面就是用java发送邮件的流程:创建会话–>封装邮件信息–>设置发件人地址–>设置收件人地址–>发送。

     

    2. 封装发送邮件功能

      回顾了java发送邮件的方法后,我们将这个流程封装到一个工具类中,新建一个EmailUtilImpl实现类,完成后 抽取成EmailUtil接口,如下:

     1 //抽取后的EmailUtil接口
     2 public interface EmailUtil {
     3 
     4     public abstract void sendEmail(String emailAddress, String id);
     5 
     6 }
     7 
     8 //EmailUtilImpl实现类
     9 @Component("emailUtil")
    10 public class EmailUtilImpl implements EmailUtil {
    11     //参数接收顾客的邮箱地址和订单编号
    12     @Override
    13     public void sendEmail(String emailAddress, String id) {
    14         // 1. 登陆邮件客户端(创建会话session)
    15         Properties prop = new Properties();
    16         Session session = null;
    17         Message message = null;
    18         Transport transport = null;
    19         try {
    20             prop.setProperty("mail.transport.protocol", "smtp");
    21             // 创建了session会话
    22             session = Session.getDefaultInstance(prop);
    23             // 设置debug模式来调试发送信息
    24             session.setDebug(true);
    25             // 创建一封邮件对象
    26             message = new MimeMessage(session);
    27             // 写信
    28             message.setSubject("网上商城订单反馈");
    29             // 正文内容
    30             message.setContent("顾客您好,欢迎您光顾网上商城,订单" + id + "已支付成功!", "text/html;charset=utf-8");
    31             // 附件人地址
    32             message.setFrom(new InternetAddress("soft03_test@sina.com"));           
    33             transport = session.getTransport();
    34             // 链接邮件服务器的认证信息
    35             transport.connect("smtp.sina.com", "soft03_test", "soft03_test");
    36 
    37             // 设置收件人地址,并发送邮件
    38             transport.sendMessage(message, new InternetAddress[] { new InternetAddress(emailAddress) });
    39         } catch (Exception e) {
    40             e.printStackTrace();
    41             throw new RuntimeException(e);
    42         } finally {         
    43             try {
    44                 transport.close();
    45             } catch (MessagingException e) {
    46                 e.printStackTrace();
    47                 throw new RuntimeException(e);
    48             }
    49         }
    50     }

    3. 完善payAction

      完成了工具类的封装,接下来我们把该工具类放到BaseAction中,通过@Resource注解注入进来,供Action使用,下面我们完善前面的payAction中的backBank()方法,如下:

     1 @Controller("payAction")
     2 @Scope("prototype")
     3 public class PayAction extends BaseAction<Object> implements ParameterAware {
     4 
     5     //省略不相关的代码……
     6 
     7     public void backBank() {
     8         BackData backData = (BackData)model;
     9         System.out.println(model);
    10         boolean isOK = payService.checkBackData(backData);
    11         if(isOK) {
    12             //1. 更新订单状态,参数是自己根据数据库中的情况传进去的,用来测试
    13             forderService.updateStatusById(Integer.valueOf(201605006), 2);
    14             //2. 根据user邮箱地址,发送邮件
    15             String emailAddress = backData.getR8_MP().split(",")[0];
    16             emailUtil.sendEmail(emailAddress, backData.getR6_Order());
    17             //3. 发送手机短信,下一篇博客来介绍发送短信的功能
    18             System.out.println("----success!!----");
    19         } else {
    20             System.out.println("----false!!!----");
    21         }
    22     }
    23 }

      从易宝那边返回的信息中r6_Order参数中保存的是订单的编号,r8_MP参数中是用户的邮箱和电话,第一个是邮箱第二个是电话,用逗号隔开了,所以我们首先要获取用户的邮箱地址,然后再来发送邮件。好了,支付完成后给用户发送邮件的功能就完成了。

     

    
    
  • 相关阅读:
    ubuntu下文件安装与卸载
    webkit中的JavaScriptCore部分
    ubuntu 显示文件夹中的隐藏文件
    C语言中的fscanf函数
    test
    Use SandCastle to generate help document automatically.
    XElement Getting OuterXML and InnerXML
    XUACompatible meta 用法
    Adobe Dreamweaver CS5.5 中文版 下载 注册码
    The Difference Between jQuery’s .bind(), .live(), and .delegate()
  • 原文地址:https://www.cnblogs.com/sharpest/p/9926555.html
Copyright © 2011-2022 走看看