开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1956|回复: 6
收起左侧

[android教程] Java实现注册时发送激活邮件验证

[复制链接]

结帖率:76% (32/42)
发表于 2017-2-24 21:27:16 | 显示全部楼层 |阅读模式   山东省*
本帖最后由 yueying 于 2017-2-24 21:28 编辑

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

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

数据库表结构

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

核心代码:
  1. UserManager.java

  2. import java.util.Properties;
  3. import java.util.UUID;
  4. import javax.mail.Authenticator;
  5. import javax.mail.Message;
  6. import javax.mail.MessagingException;
  7. import javax.mail.PasswordAuthentication;
  8. import javax.mail.Session;
  9. import javax.mail.Transport;
  10. import javax.mail.Message.RecipientType;
  11. import javax.mail.internet.AddressException;
  12. import javax.mail.internet.InternetAddress;
  13. import javax.mail.internet.MimeMessage;
  14. import dao.UserDao;

  15. public class UserManager {

  16.     /**
  17.      * 注册用户
  18.      * [url=home.jsp?mod=space&uid=275307]@param[/url] username 用户名
  19.      * @param password 密码
  20.      * @param email 邮箱
  21.      * [url=home.jsp?mod=space&uid=161696]@Return[/url] 是否注册成功
  22.      */
  23.     public Boolean Register(String username,String password,String email){
  24.         Boolean result=false;
  25.         //生成用户code
  26.         String code=UUID.randomUUID().toString().replace("-", "");

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

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

  32.         return result;
  33.     }

  34.     /**
  35.      * 发送激活邮件
  36.      * @param to 收件人邮箱地址
  37.      * @param code 激活码
  38.      */
  39.     public static boolean sendMail(String to, String code) {

  40.         try {
  41.             Properties props = new Properties();
  42.             props.put("username", "123456@163.com");  
  43.             props.put("password", "123456");  
  44.             props.put("mail.transport.protocol", "smtp" );
  45.             props.put("mail.smtp.host", "smtp.163.com");
  46.             props.put("mail.smtp.port", "25" );

  47.             Session mailSession = Session.getDefaultInstance(props);

  48.             Message msg = new MimeMessage(mailSession);   
  49.             msg.setFrom(new InternetAddress("123456@163.com"));
  50.             msg.addRecipients(Message.RecipientType.TO, InternetAddress.parse(to));  
  51.             msg.setSubject("激活邮件");  
  52.             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");
  53.             msg.saveChanges();

  54.             Transport transport = mailSession.getTransport("smtp");
  55.             transport.connect(props.getProperty("mail.smtp.host"), props
  56.                     .getProperty("username"), props.getProperty("password"));  
  57.             transport.sendMessage(msg, msg.getAllRecipients());
  58.             transport.close();   
  59.         } catch (Exception e) {
  60.             e.printStackTrace();
  61.             System.out.println(e);
  62.             return false;
  63.         }
  64.         return true;
  65.     }  

  66.     /**
  67.      * 激活用户
  68.      * @param code 用户激活码
  69.      * @return 是否激活成功
  70.      */
  71.     public Boolean Active(String code){
  72.         UserDao userDao=new UserDao();
  73.         String username=userDao.findUserByCode(code);
  74.         if(username!=null && username!=""){
  75.             //如果存在用户,将此用户状态设为可用
  76.             userDao.setState(username);
  77.             return true;
  78.         }else{
  79.             return false;
  80.         }
  81.     }
  82. }
复制代码
当用户注册时

1、为用户生成随机的激活码(此激活码是添加根据代码规则自动生成的,这里的激活码以随机生成的UUID为例);
2、添加一条用户记录;
3、向用户发送激活邮件。

用户点击邮箱中的链接后,系统根据用户点击链接发来的激活码去数据库中查询与该激活码匹配的用户记录,如果记录存在,则将用户状态更改为可用的状态。
发表于 2017-4-8 23:23:31 | 显示全部楼层   广东省佛山市
咱们这里Java交流的人太少了
回复 支持 反对

使用道具 举报

结帖率:100% (2/2)
发表于 2017-4-5 23:13:15 | 显示全部楼层   广东省深圳市
这个可以,用了再 拿
回复 支持 反对

使用道具 举报

发表于 2017-3-20 01:24:38 | 显示全部楼层   上海市上海市

咱们这里Java交流的人太少了
回复 支持 反对

使用道具 举报

结帖率:63% (5/8)
发表于 2017-3-14 17:00:07 | 显示全部楼层   山东省济南市
咱们这里Java交流的人太少了
回复 支持 反对

使用道具 举报

发表于 2017-3-14 14:21:15 | 显示全部楼层   北京市北京市
apache common 下我记得有关于邮箱的jar包,好像比这个要简单一些
回复 支持 反对

使用道具 举报

结帖率:100% (12/12)
发表于 2017-2-24 21:45:05 | 显示全部楼层   广东省深圳市
   赞一个..   还真没用java来发过邮件
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表