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参数中是用户的邮箱和电话,第一个是邮箱第二个是电话,用逗号隔开了,所以我们首先要获取用户的邮箱地址,然后再来发送邮件。好了,支付完成后给用户发送邮件的功能就完成了。

     

    
    
  • 相关阅读:
    java ssl https 连接详解 生成证书
    mysql实战优化之四:mysql索引优化
    mysql实战优化之五: 更新/插入优化 sql优化
    mysql实战优化之六:Order by优化 sql优化、索引优化
    mina2中IoHandler
    I/O通信模型(BIO,NIO,AIO)
    mina框架详解
    转:架构师于小波:魅族实时消息推送架构
    支付业务的数据库表的设计
    实战 TestNG 监听器
  • 原文地址:https://www.cnblogs.com/sharpest/p/9926555.html
Copyright © 2011-2022 走看看