这篇文章简单的模拟了网上利用邮箱激活用户注册这样的一个功能 1. 呈现给用户的注册界面:(为了简单起见,就剩下两个输入域,邮箱和昵称)

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <head>
  5. <title>用户注册利用邮箱进行验证</title>
  6. </head>
  7. <body>
  8. <br/>
  9. <form action="${pageContext.request.contextPath }/servlet/RegisterServlet" method="post">
  10. <font size="24" color="red">用户注册</font><br/>
  11. 邮箱:<input type="text" name="email" /><br/>
  12. 昵称:<input type="text" name="userName" /><br/>
  13. <input type="submit" value="submit" /><br/>
  14. </form>
  15. </body>
  16. </html>

2. 用户点击提交后,应该在后台进行发送邮件的处理,在这之前,你可能需要利用JavaScript对邮箱进行匹配处理,以及对用户大部分的输入情况进行验证,如果有验证码的话,应该首先验证(可以通过AJAX进行验证)。但是我在这里也就不验证了,直接假设用户输入是正确的。下面是后台处理程序:

  1. package com.piedra.register;
  2. import java.io.IOException;
  3. import java.util.Date;
  4. import java.util.Properties;
  5. import javax.mail.Address;
  6. import javax.mail.Authenticator;
  7. import javax.mail.Message.RecipientType;
  8. import javax.mail.MessagingException;
  9. import javax.mail.Transport;
  10. import javax.mail.internet.InternetAddress;
  11. import javax.mail.internet.MimeMessage;
  12. import javax.servlet.ServletException;
  13. import javax.servlet.http.HttpServlet;
  14. import javax.servlet.http.HttpServletRequest;
  15. import javax.servlet.http.HttpServletResponse;
  16. import javax.servlet.http.HttpSession;
  17. import com.piedra.model.MyAuthenticator;
  18. public class RegisterServlet extends HttpServlet {
  19. private static final long serialVersionUID = 1L;
  20. public void doGet(HttpServletRequest request, HttpServletResponse response)
  21. throws ServletException, IOException {
  22. String toMail = request.getParameter("email");
  23. String registerName = request.getParameter("userName");
  24. String userName = "你邮箱地址";
  25. String password = "你邮箱密码";
  26. String registerId = "" + Math.random() * Math.random();
  27. String url = "http://localhost:8080/JavaMailChecker/servlet/MailBackServlet?registerId=" + registerId;//待会用户点在邮箱中点击这个链接回到你的网站。
  28. HttpSession httpSession = request.getSession();
  29. httpSession.setAttribute(registerId, registerName);
  30. httpSession.setMaxInactiveInterval(600);
  31. Properties props = new Properties();
  32. props.setProperty("mail.smtp.host", "smtp.163.com");
  33. props.setProperty("mail.smtp.auth", "true");
  34. Authenticator authenticator = new MyAuthenticator(userName, password);
  35. javax.mail.Session session = javax.mail.Session.getDefaultInstance(props,authenticator);
  36. session.setDebug(true);
  37. try{
  38. Address from = new InternetAddress(userName);
  39. Address to = new InternetAddress(toMail);
  40. MimeMessage msg = new MimeMessage(session);
  41. msg.setFrom(from);
  42. msg.setSubject("诚实网站注册");
  43. msg.setSentDate(new Date());
  44. msg.setContent("<a href="' + url + '">点击" + url + "完成注册</a>", "text/html;charset=utf-8");
  45. msg.setRecipient(RecipientType.TO, to);
  46. /*
  47. Transport transport = session.getTransport("smtp");
  48. transport.connect("smtp.163.com", userName, password);
  49. transport.sendMessage(msg,msg.getAllRecipients());
  50. transport.close();
  51. */
  52. Transport.send(msg);
  53. } catch(MessagingException e){
  54. e.printStackTrace();
  55. }
  56. request.getRequestDispatcher("/sendMailSuccess.jsp").forward(request, response);
  57. }
  58. public void doPost(HttpServletRequest request, HttpServletResponse response)
  59. throws ServletException, IOException {
  60. doGet(request, response);
  61. }
  62. }

