java 实现注册时发送激活邮件+激活

标签: java 邮件 | 发表时间:2015-08-28 18:01 | 作者:huyuyang6688
出处:http://blog.csdn.net

  在很多网站注册的时候,为了验证用户信息的真实合法,往往需要验证用户所填邮件的准确性。形式为:用户注册时填写邮箱,注册完成后,网站会向用户所填邮箱发送一封激活邮件,用户点击激活邮件中的链接后,方可完成注册。

  最近项目中也用到这个需求,做了个Demo与大家分享,大至思想如下:

数据库表结构

  用户表t_user有五个字段分别为用户名、密码、邮箱地址、激活码、状态:
  | username | password | email |code | state |

核心代码:

  UserManager.java

  import java.util.Properties;
import java.util.UUID;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.Message.RecipientType;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import dao.UserDao;

public class UserManager {

    /**
     * 注册用户 
     * @param username 用户名
     * @param password 密码
     * @param email 邮箱
     * @return 是否注册成功
     */
    public Boolean Register(String username,String password,String email){
        Boolean result=false;
        //生成用户code
        String code=UUID.randomUUID().toString().replace("-", "");

        //添加用户
        UserDao userDao=new UserDao();
        result=userDao.AddUser(username, password, email, code);

        //向用户发送激活邮件
        sendMail(email,code);

        return result;
    }

    /**
     * 发送激活邮件
     * @param to 收件人邮箱地址
     * @param code 激活码
     */
    public static boolean sendMail(String to, String code) {  

        try {  
            Properties props = new Properties();  
            props.put("username", "[email protected]");   
            props.put("password", "123456");   
            props.put("mail.transport.protocol", "smtp" );  
            props.put("mail.smtp.host", "smtp.163.com");  
            props.put("mail.smtp.port", "25" );  

            Session mailSession = Session.getDefaultInstance(props);  

            Message msg = new MimeMessage(mailSession);     
            msg.setFrom(new InternetAddress("[email protected]"));  
            msg.addRecipients(Message.RecipientType.TO, InternetAddress.parse(to));   
            msg.setSubject("激活邮件");   
            msg.setContent("<h1>此邮件为官方激活邮件!请点击下面链接完成激活操作!</h1><h3><a href='http://localhost:8080/SendMail/servlet/ActiveServlet?code="+code+"'>http://localhost:8080/SendMail/servlet/ActiveServlet</a></h3>","text/html;charset=UTF-8");
            msg.saveChanges();  

            Transport transport = mailSession.getTransport("smtp");  
            transport.connect(props.getProperty("mail.smtp.host"), props  
                    .getProperty("username"), props.getProperty("password"));   
            transport.sendMessage(msg, msg.getAllRecipients());  
            transport.close();     
        } catch (Exception e) {  
            e.printStackTrace();  
            System.out.println(e);  
            return false;  
        }  
        return true;  
    }   

    /**
     * 激活用户
     * @param code 用户激活码
     * @return 是否激活成功
     */
    public Boolean Active(String code){
        UserDao userDao=new UserDao();
        String username=userDao.findUserByCode(code);
        if(username!=null && username!=""){
            //如果存在用户,将此用户状态设为可用
            userDao.setState(username);
            return true;
        }else{
            return false;
        }
    }
}

  register.jsp

这里写图片描述

当用户注册时

  1、为用户生成随机的激活码(此激活码是添加根据代码规则自动生成的,这里的激活码以随机生成的UUID为例);
  2、添加一条用户记录;
  3、向用户发送激活邮件。上述代码中的发信人是小编自己的邮箱,一般为企业邮箱。如果有条件的话,这里还向大家推荐一款邮箱服务器—— 易邮邮件服务器,可以在局域网内建立邮件系统进行测试。

  激活邮件如下:
  
这里写图片描述

激活

  用户点击邮箱中的链接后,系统根据用户点击链接发来的激活码去数据库中查询与该激活码匹配的用户记录,如果记录存在,则将用户状态更改为可用的状态。

