java web 发送邮件登录验证

之前一直想做一个用邮箱登录验证的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口令。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值