经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
【SSH网上商城项目实战25】使用java email给用户发送邮件
来源:cnblogs  作者:在等风来的日子  时间:2018/11/6 18:26:56  对本文有异议

 

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

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

2. 封装发送邮件功能

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

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

3. 完善payAction

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

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

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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号