这篇文章简单的模拟了网上利用邮箱激活用户注册这样的一个功能 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. Twitter OA prepare: Flipping a bit

    You are given a binary array with N elements: d[0], d[1], ... d[N - 1]. You can perform AT MOST one ...

  2. BinarySearch

    今天看代码,看到这么一段,开始没有看明白,记录下来备忘 foreach (FinancialReport r3 in addAorList)            {                i ...

  3. win10安装后耳机有声音而外放无声音

    安装win10后耳机声音正常,而外放没声音.检查了小喇叭.播放器和设备管理器一切正常,驱动也重装了好些次.喇叭音量设置.视频音量设置均正常.花费很多时间,结果发现是键盘上有个小喇叭+的键的问题.按fn ...

  4. C/S模型之TCP协议

    服务端: // WSASever.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <WinSock2.h> # ...

  5. js 变量 作用域及内存

    由于Javascript是松散型的,所以其变量只是在特定时间用于保存特定值的一个名字而已,并不存在某个变量必须保存某种类型的值的规则,变量的值以及其数据类型都可以在脚本的声明周期内改变 一.基本类型与 ...

  6. [分享] 采用opencv_cascadetrain进行训练的步骤及注意事项 [复制链接]

    http://f.dataguru.cn/thread-725364-1-1.html 很有用的一个帖子 转自:http://blog.csdn.net/xidianzhimeng/article/d ...

  7. Low-level Native Plugin Interface

    http://docs.manew.com/Manual/index.htm https://docs.unity3d.com/Manual/NativePluginInterface.html ht ...

  8. JavaScript 创建动态表格

    JavaScript 创建动态表格 版权声明:未经授权,严禁转载! 案例代码 <div id="data"></div> <script> va ...

  9. centos下gitlab私服完整安装部署(nginx+MySQL+redis+gitlab-ce+gitlab-shell+)

    系统环境cat /etc/redhat-release CentOS release 6.8 (Final) nginx -vnginx version: nginx/1.9.15 redis-cli ...

  10. php在Nginx环境下进行刷新缓存立即输出,实现常驻进程轮询。

    以下面这段代码并不会逐个输出,而是当浏览器筹够一定字节数进行统一输出,结果显而易见,10秒后一次性输出所有内容 for($i=0;$i<10;$i++){ echo $i.'</br> ...