这段代码中需要的Authenticator 代码如下:

  1. package com.piedra.model;
  2. import javax.mail.Authenticator;
  3. import javax.mail.PasswordAuthentication;
  4. public class MyAuthenticator extends Authenticator {
  5. private String userName;
  6. private String password;
  7. public MyAuthenticator(String userName, String password){
  8. this.userName = userName;
  9. this.password = password;
  10. }
  11. @Override
  12. protected PasswordAuthentication getPasswordAuthentication() {
  13. return new PasswordAuthentication(userName, password);
  14. }
  15. }

3. 使用上面的代码也就可以把你需要用户点击的链接成功的发送到他的邮箱了,但是你还需要一个处理用户点击链接后的操作,在这些操作中你需要真正完成用户的注册。

  1. package com.piedra.register;
  2. import java.io.IOException;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. public class MailBackServlet extends HttpServlet {
  8. private static final long serialVersionUID = 1L;
  9. public void doGet(HttpServletRequest request, HttpServletResponse response)
  10. throws ServletException, IOException {
  11. String registerID = request.getParameter("registerId");
  12. if(registerID == null){
  13. request.getRequestDispatcher("/index.jsp").forward(request,response);
  14. return ;
  15. }
  16. String registerName = (String)request.getSession().getAttribute(registerID);
  17. if(registerName == null || registerName.equals("")){
  18. request.getRequestDispatcher("/index.jsp").forward(request,response);
  19. return ;
  20. }
  21. request.setAttribute("registerName", registerName);
  22. request.getRequestDispatcher("/registSuccess.jsp").forward(request,response);
  23. }
  24. public void doPost(HttpServletRequest request, HttpServletResponse response)
  25. throws ServletException, IOException {
  26. doGet(request, response);
  27. }
  28. }

邮箱验证通过后,便跳转到注册成功的页面,在实际应用可能是要让用户跳转到自己网站的首页。

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <head>
  5. <title>注册成功</title>
  6. </head>
  7. <body>
  8. 恭喜您,从现在起,您就是本站的一员了。<br/>
  9. 下面是您的昵称:<br/>
  10. ${registerName }
  11. </body>
  12. </html>

测试截图: 

需要说明的问题: 
1). 这个项目使用MyEclipse开发的,javaMail的jar包是1.4.4 。 
2). 代码中注释掉的部分是另一种连接方式。 
3). 尽管MyEclipse在开发javamail应用的时候已经为我们提供了mail.jar,但是我们还是需要将我们下载的javamail下lib目录下的jar包加到WEB-INF/lib目录下,不然会报错。
4). 如果你不是用163邮箱做实验,那么你需要查看你使用的邮箱的官方网站的帮助文档,这样你就能够获得smtp服务器的名称了,当然,你也可以选择google或者百度。
5). 严重声明,本人并未实际开发过这样的应用,这些仅供参考。 
6). 在实验期间,你肯能会遇到一些问题,但是如果遇到 553 这样的问题,那么你可能需要下面的帮助

使用163 邮箱发送javamail邮件时的错误提示及原因

(1)553 Requested action not taken: Local user only  SMTP类型的机器只允许发信人是本站用户;

用户名或密码不正确,并且需要设置如下属性

props.put("mail.smtp.auth", "true");
(2)553 Mail from must equal authorized user

发信人地址必须是当前登录邮箱的认证用户地址

例如,认证时使用的用户名为:abc

那么:String from = abc@163.com;

message.setFrom(new InternetAddress(from));

