博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【SSH网上商城项目实战25】使用java email给用户发送邮件
阅读量:6509 次
发布时间:2019-06-24

本文共 4464 字,大约阅读时间需要 14 分钟。

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

 

 

 

 

转载于:https://www.cnblogs.com/sharpest/p/9926555.html

你可能感兴趣的文章
汇编语言的应用
查看>>
device platform 相应的表
查看>>
php des 加密解密实例
查看>>
【Mac】Mac键盘实现Home, End, Page UP, Page DOWN
查看>>
实战使用Axure设计App,使用WebStorm开发(1) – 用Axure描述需求
查看>>
安德鲁斯----多媒体编程
查看>>
[zz]在linux中出现there are stopped jobs 的解决方法
查看>>
Delphi下实现全屏快速找图找色 一、数据提取
查看>>
查询表字段信息
查看>>
关于机器学习的最佳科普文章:《从机器学习谈起》
查看>>
dxFlowChart运行时调出编辑器
查看>>
NET Framework 3.0 (WinFX) RTM发布
查看>>
图片拼接器
查看>>
C++ TinyXml操作(含源码下载)
查看>>
中断小笔记
查看>>
C#委托、事件、消息(入门级)
查看>>
FreeBinary 格式说明
查看>>
使用Spring Cloud和Docker构建微服务
查看>>
NB-IoT的成功商用不是一蹴而就
查看>>
九州云实战人员为您揭秘成功部署OpenStack几大要点
查看>>