java web注册实现邮箱验证

下载javax.mail.jar导入项目

//以下是action代码

/**
     * 注册第一步,保存用户名和密码
     * @return
     */
    @SuppressWarnings("unchecked")
    public String register(){
        userInfo.setTradersPassword(userInfo.getLoginPassword());
        session.put("REGISTER_USER",userInfo);
        return "verify";
    }

    /**
     * 注册第二步,发送验证邮件
     * @return
     */
    public String sendEmail(){
        if(null!=session.get("REGISTER_USER")){
            UUserInfo user =  (UUserInfo) session.get("REGISTER_USER");
            user.setLoginPassword(MD5.encode(user.getLoginPassword()));
            user.setTradersPassword(MD5.encode(user.getTradersPassword()));
            user.setEmail(userInfo.getEmail());
            user.setArticlesCount(0L);
            user.setEmailAuth(0L);
            user.setPhoneAuth(0L);
            user.setRegDate(new Date());
            user.setIsLock(1L);
            session.put("REGISTER_USER", user);
            
            //获取是第一次发还是重发邮件 0:第一次 1:更换邮箱发送
            String active = request.getParameter("active");
            
            boolean sendSuccess = sendHtmlEmail(user);
            if(sendSuccess && "0".equals(active)){//发送成功并且是第一次发送验证邮件,添加用户信息
                userInfoBiz.addUser(user);
            }else if(sendSuccess && "1".equals(active)) {//更换邮箱发送成功,修改用户邮箱
                UUserInfo userInfo = userInfoBiz.getUserInfoByUserName(user.getUserName());
                if(userInfo!=null)
                    userInfo.setEmail(user.getEmail());
                else
                    userInfo = user;
                userInfoBiz.modifyUserInfo(userInfo);
            }
        }
        session.put("email",userInfo.getEmail());
        return "sendEmail";
    }
    
    /**
     * 重新发送验证邮件
     */
    @SuppressWarnings("unchecked")
    public void sendEmailAgain(){
        UUserInfo user =  (UUserInfo) session.get("REGISTER_USER");
        int sendCount = session.get("sendCount")==null?0:Integer.valueOf(session.get("sendCount").toString());
        if(null!=user){
            if(null!=session.get("REGISTER_USER")){
                if(sendHtmlEmail(user)){
                    sendCount = sendCount+1;
                    session.put("sendCount",sendCount);
                }else {
                    sendCount = -1;
                }
            }
        }else {
            sendCount = -1;
        }
        getWriter().print(sendCount);
        closeOut();
    }
    
    /**
     * 激活邮箱
     * @return
     */
    public String verifyEmail(){
        String email = request.getParameter("ID");
        int verifyInfo = 0;
        if(null!=email){
            email = Encryption.decrypt(email);
            UUserInfo userInfo = userInfoBiz.getUserInfoByEmail(email);
            if(null!=userInfo){//改用户邮箱修改为已激活
                if(userInfo.getEmailAuth().intValue() ==0){
                    userInfo.setEmailAuth(1L);
                    userInfo.setIsLock(0L);
                    userInfoBiz.modifyUserInfo(userInfo);
                    session.put("USER_INFO",userInfo);
                    verifyInfo = 1;
                }else {
                    verifyInfo = 2;
                }
            }else {
                verifyInfo =-1;
            }
        }
        session.put("verifyInfo",verifyInfo);
        return "verifyEmail";
    }




