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