之前一直想做一个用邮箱登录验证的demo,却一直拖着,周末终于有时间来做了。
网上例子很多,看了一下,也模仿了一些
它的大概思路就是 新注册的用户有一个状态,比如是0,然后给新注册的用户发送一个邮件,邮件里面是一个链接,然后用户只需要get请求这个连接(连接携带用户特殊信息),就可以激活这个用户,状态从0变成1,算是激活啦,
下面贴一点主要的发送邮件的代码吧
public class SendMailThread extends Thread{
private User u;
public SendMailThread(User user) {
this.u=user;
}
@Override
public void run() {
try {
//1.创建一个进行邮件发送会话的session对象
Properties p=new Properties();
p.setProperty("mail.host", "smtp.qq.com");//
p.setProperty("mail.smtp.auth", "true");
p.setProperty("mail.smtp.port", "587");
Session session=Session.getDefaultInstance(p,new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
PasswordAuthentication passwordAuthentication =new PasswordAuthentication("1527123308@qq.com", "vjyhovnzdpjxjdha");//QQ: 用户名为QQ邮箱,密码是QQ给的16位SMTP口令
return passwordAuthentication ;
}
});
session.setDebug(true);
//2.声明一封邮件-----MimeMessage
MimeMessage msg=new MimeMessage(session);
msg.setFrom(new InternetAddress("1527123308@qq.com"));
msg.setRecipient(RecipientType.TO, new InternetAddress(u.getMail()));
//设置邮件发送的内容
msg.setSubject("邮箱验证激活");
StringBuilder sb=new StringBuilder();
sb.append("这是***的测试程序自动发送,请忽略···<br/>");
sb.append(" <a href='http://127.0.0.1:8080/MyApp/servlet/ActiveServlet?code="+u.getCode()+"'>请点击此处激活账号</a>");
sb.append("<br/>若点击无反应,则把这段网址贴到地址栏中进行访问:");
sb.append("<a href='http://127.0.0.1:8080/MyApp/servlet/ActiveServlet?"
+ "code="+u.getCode()+"' target=_blank>http://127.0.0.1:8080/MyApp/ActiveServlet?code="+u.getCode()+"</a>");
msg.setContent(sb.toString(), "text/html;charset=utf-8");
//3.发送
Transport.send(msg);
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
上面代码是开启一个线程来发送邮件,User 类是一个用户对象,为了得到注册用户的email,1527123308@qq.com是作为邮件的发送方,这个邮箱一般是企业邮箱,不会有发送限制,我在测试的时候,总是被限制。每两三次都要重新获取MTP口令。