//一下方法中的systemInfo中保存了后台配置的一些参数


    /**
     * 发送邮件
     * @return
     */
    public boolean sendHtmlEmail(UUserInfo user){
        //获取系统信息
        systemInfo = systemBiz.getSystemInfo();
        boolean flag=false;
        if(systemInfo!=null && systemInfo.getMailAddress()!=null){
            //发送验证邮件
            MailSenderInfo mailInfo = new MailSenderInfo();
            mailInfo.setMailServerHost(systemInfo.getMailSmtpIp()); // "smtp.qq.com"
            mailInfo.setMailServerPort("25");
            mailInfo.setValidate(true);
            mailInfo.setUserName(systemInfo.getMailAddress().split("@")[0]);//(mail_address.split("@")[0]); // "863406563"
            mailInfo.setPassword(Encryption.decrypt(systemInfo.getMailPassword()));// 您的邮箱密码
            mailInfo.setFromAddress(systemInfo.getMailAddress()); // 发送人
            mailInfo.setToAddress(user.getEmail()); //接收人
            mailInfo.setSubject(systemInfo.getMailSenderName()+"用户邮箱验证!");
            
            //生成激活链接
            String Uip = request.getServerName();
            String path = request.getScheme() + "://" + Uip + ":"
            + request.getServerPort() + request.getContextPath()
            + "/webUserInfoAction_verifyEmail.do?ID="+Encryption.encrypt(user.getEmail());
            
            String mailContent = "&nbsp;&nbsp;亲爱的"+systemInfo.getMailSenderName()+"用户 <span style=\"color:red\"> "
                + user.getUserName()
                + "</span> ,您好!<p>&nbsp;&nbsp;感谢您注册"+systemInfo.getMailSenderName()+",请确认您的邮箱帐号为 <span style=\"font-weight: bold\">"
                + user.getEmail()
                + " </span> </p><p>&nbsp;&nbsp;请点击下面的链接即可完成激活。</p><p>&nbsp;&nbsp;"
                + path
                + "</p><p>&nbsp;&nbsp;(如果链接无法点击,请将它拷贝到浏览器的地址栏中)"
                + "</p><p>&nbsp;&nbsp;"+systemInfo.getMailSenderName()+",您的互联网理财新渠道!</p><p>&nbsp;</p><p>&nbsp;&nbsp;此为自动发送邮件,请勿直接回复!</p>";
            mailInfo.setContent(mailContent);
            mailInfo.setNickname(systemInfo.getMailSenderName());
            
            try {
                flag=MailSender.sendHtmlMail(mailInfo);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return flag;
    }


新建一个实体类MailSenderInfo

import java.util.Properties;

public class MailSenderInfo {    
    // 发送邮件的服务器的IP和端口    
    private String mailServerHost;    
    private String mailServerPort;    
    // 邮件发送者的地址    
    private String fromAddress;    
    // 邮件接收者的地址    
    private String toAddress;    
    // 登陆邮件发送服务器的用户名和密码    
    private String userName;    
    private String password;
    // 发送者昵称
    private String nickname;
    // 是否需要身份验证    
    private boolean validate = false;    
    // 邮件主题    
    private String subject;    
    // 邮件的文本内容    
    private String content;    
    // 邮件附件的文件名    
    private String[] attachFileNames;      
    /** *//**   
      * 获得邮件会话属性   
      */    
    public Properties getProperties(){    
      Properties p = new Properties();    
      p.put("mail.smtp.host", this.mailServerHost);    
      p.put("mail.smtp.port", this.mailServerPort);    
      p.put("mail.smtp.auth", validate ? "true" : "false");    
      return p;    
    }    
    public String getMailServerHost() {    
      return mailServerHost;    
    }    
    public void setMailServerHost(String mailServerHost) {    
      this.mailServerHost = mailServerHost;    
    }   
    public String getMailServerPort() {    
      return mailServerPort;    
    }   
    public void setMailServerPort(String mailServerPort) {    
      this.mailServerPort = mailServerPort;    
    }   
    public boolean isValidate() {    
      return validate;    
    }   
    public void setValidate(boolean validate) {    
      this.validate = validate;    
    }   
    public String[] getAttachFileNames() {    
      return attachFileNames;    
    }   
    public void setAttachFileNames(String[] fileNames) {    
      this.attachFileNames = fileNames;    
    }   
    public String getFromAddress() {    
      return fromAddress;    
    }    
    public void setFromAddress(String fromAddress) {    
      this.fromAddress = fromAddress;    
    }   
    public String getPassword() {    
      return password;    
    }   
    public void setPassword(String password) {    
      this.password = password;    
    }   
    public String getToAddress() {    
      return toAddress;    
    }    
    public void setToAddress(String toAddress) {    
      this.toAddress = toAddress;    
    }    
    public String getUserName() {    
      return userName;    
    }   
    public void setUserName(String userName) {    
      this.userName = userName;    
    }   
    public String getSubject() {    
      return subject;    
    }   
    public void setSubject(String subject) {    
      this.subject = subject;    
    }   
    public String getContent() {    
      return content;    
    }   
    public void setContent(String textContent) {    
      this.content = textContent;    
    }
    public String getNickname() {
        return nickname;
    }
    public void setNickname(String nickname) {
        this.nickname = nickname;
    }
    
}   



//新建类MailSender

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

import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

public class MailSender {
    
    /**
      * 以文本格式发送邮件   
      * @param mailInfo 待发送的邮件的信息   
      */
     public boolean sendTextMail(MailSenderInfo mailInfo) {    
          // 判断是否需要身份认证    
          MyAuthenticator authenticator = null;    
          Properties pro = mailInfo.getProperties();   
          if (mailInfo.isValidate()) {    
          // 如果需要身份认证,则创建一个密码验证器    
            authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());    
          }   
          // 根据邮件会话属性和密码验证器构造一个发送邮件的session    
          Session sendMailSession = Session.getDefaultInstance(pro,authenticator);    
          try {    
          // 根据session创建一个邮件消息    
          Message mailMessage = new MimeMessage(sendMailSession);    
          // 创建邮件发送者地址    
          Address from = new InternetAddress(mailInfo.getFromAddress());    
          // 设置邮件消息的发送者    
          mailMessage.setFrom(from);    
          // 创建邮件的接收者地址,并设置到邮件消息中    
          Address to = new InternetAddress(mailInfo.getToAddress());    
          mailMessage.setRecipient(Message.RecipientType.TO,to);    
          // 设置邮件消息的主题    
          mailMessage.setSubject(mailInfo.getSubject());    
          // 设置邮件消息发送的时间    
          mailMessage.setSentDate(new Date());    
          // 设置邮件消息的主要内容    
          String mailContent = mailInfo.getContent();    
          mailMessage.setText(mailContent);    
          // 发送邮件    
          Transport.send(mailMessage);   
          return true;    
          } catch (MessagingException ex) {    
              ex.printStackTrace();    
          }    
          return false;    
        }
    
    
     /** *//**   
      * 以HTML格式发送邮件   
      * @param mailInfo 待发送的邮件信息   
     * @throws UnsupportedEncodingException
      */    
    public static boolean sendHtmlMail(MailSenderInfo mailInfo) throws UnsupportedEncodingException{    
      // 判断是否需要身份认证    
      MyAuthenticator authenticator = null;   
      Properties pro = mailInfo.getProperties();   
      //如果需要身份认证,则创建一个密码验证器     
      if (mailInfo.isValidate()) {    
        authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());   
      }    
      // 根据邮件会话属性和密码验证器构造一个发送邮件的session    
      Session sendMailSession = Session.getDefaultInstance(pro,authenticator);    
      try {    
      // 根据session创建一个邮件消息    
      Message mailMessage = new MimeMessage(sendMailSession);   
      //MimeMessage mailMessage=new MimeMessage(sendMailSession);
      // 创建邮件发送者地址    
      Address from =new InternetAddress(mailInfo.getFromAddress(),mailInfo.getNickname());
      // 设置邮件消息的发送者    
      mailMessage.setFrom(from);    
      // 创建邮件的接收者地址,并设置到邮件消息中    
      Address to = new InternetAddress(mailInfo.getToAddress());    
      // Message.RecipientType.TO属性表示接收者的类型为TO    
      mailMessage.setRecipient(Message.RecipientType.TO,to);    
      // 设置邮件消息的主题    
      mailMessage.setSubject(mailInfo.getSubject());    
      // 设置邮件消息发送的时间    
      mailMessage.setSentDate(new Date());    
      // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象    
      Multipart mainPart = new MimeMultipart();    
      // 创建一个包含HTML内容的MimeBodyPart    
      BodyPart html = new MimeBodyPart();    
      // 设置HTML内容    
      html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");    
      mainPart.addBodyPart(html);    
      // 将MiniMultipart对象设置为邮件内容    
      mailMessage.setContent(mainPart);    
      // 发送邮件    
      Transport.send(mailMessage);    
      return true;    
      } catch (MessagingException ex) {    
          ex.printStackTrace();    
      }    
      return false;    
    }    
}




  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现发送手机短信验证码和邮箱验证码的注册登录功能,需要以下几个步骤: 1. 获取用户输入的手机号码/邮箱地址,生成随机验证码,将验证码保存到服务器端。 2. 调用第三方短信/邮件接口,将验证码发送给用户。 3. 用户输入收到的验证码,与服务器保存的验证码进行比对。 4. 如果验证码正确,则允许用户进行注册/登录操作;否则提示用户输入错误。 下面以 Java Web 项目为例,介绍如何实现发送手机短信验证码和邮箱验证码的注册登录功能。 1. 发送手机短信验证码 (1)在 JSP 页面上添加输入手机号码的表单,并在表单提交时调用 Servlet 处理用户请求。 (2)在 Servlet 中生成随机验证码,并将验证码保存到 session 中。 (3)调用短信接口,将验证码发送到用户手机上。 (4)在 JSP 页面上添加输入验证码的表单,并在表单提交时调用 Servlet 进行比对。 (5)如果验证码正确,则允许用户进行注册/登录操作;否则提示用户输入错误。 2. 发送邮箱验证码 (1)在 JSP 页面上添加输入邮箱地址的表单,并在表单提交时调用 Servlet 处理用户请求。 (2)在 Servlet 中生成随机验证码,并将验证码保存到 session 中。 (3)调用邮件接口,将验证码发送到用户邮箱中。 (4)在 JSP 页面上添加输入验证码的表单,并在表单提交时调用 Servlet 进行比对。 (5)如果验证码正确,则允许用户进行注册/登录操作;否则提示用户输入错误。 以上就是使用 Java Web 技术实现发送手机短信验证码和邮箱验证码的注册登录功能的大致步骤,具体实现方式可以根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值