zoukankan      html  css  js  c++  java
  • SSH实战 · JAVA发送邮件相关

    • 发送激活邮件

    电子邮箱:邮件服务器上的一块空间;

        邮件服务器:类比于web服务器(tomcat),有相应的服务器软件;

        邮件协议:大公司发送和接收服务器分开,也可以都用一个服务器。

                               SMTP:简单的邮件发送协议;
                               POP3:接收邮件的一个协议;

        邮件发送的全过程:理论上需要联网,但是通过搭建在本地的服务器,可以在本地进行邮件的发送。

    • 搭建邮箱服务器:
      • 安装邮箱服务器(易邮邮箱服务器,就按默认的安装在C盘)
      • 打开该服务器,修改域名:工具-->服务器设置-->单域名改为自定义,例如:shop.com。
      • 注册几个内部账号:账号-->新建账号。密码设为55555
      • 注册一个自定义的官方账号:service    密码:55555
    • 安装邮件客户端软件(可以接发邮件):避免了网页版session的过期离线问题。
      • 流行的有软件有:outlook(微软收费)、foxmail(免费,选用foxmail)
      • 配置
                        * 配置发送邮件服务器:localhost
                        * 配置接收邮件服务器:localhost
    • 编码实现邮件发送(见MailUtils.java)
    • 用户激活
      • 在邮箱客户端中点击激活链接:
        • 根据链接中传递的激活码进行查询                         
        • 如果用户不为空:修改用户状态:0  -->  1,向前台传递激活成功消息。
        • 如果用户为空:激活码失效或被篡改,向前台传递激活失败消息。
     代码如下:
    import java.util.Properties;
    import javax.mail.Authenticator;
    import javax.mail.Message;
    import javax.mail.Message.RecipientType;
    import javax.mail.MessagingException;
    import javax.mail.PasswordAuthentication;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.AddressException;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    /**
     * 发送邮件工具类
     */
    public class MailUtils {
        /**
         * 发送邮件的方法
         * @param to 收件人
         * @param code 激活码
         */
        public static void sendMail(String to, String code){
            /**
             * 1.获得一个session对象
             * 2.创建一个代表邮件的对象的Message
             * 3.发送邮件Transport
             */
            //1.获得一个session对象
            Properties props = new Properties();
            props.setProperty("mail.host", "localhost");//指定发送邮件的主机是谁:localhost
            Session session = Session.getInstance(props, new Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication("service@XXX.com", "55555");
                }
            });
            //2.创建一个代表邮件的对象的Message
            Message message = new MimeMessage(session);
            try {
                //2.1:设置发件人
                message.setFrom(new InternetAddress("service@shop.com"));
                //2.2:设置收件人
                /*抄送:CC ; 密送:BCC*/
                message.addRecipient(RecipientType.TO, new InternetAddress(to));
                //2.3:设置邮件标题
                message.setSubject("官方账号激活邮件!");
                //2.4:设置邮件正文
                message.setContent("<h2>欢迎您XXXX,这是官方发送的账号激活邮件正文,请勿泄露<br/>此邮件,以免给用户带来损失!请点击后面的链接完成账户激活操作。</h2><h3><a href='http://127.0.0.1:8080/XXXX/user_active.action?code="+code+"'>http://127.0.0.1:8080/XXX/user_active.action/code="+code+"</a></h3>", "text/html;charset=UTF-8");
                //3.发送邮件
                Transport.send(message);
            } catch (AddressException e) {
                e.printStackTrace();
            } catch (MessagingException e) {
                e.printStackTrace();
            }
        }
         public static void main(String[] args){
            sendMail("aaa@XXX.com", "55555");
        }
    }


    用户激活的action方法:
         /**
          * 用户激活的方法
          */
         public String active() {
              // 根据激活码查询用户:
              User existUser = userService.findByCode(user.getCode());
              // 判断
              if (existUser == null) {
                  // 激活码错误的
                  this.addActionMessage("激活失败:激活码错误!");
              } else {
                  // 激活成功
                  // 修改用户的状态
                  existUser.setState(1);
                  existUser.setCode(null);
                  userService.update(existUser);
                  this.addActionMessage("激活成功:请去登录!");
              }
              return "msg";
         }
  • 相关阅读:
    详解 Android Activity 生命周期
    设计模式:装饰者模式
    析构函数virtual与非virtual区别 [转]
    详解 常量指针和指针常量
    [转]Python yield 使用浅析
    python 列表 总结
    [转]关于Python中的yield
    详解c++指针的指针和指针的引用
    转:Ogre源码剖析
    转:Ogre源码剖析1
  • 原文地址:https://www.cnblogs.com/panweiwei/p/6205332.html
Copyright © 2011-2022 走看看