(限于篇幅,这里不贴全部代码,需要的朋友可以点此 下载源码

作者:huyuyang6688 发表于2015/8/28 10:01:14 原文链接
阅读:196 评论:2 查看评论

相关 [java 邮件] 推荐:

Java远程调用邮件服务器,实现邮件发送

- - CSDN博客推荐文章
写这篇文章的背景是公司Android客户端需要实现一个功能,实现类似于密码找回或者用户注册完发送一个邮件给用户的功能,当然这些逻辑客户端只负责请求自己的服务端,自己的服务端再去请求邮件服务器. 邮件服务器使用的Apache的James,Java写的开源的,而且方便调用. 远程调用使用的是Java Mail的API.

Commons Email 1.3.1 发布,Java 邮件工具包

- - 开源中国社区最新新闻
该项目是Apache的Commons子项目下的一个邮件客户端组件,它是基于JavaMail的,大大简化了邮件的收发操作. Commons Email 发布了 1.3.1 更新版本,该版本要求 Java 5 或者更新版本支持,同时修复了两个bug:.

Java Mail(一):telnet实现发送收取邮件

- - CSDN博客推荐文章
       最近要做一个解析邮件的东东,就顺便系统的搞一下Java Mail的API吧,以前搞过,现在都忘到十万八千里了,要说技术就得学以致用,要不全扔了.        说起邮箱,工作中挺常用的工具,上学的时候都没怎么用. 国内的邮箱系统相当多了,163、sina、sohu、qq,这些是耳熟能详针对普通用户的邮箱,还有很多针对企业用户的.

java带图片的邮件发送方法实现

- - CSDN博客编程语言推荐文章
// JavaMail需要Properties来创建一个session对象. 它将寻找字符串"mail.smtp.host",属性值就是发送邮件的主机. // properties.put("mail.smtp.host", "mailcas.chinapnr.com");// 设置smtp主机. properties.put("mail.smtp.host", "smtp.163.com");// 设置smtp主机.

java 实现注册时发送激活邮件+激活

- - CSDN博客推荐文章
  在很多网站注册的时候,为了验证用户信息的真实合法,往往需要验证用户所填邮件的准确性. 形式为:用户注册时填写邮箱,注册完成后,网站会向用户所填邮箱发送一封激活邮件,用户点击激活邮件中的链接后,方可完成注册.   最近项目中也用到这个需求,做了个Demo与大家分享,大至思想如下:.   用户表t_user有五个字段分别为用户名、密码、邮箱地址、激活码、状态:.

java通过贝叶斯算法实现垃圾邮件过滤详解

- - 互联网 - ITeye博客
本文是“java开发邮箱系统”系列文章之一,通过阅读本系列的文章,你可以通过Java实现一个邮件服务器.     贝叶斯算法是常用的垃圾邮件过滤算法,理论依据主要是概率统计中的一些基本理论. 因为这些都可以很方便的在网上查到,所以本文只讲实践,不讲数学知识. 准备400封正常邮件、400封垃圾邮件.

Java中的锁(Locks in Java)

- - 并发编程网 - ifeve.com
原文链接 作者:Jakob Jenkov 译者:申章 校对:丁一. 锁像synchronized同步块一样,是一种线程同步机制,但比Java中的synchronized同步块更复杂. 因为锁(以及其它更高级的线程同步机制)是由synchronized同步块的方式实现的,所以我们还不能完全摆脱synchronized关键字( 译者注:这说的是Java 5之前的情况).

Java PaaS 对决

- 呆瓜 - IBM developerWorks 中国 : 文档库
本文为 Java 开发人员比较了三种主要的 Platform as a Service (PaaS) 产品:Google App Engine for Java、Amazon Elastic Beanstalk 和 CloudBees RUN@Cloud. 它分析了每种服务独特的技术方法、优点以及缺点,而且还讨论了常见的解决方法.

Java浮点数

- d0ngd0ng - 译言-电脑/网络/数码科技
Thomas Wang, 2000年3月. Java浮点数的定义大体上遵守了二进制浮点运算标准(即IEEE 754标准). IEEE 754标准提供了浮点数无穷,负无穷,负零和非数字(Not a number,简称NaN)的定义. 在Java开发方面,这些东西经常被多数程序员混淆. 在本文中,我们将讨论计算这些特殊的浮点数相关的结果.

Qt——转战Java?

- - 博客 - 伯乐在线
编者按:事实上,在跨平台开发方面,Qt仍是最好的工具之一,无可厚非,但Qt目前没有得到任何主流移动操作系统的正式支持. 诺基亚的未来计划,定位非常模糊,这也是令很多第三方开发者感到失望,因此将导致诺基亚屡遭失败的原因. Qt的主要开发者之一Mirko Boehm在博客上强烈讽刺Nokia裁了Qt部门的决定,称其为“绝望之举”,而非“策略变更”.