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

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

1. java中发送email的方法

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

public class SendEmailDemo {

    public static void main(String[] args) throws Exception {

        //1. 登陆邮件客户端(创建会话session)
Properties prop = new Properties();
prop.setProperty("mail.transport.protocol", "smtp");
//创建了session会话
Session session = Session.getDefaultInstance(prop);
//设置debug模式来调试发送信息
session.setDebug(true);
//创建一封邮件对象
Message message = new MimeMessage(session);
//写信
message.setSubject("欢迎访问我的CSDN博客主页!");
//正文内容
message.setContent("欢迎访问我的CSDN博客主页:http://blog.csdn.net/eson_15"
+ ",么么哒~", "text/html;charset=utf-8");
//附件人地址
message.setFrom(new InternetAddress("nishengwus@163.com"));
Transport transport = session.getTransport();
//链接邮件服务器的认证信息
transport.connect("smtp.163.com", "nishengwus", "xxxxx密码");
// 设置收件人地址,并发送邮件
transport.sendMessage(message, new InternetAddress[]{new InternetAddress("694076359@qq.com")});
transport.close();
}
}

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

2. 封装发送邮件功能

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

//抽取后的EmailUtil接口
public interface EmailUtil { public abstract void sendEmail(String emailAddress, String id); } //EmailUtilImpl实现类
@Component("emailUtil")
public class EmailUtilImpl implements EmailUtil {
//参数接收顾客的邮箱地址和订单编号
@Override
public void sendEmail(String emailAddress, String id) {
// 1. 登陆邮件客户端(创建会话session)
Properties prop = new Properties();
Session session = null;
Message message = null;
Transport transport = null;
try {
prop.setProperty("mail.transport.protocol", "smtp");
// 创建了session会话
session = Session.getDefaultInstance(prop);
// 设置debug模式来调试发送信息
session.setDebug(true);
// 创建一封邮件对象
message = new MimeMessage(session);
// 写信
message.setSubject("网上商城订单反馈");
// 正文内容
message.setContent("顾客您好,欢迎您光顾网上商城,订单" + id + "已支付成功!", "text/html;charset=utf-8");
// 附件人地址
message.setFrom(new InternetAddress("soft03_test@sina.com"));
transport = session.getTransport();
// 链接邮件服务器的认证信息
transport.connect("smtp.sina.com", "soft03_test", "soft03_test"); // 设置收件人地址,并发送邮件
transport.sendMessage(message, new InternetAddress[] { new InternetAddress(emailAddress) });
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
try {
transport.close();
} catch (MessagingException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}

3. 完善payAction

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

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

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

【SSH网上商城项目实战25】使用java email给用户发送邮件的更多相关文章

  1. 【SSH网上商城项目实战30】项目总结

      转自:https://blog.csdn.net/eson_15/article/details/51479994 0. 写在前面 项目基本完成了,加上这个总结,与这个项目相关的博客也写了30篇了 ...

  2. 【SSH网上商城项目实战30】项目总结(附源码下载地址)

    项目基本完成了,加上这个总结,与这个项目相关的博客也写了30篇了,积少成多,写博客的过程是固化思路的一个过程,对自己很有用,同时也能帮助别人.顺便说个题外话,在学习的过程中肯定会遇到很多异常出现,我们 ...

  3. 【SSH网上商城项目实战27】域名空间的申请和项目的部署及发布

     转自:https://blog.csdn.net/wwww_com/article/details/54405355 前面陆陆续续的完成了网上商城的一些基本功能,虽然还有很多地方有待完善,但是不影响 ...

  4. 【SSH网上商城项目实战21】从Demo中看易宝支付的流程

         转自: https://blog.csdn.net/eson_15/article/details/51447492 这一节我们先写一个简单点的Demo来测试易宝支付的流程,熟悉这个流程后, ...

  5. 【SSH网上商城项目实战16】Hibernate的二级缓存处理首页的热门显示

    转自:https://blog.csdn.net/eson_15/article/details/51405911 网上商城首页都有热门商品,那么这些商品的点击率是很高的,当用户点击某个热门商品后需要 ...

  6. 【SSH网上商城项目实战01】整合Struts2、Hibernate4.3和Spring4.2

    转自:https://blog.csdn.net/eson_15/article/details/51277324 今天开始做一个网上商城的项目,首先从搭建环境开始,一步步整合S2SH.这篇博文主要总 ...

  7. 【SSH网上商城项目实战15】线程、定时器同步首页数据(类似于博客定期更新排名)

    转自:https://blog.csdn.net/eson_15/article/details/51387378 上一节我们做完了首页UI界面,但是有个问题:如果我在后台添加了一个商品,那么我必须重 ...

  8. 【SSH网上商城项目实战20】在线支付平台的介绍

    转自:https://blog.csdn.net/eson_15/article/details/51441431 之前已经完成了首页的显示,用户添加购物车,确认订单等功能,下面就是支付功能的开发了. ...

  9. 【SSH网上商城项目实战03】使用EasyUI搭建后台页面框架

    转自:https://blog.csdn.net/eson_15/article/details/51312490 前面两节,我们整合了SSH并且抽取了service和action部分的接口,可以说基 ...

随机推荐

  1. [转] FFmpeg常用基本命令

    [FFmpeg]FFmpeg常用基本命令 1.分离视频音频流 ffmpeg -i input_file -vcodec copy -an output_file_video //分离视频流 ffmpe ...

  2. itemgetter和groupby

    一. itemgetter的使用方法 itemgetter()返回一个指定列表下标或者字典键的函数,通过这个返回的函数作用到对象上,获得才能取得相应的值 1. 排序字典列表的一个例子 from ope ...

  3. nginx配置文件中,location字段里面的root字段和别名alias

    1. location里面的root例子 server{ listen ; server_name www.wzw.com; location /www { root /data/; //设置虚拟主机 ...

  4. 为什么说 Gumroad 是一家 “失败” 的创业公司?

    Gumroad 是一家 "失败" 的创业公司. 创立于 2012 年,Gumroad 是一个面向创造者的电商平台.创始人 Sahil Lavingia,一名 19 岁的少年,Pin ...

  5. CentOS7系统安装 Maria Db(MYSQL)教程

    一.背景Maria Db是流行的跨平台MySQL数据库管理系统的分支,被认为是MySQL 的完全替代品.Maria Db是由Sun在Sun Micro systems合并期间被Oracle收购后,于2 ...

  6. java中mongo的条件查询

    @Override public Page<ProductInfo> findAll(Pageable pageable, ProductInfo productInfo) { //创建一 ...

  7. 厉害了,七牛云 CEO 来讲架构了!

    说起许式伟,你应该不陌生,他是七牛云的CEO,ECUG 社区发起人,国内 Go 语言圈的领军人物,曾就职于金山.盛大,有超过 10 年的搜索和分布式存储相关技术的研发经验. 他的个人经历颇为传奇,大学 ...

  8. 【算法笔记】A1047 Student List for Course

    https://pintia.cn/problem-sets/994805342720868352/problems/994805433955368960 题意 给出每个学生的选课情况,输出每节课选课 ...

  9. C# 聊一聊屏保的设置

    初步认识屏保 进入屏保设置 强行开头,大家都知道我们只需要在搜索框打入“屏保”,就能进入屏保的设置选项.然而箭头指向的位置到底是在Windows的哪个地方呢?这就是写这篇博客的原因. 进入一个屏幕保护 ...

  10. apache访问快捷方式

    <VirtualHost *:80> DocumentRoot "XXX" ServerName XXX Alias /pdodata/  "XXX" ...