天天看点

java web注册实现邮箱验证

下载javax.mail.jar导入项目

//以下是action代码

    @SuppressWarnings("unchecked")

    public String register(){

        userInfo.setTradersPassword(userInfo.getLoginPassword());

        session.put("REGISTER_USER",userInfo);

        return "verify";

    }

    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();

    }

    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";

    }

java web注册实现邮箱验证

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

    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 {

     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;    

        }

    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;    

    }    

}