Java——用户激活邮件工具类

转载来自http://blog.csdn.net/u010926964/article/details/48102325 

我们经常遇到在网站或者软件注册新用户时需要向我们的注册邮箱发送一封激活邮件,然后我们去邮箱点击激活连接后我们的用户名才能登陆,其过程是当我们注册成功后数据库已经存入该用户的相关信息,但是用户状态为不可用,所以这时候该用户名是不能正常使用的。因此系统需要向我们的注册邮箱发一封激活邮件,我们点击激活连接后系统会将数据库中用户状态字段更改为可用状态,至此用户激活成功,该用户可以正常使用。下面是实现过程:

  为了方便起见我们还是编写一个发送邮箱工具类。

[java]  view plain  copy
  1. package cn.itcast.shop.utils;  
  2.   
  3. import java.util.Properties;  
  4.   
  5. import javax.mail.Authenticator;  
  6. import javax.mail.Message;  
  7. import javax.mail.Message.RecipientType;  
  8. import javax.mail.MessagingException;  
  9. import javax.mail.PasswordAuthentication;  
  10. import javax.mail.Session;  
  11. import javax.mail.Transport;  
  12. import javax.mail.internet.AddressException;  
  13. import javax.mail.internet.InternetAddress;  
  14. import javax.mail.internet.MimeMessage;  
  15.   
  16. /** 
  17.  * 邮件发送工具类 
  18.  * @author shx 
  19.  * 
  20.  */  
  21. public class MailUitls {  
  22.     /** 
  23.      * 发送邮件的方法 
  24.      * @param to    :收件人 
  25.      * @param code  :激活码 
  26.      */  
  27.     public static void sendMail(String to,String code){  
  28.         /** 
  29.          * 1.获得一个Session对象. 
  30.          * 2.创建一个代表邮件的对象Message. 
  31.          * 3.发送邮件Transport 
  32.          */  
  33.         // 1.获得连接对象  
  34.         Properties props = new Properties();  
  35.         props.setProperty("mail.host""localhost");  
  36.         Session session = Session.getInstance(props, new Authenticator() {  
  37.   
  38.             @Override  
  39.             protected PasswordAuthentication getPasswordAuthentication() {  
  40.                 return new PasswordAuthentication("service@shop.com""111");  
  41.             }  
  42.               
  43.         });  
  44.         // 2.创建邮件对象:  
  45.         Message message = new MimeMessage(session);  
  46.         // 设置发件人:  
  47.         try {  
  48.             message.setFrom(new InternetAddress("service@shop.com"));  
  49.             // 设置收件人:  
  50.             message.addRecipient(RecipientType.TO, new InternetAddress(to));  
  51.             // 抄送 CC   密送BCC  
  52.             // 设置标题  
  53.             message.setSubject("来自官方激活邮件");  
  54.             // 设置邮件正文:  
  55.             message.setContent("<h1>官方激活邮件!点下面链接完成激活操作!</h1><h3><a href='http://192.168.24.162:8080/shop/user_active.action?code="+code+"'>http://192.168.24.162:8080/shop/user_active.action?code="+code+"</a></h3>""text/html;charset=UTF-8");  
  56.             // 3.发送邮件:  
  57.             Transport.send(message);  
  58.         } catch (AddressException e) {  
  59.             e.printStackTrace();  
  60.         } catch (MessagingException e) {  
  61.             e.printStackTrace();  
  62.         }  
  63.           
  64.     }  
  65.       
  66.     public static void main(String[] args) {  
  67.         sendMail("aaa@shop.com","11111111111111");  
  68.     }  
  69. }  
Action:

[java]  view plain  copy
  1.    /** 
  2.      *  
  3.      * 用户注册 
  4.      */  
  5.     public String regist(){  
  6.         userService.save(user);  
  7.         this.addActionMessage("注册成功,情趣邮箱激活!");  
  8.         return "msg";  
  9.     }  
  10.       
  11.     /** 
  12.      * 用户激活的方法 
  13.      */  
  14.     public String active() {  
  15.         // 根据激活码查询用户:  
  16.         User existUser = userService.findByCode(user.getCode());  
  17.         // 判断  
  18.         if (existUser == null) {  
  19.             // 激活码错误的  
  20.             this.addActionMessage("激活失败:激活码错误!");  
  21.         } else {  
  22.             // 激活成功  
  23.             // 修改用户的状态  
  24.             existUser.setState(1);  
  25.             existUser.setCode(null);  
  26.             userService.update(existUser);  
  27.             this.addActionMessage("激活成功:请去登录!");  
  28.         }  
  29.         return "msg";  
  30.     }

Service:

[java]  view plain  copy
  1.     // 业务层完成用户注册代码:  
  2.     public void save(User user) {  
  3.         // 将数据存入到数据库  
  4.         user.setState(0); // 0:代表用户未激活.  1:代表用户已经激活.  
  5.         String code = UUIDUtils.getUUID()+UUIDUtils.getUUID();//调用随机ID生成工具  
  6.         user.setCode(code);  
  7.         userDao.save(user);  
  8.         // 发送激活邮件;  
  9.         MailUitls.sendMail(user.getEmail(), code);  
  10.     }  
  11.   
  12.     // 业务层根据激活码查询用户  
  13.     public User findByCode(String code) {  
  14.         return userDao.findByCode(code);  
  15.     }  
  16.   
  17.     // 修改用户的状态的方法  
  18.     public void update(User existUser) {  
  19.         userDao.update(existUser);  
  20.     }

Dao:

[java]  view plain  copy
  1.     public void save(User user) {  
  2.         // TODO Auto-generated method stub  
  3.         this.getHibernateTemplate().save(user);  
  4.     }  
  5.   
  6.     // 根据激活码查询用户  
  7.     public User findByCode(String code) {  
  8.         String hql = "from User where code = ?";  
  9.         List<User> list = this.getHibernateTemplate().find(hql,code);  
  10.         if(list != null && list.size() > 0){  
  11.             return list.get(0);  
  12.         }  
  13.         return null;  
  14.     }  
  15.   
  16.     // 修改用户状态的方法  
  17.     public void update(User existUser) {  
  18.         this.getHibernateTemplate().update(existUser);  
  19.     }
注册成功后激活之前数据库截图

激活之后数据库截图

因为我们只希望用户激活一次,所以激活成功后将数据的code字段清空,state改为1。目前系统没有上线,为了方便测试,我用的本地邮箱测试,仅支持局域网,需要外网的请参见博客http://blog.csdn.net/huyuyang6688/article/details/48031347,以上内容有不足之处请大家批评指正,谢谢!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值