【SSH网上商城项目实战25】使用java email给用户发送邮件

当用户购买完商品后,我们应该向用户发送一封邮件,告诉他订单已生成之类的信息,邮箱地址是从用户的基本信息中获取,好了,首先我们来看一下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://www.baidu.com"
                + ",么么哒~", "text/html;charset=utf-8");
        //附件人地址
        message.setFrom(new InternetAddress("shanhe@163.com"));
        Transport transport = session.getTransport();
        //链接邮件服务器的认证信息
        transport.connect("smtp.163.com", "shanhe", "此密码是你开启邮箱stamp和IMAP后网易给你的密码(不是原来登录密码)");
        // 设置收件人地址,并发送邮件
        transport.sendMessage(message, new InternetAddress[]{new InternetAddress("841059275@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

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

原文地址:https://www.cnblogs.com/shanheyongmu/p/5829533.html