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

  • 相关阅读:
    iOS7 界面适配-NavigationBar StateBar
    ios UIScrollView 基础属性
    保存图片信息通过NSData保存到本地文件中
    根据UIScrollView 滑动获取当前页数
    iOS工程通用模块介绍
    ios--appDelegate切换根视图rootViewController(最常用的场合是首次启动跳至导航ViewController)
    使用UIGestureRecognizer监听屏幕事件
    Introduction to CocoaPods Tutorial
    最基本的添加头像
    MFC多语言程序版本,在不同的windows系统上的使用 FP_SetThreadUILanguage
  • 原文地址:https://www.cnblogs.com/shanheyongmu/p/5829533.html
Copyright © 2020-2023  润新知