java郵箱激活註冊

分析:
首先創建含有激活狀態的javaBean對象
public class User implements Serializable {
private int uid;//用戶id
private String username;//用戶名,賬號
private String password;//密碼
private String name;//真實姓名
private String birthday;//出生日期
private String sex;//男或女
private String telephone;//手機號
private String email;//郵箱
private String status;//激活狀態,Y代表激活,N代表未激活
private String code;//激活碼(要求唯一)
省略了getter/setter toString 方法等
}

用戶激活其實就是修改用戶表中的status狀態,我們在這用Y和N表示,Y表示已經激活,N表示未激活。
然後再創建一個封裝信息的javaBean對象
private boolean flag;//後端返回結果正常爲true,發生異常返回false
private Object data;//後端返回結果數據對象
private String errorMsg;//發生異常的錯誤消息

Servlet

 @WebServlet("/activeUserServlet")
public class ActiveUserServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  //獲取激活碼
   String code=request.getParameter("code");
   if (code!=null){
       //調用service完成激活
       Userservice service=new UserServiceImpl();
       boolean flag=service.active(code);
       //判斷標記 響應不同信息
       String msg=null;
       if (flag){
           //激活成功
           msg="激活成功,請<a href='login.html'>登錄</a>";
       }else{
          //激活失敗
           msg="激活失敗,請聯繫管理員!";
       }
       response.setContentType("text/html;charset=utf-8");
       response.getWriter().write(msg);
  }

}

Service
/*

  • 註冊用戶

  • */

      public boolean regist(User user) {
     //根據用戶名查詢用戶對象
     User u=userDao.findByUsername(user.getUsername());
     //判斷u是否爲null
     if (u!=null){
      //用戶名存在,註冊失敗
      return  false;
     }
     //保存用戶信息
    //2.1設置激活碼,唯一字符串 便於Servlet區分用戶
    user.setCode(UuidUtil.getUuid());
    //設置激活狀態
     user.setStatus("N");
     userDao.save(user);
    //激活郵件發送
     String content="<a href='http://localhost:8055/travel/activeUserServlet?   code="+user.getCode()+"'>點擊激活</a>";
     MailUtils.sendMail(user.getEmail(),content,"激活郵件");
     return true;
    
     }
    

/*

  • 激活用戶
  • */
    @Override
    public boolean active(String code) {
    //根據激活碼查詢用戶對象
    User user=userDao.findByCode(code);
    if (user!=null){
    //調用dao修改激活狀態的方法
    userDao.updateStatus(user);
    return true;
    }else {
    return false;
    }

}
Dao
/*

  • 根據激活碼查找用戶
  • /
    @Override
    public User findByCode(String code) {
    User user=null;
    try {
    String sql=“select * from tab_user where code=?”;
    user=template.queryForObject(sql,new BeanPropertyRowMapper(User.class),code);
    } catch (Exception e) {
    e.printStackTrace();
    }
    return user;
    }
    /
  • 修改激活狀態
  • */
    @Override
    public void updateStatus(User user) {
    String sql=“update tab_user set status=‘Y’ where uid=?”;
    template.update(sql,user.getUid());
    }

在這需要獲取客戶端的授權碼大家可以參考一下獲取qq郵箱授權碼
mail工具類

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;

/**

  • 發郵件工具類
    */

      public final class MailUtils {
      private static final String USER = ""; // 發件人稱號,同郵箱地址
      private static final String PASSWORD = ""; // 使用郵箱授權碼
    

    /**
    *

    • @param to 收件人郵箱

    • @param text 郵件正文

    • @param title 標題
      /
      /
      發送驗證信息的郵件 */

       public static boolean sendMail(String to, String text, String title){
        try {
       final Properties props = new Properties();
       props.put("mail.smtp.auth", "true");
       props.put("mail.smtp.host", "smtp.qq.com");
      
       // 發件人的賬號
       props.put("mail.user", USER);
       //發件人的密碼
       props.put("mail.password", PASSWORD);
      
       // 構建授權信息,用於進行SMTP進行身份驗證
       Authenticator authenticator = new Authenticator() {
           @Override
           protected PasswordAuthentication getPasswordAuthentication() {
               // 用戶名、密碼
               String userName = props.getProperty("mail.user");
               String password = props.getProperty("mail.password");
               return new PasswordAuthentication(userName, password);
           }
       };
       // 使用環境屬性和授權信息,創建郵件會話
       Session mailSession = Session.getInstance(props, authenticator);
       // 創建郵件消息
       MimeMessage message = new MimeMessage(mailSession);
       // 設置發件人
       String username = props.getProperty("mail.user");
       InternetAddress form = new InternetAddress(username);
       message.setFrom(form);
      
       // 設置收件人
       InternetAddress toAddress = new InternetAddress(to);
       message.setRecipient(Message.RecipientType.TO, toAddress);
      
       // 設置郵件標題
       message.setSubject(title);
      
       // 設置郵件的內容體
       message.setContent(text, "text/html;charset=UTF-8");
       // 發送郵件
       Transport.send(message);
       return true;
      
       }catch (Exception e){
       e.printStackTrace();
      
      }
       return false;
       }
      
      public static void main(String[] args) throws Exception { // 做測試用
       MailUtils.sendMail("發件人郵箱","你好,這是一封測試郵件,無需回覆。","測試郵件");
       System.out.println("發送成功");
       }
      
       }
      

Uuid工具類

import java.util.UUID;

/**

  • 產生UUID隨機字符串工具類
    /
    public final class UuidUtil {
    private UuidUtil(){}
    public static String getUuid(){
    return UUID.randomUUID().toString().replace("-","");
    }
    /
    *
    • 測試
      */
      public static void main(String[] args) {
      System.out.println(UuidUtil.getUuid());
      System.out.println(UuidUtil.getUuid());
      System.out.println(UuidUtil.getUuid());
      System.out.println(UuidUtil.getUuid());
      }
      }
發佈了17 篇原創文章 · 獲贊 18 · 訪問量 2831
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章