JavaMai——邮箱验证用户注册的更多相关文章

  1. (进阶篇)PHP实现用户注册后邮箱验证,激活帐号

    我们在很多网站注册会员时,注册完成后,系统会自动向用户的邮箱发送一封邮件,这封邮件的内容就是一个URL链接,用户需要点击打开这个链接才能激活之前在该网站注册的帐号.激活成功后才能正常使用会员功能. 本 ...

  2. PHP用户注册邮箱验证激活帐号

    我们在很多网站注册会员时,注册完成后,系统会自动向用户的邮箱发送一封邮件,这封邮件的内容就是一个URL链接,用户需要点击打开这个链接才能激活之前在该网站注册的帐号.激活成功后才能正常使用会员功能. 本 ...

  3. Django用户注册、邮箱验证实践

    算法流程如下:1)处理用户注册数据,存入数据库,is_activity字段设置为False,用户未认证之前不允许登陆2)产生token,生成验证连接URL3)发送验证邮件4)用户通过认证邮箱点击验证连 ...

  4. ThinkPHP 3.2 用户注册邮箱验证帐号找回密码

    一.前言 当然现在有的网站也有手机短信的方式找回密码,原理就是通过发送验证码来验明正身,和发送邮件验证一样,最终还是要通过重置密码来完成找回密码的流程. 本文将使用PHP+Mysql+jQuery来实 ...

  5. javamail实现邮箱验证功能

    javamail是基于SMTP协议和POP3协议的邮件发送与接收系统,在用户注册与登陆的过程中,常需要用到邮箱验证功能,下面是基于javamail的一个简单实现 用户注册后通过servlet得到邮箱地 ...

  6. iOS开发-UITextField手机号和邮箱验证

    不管是网页是手机,用户注册登录的时候绝大数时候都需要手机号码和邮箱地址,而且有些App会限制只能使用手机号注册,iOS方面邮箱正则比较简单,不过手机号码验证找了一下网上的,发现三大运营商的号码段有所变 ...

  7. java实现邮箱验证的功能

    在日常生活中,我们在一个网站中注册一个账户时,往往在提交个人信息后,网站还要我们通过手机或邮件来验证,邮件的话大概会是下面这个样子的: 用户通过点击链接从而完成注册,然后才能登录. 也许你会想,为什么 ...

  8. android 自定义view -- 实现自定义 邮箱验证的Edittext

    //onFinishInflate 当View中所有的子控件均被映射成xml后触发 /** * 实现自定义 实现邮箱验证的EidtText */public class CustomEditText ...

  9. [麦先生]在Laravel框架里实现邮箱验证---发送邮件

    在经过一段时间的使用后,发现在项目中很多地方需要用到用户验证,以短信验证和邮箱验证为主流趋势,小麦总结了如果在Laravel框架中实现发送邮件功能,以后会陆续更上如何实现短信验证..... 在.env ...

随机推荐

  1. 使用nvm管理node版本时,各个版本下公用npm安装的插件问题

    因为使用了NVM(node版本管理工具),所以在切换node版本的时候安装的插件不能共享使用,必须重新安装,导致不必要的工作量 所以我将npm(node包管理工具提取出来) 进行node版本之间的共享 ...

  2. python 读取二进制数据到可变缓冲区中

    想直接读取二进制数据到一个可变缓冲区中,而不需要做任何的中间复制操作.或者你想原地修改数据并将它写回到一个文件中去. 为了读取数据到一个可变数组中,使用文件对象的readinto() 方法.比如 im ...

  3. Python: 字符串搜索和匹配,re.compile() 编译正则表达式字符串,然后使用match() , findall() 或者finditer() 等方法

    1. 使用find()方法 >>> text = 'yeah, but no, but yeah, but no, but yeah' >>> text.find( ...

  4. Java设计模式应用——模板方法模式

    所谓模板方法模式,就是在一组方法结构一致,只有部分逻辑不一样时,使用抽象类制作一个逻辑模板,具体是实现类仅仅实现特殊逻辑就行了.类似科举制度八股文,文章结构相同,仅仅具体语句有差异,我们只需要按照八股 ...

  5. Azkaban-开源任务调度程序(使用篇)

    上篇文章说到了安装,这次说说使用 登录 https://localhost:8443 注意是https,采用的是jetty ssl链接.输入账号密码azkaban/azkanban(如果你之前没有更改 ...

  6. nodepad++ 标签栏无法拖放标签

    nodepad++ 标签栏无法拖放标签设置--首选项--常用--标签栏--锁定(不允许拖放) 去掉这个勾 ps:最近版本的不知道为什么这个设置不生效了,没找到原因,可能是bug,只能等待升级解决了(升 ...

  7. 静默文件安装安装WebLogic

    一. 本文演示静默文件方式安装     •在Windows上      –打开命令行窗口 –filename.exe -mode=silent -silent_xml=file_path     •在 ...

  8. web前端----JavaScript(JS)简单介绍

    JavaScript(JS) 一.JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名ScriptEa ...

  9. C/C++中的位运算

    位运算     位运算的运算分量只能是整型或字符型数据,位运算把运算对象看作是由二进位组成的位串信息,按位完成指定的运算,得到位串信息的结果. 位运算符有:     &(按位与).|(按位或) ...

  10. pyDay1

    1.import python中的import语句是用来导入模块的. 在python的模块库中有大量的模块可供使用,要想使用这些文件需要用import语句把指定模块导入到当前程序中, 使用方法例如: ...