`
忆梦竹
  • 浏览: 65955 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

JavaMai——邮箱验证用户注册

    博客分类:
  • JAVA
阅读更多
这篇文章简单的模拟了网上利用邮箱激活用户注册这样的一个功能

1. 呈现给用户的注册界面:(为了简单起见,就剩下两个输入域,邮箱和昵称)

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>用户注册利用邮箱进行验证</title>
  </head>
  <body>
  <br/>
	<form action="${pageContext.request.contextPath }/servlet/RegisterServlet" method="post">
		<font size="24" color="red">用户注册</font><br/>
		邮箱:<input type="text" name="email" /><br/>
		昵称:<input type="text" name="userName" /><br/>
		<input type="submit" value="submit" /><br/>
	</form>
  </body>
</html>


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

import java.io.IOException;
import java.util.Date;
import java.util.Properties;

import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.piedra.model.MyAuthenticator;

public class RegisterServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String toMail = request.getParameter("email");
		String registerName = request.getParameter("userName");
		
		String userName = "你邮箱地址";
		String password = "你邮箱密码";
		
		String registerId = "" + Math.random() * Math.random();
		String url = "http://localhost:8080/JavaMailChecker/servlet/MailBackServlet?registerId=" + registerId;//待会用户点在邮箱中点击这个链接回到你的网站。
		
		HttpSession httpSession = request.getSession();
		httpSession.setAttribute(registerId, registerName);
		httpSession.setMaxInactiveInterval(600);
		
		Properties props = new Properties();
		props.setProperty("mail.smtp.host", "smtp.163.com");
		props.setProperty("mail.smtp.auth", "true");
		
		Authenticator authenticator = new MyAuthenticator(userName, password);
		
		javax.mail.Session session = javax.mail.Session.getDefaultInstance(props,authenticator);
		session.setDebug(true);
		
		try{
			Address from = new InternetAddress(userName);
			Address to = new InternetAddress(toMail);
			
			MimeMessage msg = new MimeMessage(session);
			msg.setFrom(from);
			msg.setSubject("诚实网站注册");
			msg.setSentDate(new Date());
			msg.setContent("<a href='" + url + "'>点击" + url + "完成注册</a>", "text/html;charset=utf-8");
			msg.setRecipient(RecipientType.TO, to);
			/*
			Transport transport = session.getTransport("smtp");
			transport.connect("smtp.163.com", userName, password);
			transport.sendMessage(msg,msg.getAllRecipients());
			transport.close();
			*/
			Transport.send(msg);
		} catch(MessagingException e){
			e.printStackTrace();
		}
		
		request.getRequestDispatcher("/sendMailSuccess.jsp").forward(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}
}


这段代码中需要的Authenticator 代码如下:
package com.piedra.model;

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;


public class MyAuthenticator extends Authenticator {
	private String userName;
	private String password;

	public MyAuthenticator(String userName, String password){
		this.userName = userName;
		this.password = password;
	}

	@Override
	protected PasswordAuthentication getPasswordAuthentication() {
		return new PasswordAuthentication(userName, password);
	}
}


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

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MailBackServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String registerID = request.getParameter("registerId");
		if(registerID == null){
			request.getRequestDispatcher("/index.jsp").forward(request,response);
			return ;
		}
		
		String registerName = (String)request.getSession().getAttribute(registerID);
		
		if(registerName == null || registerName.equals("")){
			request.getRequestDispatcher("/index.jsp").forward(request,response);
			return ;
		}
		
		request.setAttribute("registerName", registerName);
		request.getRequestDispatcher("/registSuccess.jsp").forward(request,response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}


邮箱验证通过后,便跳转到注册成功的页面,在实际应用可能是要让用户跳转到自己网站的首页。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head> 
    <title>注册成功</title>
  </head>
  
  <body>
  	恭喜您,从现在起,您就是本站的一员了。<br/>
  	下面是您的昵称:<br/>
  	${registerName }
  </body>
</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 这样的问题,那么你可能需要下面这个链接的帮助。http://blog.csdn.net/wang12/article/details/6369030

但愿对你有所帮助。谢谢你的阅读!

  • 大小: 17.3 KB
  • 大小: 19.5 KB
  • 大小: 32.2 KB
  • 大小: 28.5 KB
8
0
分享到:
评论
3 楼 mx675641819 2014-07-15  
可以用!感谢楼主分享
2 楼 Java-feifeiok 2013-01-08  
可以用,非常感谢楼主!
1 楼 Java-feifeiok 2013-01-07  
代码拷上了,不能用,是不是少个页面啊

相关推荐

    javaMai开发教程

    例如,新用户注册时发送验证邮件,为过生日的会员发送祝福邮件,或者向所有注册用户推送网站的最新活动信息。这些功能的实现都要求开发者具备编写邮件处理程序的能力。 课程目标是让你能够熟练地生成和发送邮件,...

    javamai发送邮件

    JavaMail 是一个开源库,用于在Java应用程序中发送和接收电子邮件。它提供了丰富的API,使得开发者可以方便地处理SMTP(简单邮件传输协议)、POP3(邮局...同时,为了提高用户体验,还可以添加错误处理和日志记录机制。

    Javamai 使用方法

    JavaMail 是一个开源的Java库,它为Java程序员提供了处理电子邮件的能力,包括发送、接收、读取和管理邮件。... 1. **JavaMail 基本概念** JavaMail API 提供了与各种邮件系统交互的标准接口。它通过SMTP(简单邮件...

    JavaMai.ljar

    `JavaMai.ljar` 文件很可能是一个包含JavaMail库的归档文件,可能是开发者为了方便分发或部署而创建的。`JavaMai.jar` 文件的出现,意味着我们要讨论的是如何在Java项目中使用JavaMail API来发送和接收邮件。 ...

    javamai发送邮件的jar包

    JavaMail 是一个强大的开源库,用于在Java应用程序中发送和接收电子邮件。这个压缩包包含的“mail.jar”是JavaMail的核心库,它提供了全面的API,使得开发人员能够轻松地处理SMTP、POP3和IMAP等邮件协议。...

    java mail Demo

    该项目已经过优化并且可运行,用户只需要配置自己的发送邮箱地址、密码以及接收邮箱地址即可。 在JavaMail API中,主要涉及以下几个核心类: 1. `Session`:这是整个邮件会话的上下文,包含了邮件服务器的相关配置...

    ci_javamai打包工程子例子

    最后,提到的`test`可能是测试文件或者测试目录,包含单元测试或集成测试代码,用于验证邮件服务功能的正确性。在Java中,JUnit是常用的测试框架,可以编写测试用例来确保邮件发送接口按预期工作。 综上所述,"ci_...

    javamai.jar&&activation.jar下载

    目前JAVA mail api 的所有版本都需要JAF的支持。...目前Java Mail还没有被加在标准的Java 开发工具中,需下载javamai.jar和activation.jar放置在实例程序的WEB/INF/lib目录下,此资源提供了这两个Jar。

    java_mail.rar_ javamail_java mail_java 下载_javamail-1.4.1_javamai

    3. **邮件管理**:包括创建、删除、移动邮件,以及管理邮箱文件夹等操作。 4. **认证与安全**:支持 SSL/TLS 加密,确保通信安全,同时支持不同类型的认证机制,如 PLAIN、CRAM-MD5 等。 5. **邮件搜索与过滤**:...

    java mail api

    - 可以注册监听器(如MessageCountListener)来监听邮件的增加、删除等事件,实现邮件实时同步。 11. **Javadocs**: - 提供的javadocs是Java Mail API的官方文档,包含了所有接口和类的详细说明,以及使用示例,...

    基于javamail的发送邮件示例文档

    用户只需提供必要的邮件信息,就可以方便地发送邮件。 7. **配置注意事项**:邮件服务器的配置可能因服务提供商而异,例如,一些服务器可能需要使用SSL/TLS加密连接,此时需要在`Properties`中设置`mail.smtp....

    javamail 所有jar包

    在实际开发中,JavaMail常被用于企业级应用,如自动化通知、报表发送、用户注册验证邮件等。使用JavaMail发送邮件的好处包括跨平台性、丰富的功能以及与Java生态系统的无缝集成。 在实际项目中,除了这两个核心库,...

    geronimo-javamail_1.4_spec-1.7.1.jar

    geronimo-javamail_1.4_spec-1.7.1.jar

    mail.jar activation.jar

    mail.jar 2,配置两个zip解压到c:(这里是举例,你的可能不同) 把javamai的mail.jar和jaf的activation.jar加入到环境变变量中(假设两个文件被copy到了D:\j2sdk1.4.2_09\lib下) 在classpath添加下面两条语句 D:\j2sdk...

    android 自动发送邮件

    android 有时候 出现错误的时候,需要将...网上找了很多例子,大部分都是通过 android 自带api 使用 Intent 调用Email ,但是这样很不友好,还需要用户手动点击发送。本例子 结合了网上例子,使用JavaMai自动发送邮件。

    java mail用到的工具.rar

    可以获取`Folder`对象来访问邮件服务器上的邮箱。 7. **Store对象**:代表与邮件服务器的连接,通过`Store`对象可以获取`Folder`并进行邮件的接收和管理。 8. **Part接口**:`Part`接口是邮件内容的基本组成部分,...

    javamail发送邮件

    - 如果需要身份验证,可以使用 `Authenticator` 类创建一个自定义的认证器,然后将这个认证器设置到 `Properties` 中。 2. **创建消息对象** - 创建 `Message` 对象,它是邮件的核心。你可以使用 `MimeMessage` ...

    javamail 发送邮件需要的两个jar包,activation.jar和mail.jar

    它包含了对MIME类型的注册、数据类型检测以及序列化和反序列化的支持,确保了JavaMail能够正确解析邮件内容。 mail.jar 文件则是JavaMail的核心库,包含了发送、接收邮件以及管理邮件会话等所有必要的类和接口。它...

    javamail的jar包

    不导入mail.jar会发生 An error occurred at line: 6 in the generated java file Only a type can be imported. javax.mail.Session resolves to a package

    使用javamail发信过程中的一些问题及解决方法 - 鹰翔宇空 - BlogJava

    package com.hyq.test; import java.util.Properties; import javax.mail.*; import javax.mail.internet.*; public class MailExample { ... public static void main (String args[]) throws Exception { ........

Global site tag (gtag.js) - Google Analytics