java 实现注册时发送激活邮件+激活
2015-08-28 09:25
561 查看
在很多网站注册的时候,为了验证用户信息的真实合法,往往需要验证用户所填邮件的准确性。形式为:用户注册时填写邮箱,注册完成后,网站会向用户所填邮箱发送一封激活邮件,用户点击激活邮件中的链接后,方可完成注册。
最近项目中也用到这个需求,做了个Demo与大家分享,大至思想如下:
数据库表结构
用户表t_user有五个字段分别为用户名、密码、邮箱地址、激活码、状态:
| username | password | email |code | state |
核心代码:
UserManager.java
register.jsp
当用户注册时
1、为用户生成随机的激活码(此激活码是添加根据代码规则自动生成的,这里的激活码以随机生成的UUID为例);
2、添加一条用户记录;
3、向用户发送激活邮件。上述代码中的发信人是小编自己的邮箱,一般为企业邮箱。如果有条件的话,这里还向大家推荐一款邮箱服务器——易邮邮件服务器,可以在局域网内建立邮件系统进行测试。
激活邮件如下:
激活
用户点击邮箱中的链接后,系统根据用户点击链接发来的激活码去数据库中查询与该激活码匹配的用户记录,如果记录存在,则将用户状态更改为可用的状态。
最近项目中也用到这个需求,做了个Demo与大家分享,大至思想如下:
数据库表结构
用户表t_user有五个字段分别为用户名、密码、邮箱地址、激活码、状态:
| username | password | email |code | state |
核心代码:
UserManager.java
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; font-family: 'Source Code Pro', monospace; font-size: 14px; line-height: 20.2999992370605px; white-space: pre; background-color: rgba(128, 128, 128, 0.0470588);"></span>
<code class="hljs java has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> java.util.Properties; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> java.util.UUID; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> javax.mail.Authenticator; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> javax.mail.Message; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> javax.mail.MessagingException; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> javax.mail.PasswordAuthentication; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> javax.mail.Session; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> javax.mail.Transport; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> javax.mail.Message.RecipientType; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> javax.mail.internet.AddressException; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> javax.mail.internet.InternetAddress; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> javax.mail.internet.MimeMessage; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> dao.UserDao; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">UserManager</span> {</span> <span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/** * 注册用户 *<span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> username 用户名 *<span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> password 密码 *<span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> email 邮箱 *<span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @return</span> 是否注册成功 */</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> Boolean <span class="hljs-title" style="box-sizing: border-box;">Register</span>(String username,String password,String email){ Boolean result=<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">false</span>; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//生成用户code</span> String code=UUID.randomUUID().toString().replace(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"-"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">""</span>); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//添加用户</span> UserDao userDao=<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> UserDao(); result=userDao.AddUser(username, password, email, code); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//向用户发送激活邮件</span> sendMail(email,code); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> result; } <span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/** * 发送激活邮件 *<span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> to 收件人邮箱地址 *<span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> code 激活码 */</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">boolean</span> <span class="hljs-title" style="box-sizing: border-box;">sendMail</span>(String to, String code) { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">try</span> { Properties props = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> Properties(); props.put(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"username"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"huyuyang6688@163.com"</span>); props.put(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"password"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"123456"</span>); props.put(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"mail.transport.protocol"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"smtp"</span> ); props.put(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"mail.smtp.host"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"smtp.163.com"</span>); props.put(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"mail.smtp.port"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"25"</span> ); Session mailSession = Session.getDefaultInstance(props); Message msg = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> MimeMessage(mailSession); msg.setFrom(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> InternetAddress(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"huyuyang6688@163.com"</span>)); msg.addRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); msg.setSubject(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"激活邮件"</span>); msg.setContent(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"<h1>此邮件为官方激活邮件!请点击下面链接完成激活操作!</h1><h3><a href='http://localhost:8080/SendMail/servlet/ActiveServlet?code="</span>+code+<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"'>http://localhost:8080/SendMail/servlet/ActiveServlet</a></h3>"</span>,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"text/html;charset=UTF-8"</span>); msg.saveChanges(); Transport transport = mailSession.getTransport(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"smtp"</span>); transport.connect(props.getProperty(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"mail.smtp.host"</span>), props .getProperty(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"username"</span>), props.getProperty(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"password"</span>)); transport.sendMessage(msg, msg.getAllRecipients()); transport.close(); } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">catch</span> (Exception e) { e.printStackTrace(); System.out.println(e); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">false</span>; } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>; } <span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/** * 激活用户 *<span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> code 用户激活码 *<span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @return</span> 是否激活成功 */</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> Boolean <span class="hljs-title" style="box-sizing: border-box;">Active</span>(String code){ UserDao userDao=<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> UserDao(); String username=userDao.findUserByCode(code); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(username!=<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span> && username!=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">""</span>){ <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//如果存在用户,将此用户状态设为可用</span> userDao.setState(username); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>; }<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span>{ <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">false</span>; } } } </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li><li style="box-sizing: border-box; padding: 0px 5px;">45</li><li style="box-sizing: border-box; padding: 0px 5px;">46</li><li style="box-sizing: border-box; padding: 0px 5px;">47</li><li style="box-sizing: border-box; padding: 0px 5px;">48</li><li style="box-sizing: border-box; padding: 0px 5px;">49</li><li style="box-sizing: border-box; padding: 0px 5px;">50</li><li style="box-sizing: border-box; padding: 0px 5px;">51</li><li style="box-sizing: border-box; padding: 0px 5px;">52</li><li style="box-sizing: border-box; padding: 0px 5px;">53</li><li style="box-sizing: border-box; padding: 0px 5px;">54</li><li style="box-sizing: border-box; padding: 0px 5px;">55</li><li style="box-sizing: border-box; padding: 0px 5px;">56</li><li style="box-sizing: border-box; padding: 0px 5px;">57</li><li style="box-sizing: border-box; padding: 0px 5px;">58</li><li style="box-sizing: border-box; padding: 0px 5px;">59</li><li style="box-sizing: border-box; padding: 0px 5px;">60</li><li style="box-sizing: border-box; padding: 0px 5px;">61</li><li style="box-sizing: border-box; padding: 0px 5px;">62</li><li style="box-sizing: border-box; padding: 0px 5px;">63</li><li style="box-sizing: border-box; padding: 0px 5px;">64</li><li style="box-sizing: border-box; padding: 0px 5px;">65</li><li style="box-sizing: border-box; padding: 0px 5px;">66</li><li style="box-sizing: border-box; padding: 0px 5px;">67</li><li style="box-sizing: border-box; padding: 0px 5px;">68</li><li style="box-sizing: border-box; padding: 0px 5px;">69</li><li style="box-sizing: border-box; padding: 0px 5px;">70</li><li style="box-sizing: border-box; padding: 0px 5px;">71</li><li style="box-sizing: border-box; padding: 0px 5px;">72</li><li style="box-sizing: border-box; padding: 0px 5px;">73</li><li style="box-sizing: border-box; padding: 0px 5px;">74</li><li style="box-sizing: border-box; padding: 0px 5px;">75</li><li style="box-sizing: border-box; padding: 0px 5px;">76</li><li style="box-sizing: border-box; padding: 0px 5px;">77</li><li style="box-sizing: border-box; padding: 0px 5px;">78</li><li style="box-sizing: border-box; padding: 0px 5px;">79</li><li style="box-sizing: border-box; padding: 0px 5px;">80</li><li style="box-sizing: border-box; padding: 0px 5px;">81</li><li style="box-sizing: border-box; padding: 0px 5px;">82</li><li style="box-sizing: border-box; padding: 0px 5px;">83</li><li style="box-sizing: border-box; padding: 0px 5px;">84</li><li style="box-sizing: border-box; padding: 0px 5px;">85</li><li style="box-sizing: border-box; padding: 0px 5px;">86</li><li style="box-sizing: border-box; padding: 0px 5px;">87</li><li style="box-sizing: border-box; padding: 0px 5px;">88</li><li style="box-sizing: border-box; padding: 0px 5px;">89</li><li style="box-sizing: border-box; padding: 0px 5px;">90</li><li style="box-sizing: border-box; padding: 0px 5px;">91</li><li style="box-sizing: border-box; padding: 0px 5px;">92</li><li style="box-sizing: border-box; padding: 0px 5px;">93</li></ul>
register.jsp
当用户注册时
1、为用户生成随机的激活码(此激活码是添加根据代码规则自动生成的,这里的激活码以随机生成的UUID为例);
2、添加一条用户记录;
3、向用户发送激活邮件。上述代码中的发信人是小编自己的邮箱,一般为企业邮箱。如果有条件的话,这里还向大家推荐一款邮箱服务器——易邮邮件服务器,可以在局域网内建立邮件系统进行测试。
激活邮件如下:
激活
用户点击邮箱中的链接后,系统根据用户点击链接发来的激活码去数据库中查询与该激活码匹配的用户记录,如果记录存在,则将用户状态更改为可用的状态。
相关文章推荐
- Java笔记学习总结(一)
- 必须知道的八大种排序算法【java实现】(二) 选择排序,插入排序,希尔算法【详解】
- 收集的java一些资料
- java服务器端获取客户端IP地址
- java类的加载以及初始化顺序
- java多线程(五)synchronized关键字修饰代码块
- java多线程(四)synchronized关键字修饰方法
- Eclipse中修改SVN用户名和密码方法
- java static成员变量和成员函数
- java多线程(六)深入理解volitale关键字
- springmvc接收页面表单参数
- java多线程(七)提高锁的效率——使用读写锁
- Java实现定时任务的三种方法
- java多线程(八)为什么弃用stop和suspend
- java中getClass( )和class()的联系和区别
- java字符串缓冲池分析
- java Robot 类模拟键盘按键和鼠标点击(全局模拟)
- java构造函数
- Eclipse更新android sdk adt慢的处理方法
- java内存映射