javaMail账号激活

项目示例-通过邮件激活账号

关键点就在于:
根据用户的给出的email,给这个email发送一个邮件。这个邮件中应该带有一个激活码?(32位UUID,64位UUID)。

提供以下功能:
注册功能 - 只要用户注册成功,就给他发邮件。 RegServlet
接收以下信息:
Name,pwd,email
提供用户激活功能 .
接收以下信息:
只接收激活码。
提供用户登录功能:
用户只有激活账号以后才可以登录。

第一步:创建数据结构


Users表:
Id name pwd state
444 jack 1234 1

第二个表:
Active
Uid activecode

create database active character set utf8;
use active;
create table users(
 id varchar(32) primary key,
 name varchar(30),
 pwd  varchar(32),
 email varchar(50)
);
create table active(
  uid varchar(32) primary key,
  code varchar(64),
  constraint a_fk foreign key(uid) references users(id)
);

创建javaBean:

public class User {
	private String id;
	private String name;
	private String pwd;
	private String email;
	private String code;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getCode() {
		return code;
	}
	public void setCode(String code) {
		this.code = code;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", pwd=" + pwd
				+ ", email=" + email + ", code=" + code + "]";
	}
}

第二步:设计
注册页面

<hr/>
	<p>主页</p>
	<form name="xx" action="" method="post">
		Name:<input type="text" name="name"/><br/>
		Pwd:<input type="text" name="pwd"/><br/>
		Email:<input type="text" name="email"/><br/>
		<input type="button" οnclick="_login();" value="登录"/>
		<input type="button" οnclick="_reg();" value="注册"/> 
	</form>
  </body>
  <script type="text/javascript">
  	function _reg(){
  		document.forms[0].action="<c:url value='/RegServlet'/>";
  		document.forms[0].submit();
  	}
	function _login(){
  		document.forms[0].action="<c:url value='/LoginServlet'/>";
  		document.forms[0].submit();
  	}
  </script>


第三步:注册的Servlet-RegServlet

public class RegServlet extends HttpServlet {
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		String name = request.getParameter("name");
		String pwd = request.getParameter("pwd");
		String mail = request.getParameter("email");
		//声明对象
		User u = new User();
		u.setName(name);
		u.setPwd(pwd);
		u.setEmail(mail);
		//调用后台的serice保存
		Connection con = null;
		try{
			con = DataSourceUtils.getDatasSource().getConnection();
			u.setId(UUID.randomUUID().toString().replace("-", ""));
			u.setCode(UUID.randomUUID().toString().replace("-", "")
					+UUID.randomUUID().toString().replace("-", ""));
			con.setAutoCommit(false);
			//先保存user表
			String sql = "insert into users values(?,?,?,?)";
			QueryRunner run = new QueryRunner();
			run.update(con, sql,u.getId(),u.getName(),u.getPwd(),u.getEmail());
			//
			sql = "insert into active values(?,?)";
			run.update(con,sql,u.getId(),u.getCode());
			con.commit();
		}catch(Exception e){
			try {
				con.rollback();
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
			throw new RuntimeException(e);
		}finally{
			try {
				con.close();
				DataSourceUtils.remove();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		out.print("你已经注册成功,请去激活,如果没有收到邮件,请等一会再收.");
		new SendThread(u).start();
	}
}
//声明一个线程专门发邮件
class SendThread extends Thread{
	private User user;
	public SendThread(User u) {
		this.user=u;
	}
	@Override
	public void run() {
		try{
			Properties p = new Properties();
			p.setProperty("mail.host","127.0.0.1");
			p.setProperty("mail.smtp.auth", "true");
			Session s = Session.getDefaultInstance(p,new Authenticator() {
				public javax.mail.PasswordAuthentication getPasswordAuthentication() {
					return new PasswordAuthentication("one", "1234");
				};
			});
			s.setDebug(true);
			MimeMessage mm = new MimeMessage(s);
			mm.setFrom(new InternetAddress("one@wj.com"));
			mm.setRecipient(RecipientType.TO,new InternetAddress(user.getEmail()));
			mm.setSubject("请去激活");
			//声明url
//			String url = "http://192.168.1.100:6666/day21_active/ActiveServlet?id="+user.getCode();
			String url = "http://10.212.169.93:8080/day21_active/ActiveServlet?id="+user.getCode();
			String html ="你好:"+user.getName()+"<br/>请激活:<a href='"+url+"'>激活</a>,你可以Copy这个连接:"+url;
			mm.setContent(html,"text/html;charset=UTf-8");
			
			Transport.send(mm);
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}


第四步:激活的ActiveSerlvet


public class ActiveServlet extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		String code = request.getParameter("id");
		try{
			String sql = "delete from active where code=?";
			QueryRunner run = new QueryRunner(DataSourceUtils.getDatasSource());
			int effect = run.update(sql,code);
			if(effect==0){
				response.getWriter().print("Active Failed...");
			}else{
				response.getWriter().print("Active Successfully");
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		
	}

}

第五步登录的serlvet – LoingSerlvet

public class LoginSerlvet extends HttpServlet {
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		request.setCharacterEncoding("UTF-8");
		String name = request.getParameter("name");
		String pwd  = request.getParameter("pwd");
		//如果
		try{
			String sql = "SELECT id,name,pwd,email,code"+
						 " FROM users LEFT JOIN active ON users.id=active.uid"+
					     " WHERE name=? and pwd=?";
			QueryRunner run = new QueryRunner(DataSourceUtils.getDatasSource());
			User u = run.query(sql,new BeanHandler<User>(User.class),name,pwd);
			if(u==null){
				out.print("你的用户名或是密码错误..");
			}else{
				if(u.getCode()==null){
					out.print("你登录成功、。。。");
				}else{
					out.print("你还没有激活...");
				}
			}
		}catch(Exception e){
			e.printStackTrace();
		}
	}

}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值