JavaWeb中實現通過郵箱找回密碼


在開發JavaWeb項目中,利用郵箱幫用戶找回密碼。
效果展示:  

  需要一個發送郵件的jar包 : javax.mail .jar
1.JSP頁面(設置郵箱輸入框)

HTML:

<p >請輸入您賬戶關聯的郵箱</p>
郵箱:<input type="email" name="email" id="email" placeholder="請您輸入郵箱"  required> 
<button type="submit" id="retrievePassword">提交</button>

JS:

$(document).ready(function () {
         $("#retrievePassword").click(function(){
                 var email  = $("#email").val();
                 if(email == null || email == ""){
                    alert("郵箱不能為空");
                     return;
                 }
                //正則表達式判斷郵箱地址是否正確
                 var emreg=/^\w{3,}(\.\w+)*@[A-z0-9]+(\.[A-z]{2,5}){1,2}$/;
                 if(emreg.test(email.value)== true){
                    alert("您輸入的不是一個合法郵箱格式!");
                     return;
                 }
                 var postData = {
                         "email":email
                 }
                // ajax后端數據請求
                    $.ajax({
                        type : "post",
                        url : "user/xxx",
                        data : postData,
                        success : function(data) {
                  //todo
                        },
                        error : function() {
                              //todo
                        }
                    });
            });
     });

 2.Controller(控制層)代碼(根據用戶輸入的郵箱賬號找到用戶修改為新的密碼,並生成發送郵件類的實例,再設置收件人和要發送的內容,最后發送郵件)

//找回密碼控制器
    @RequestMapping(value = "/xxx", method = RequestMethod.POST, produces = "text/html;charset=UTF-8;")
    @ResponseBody // 此注解不能省略 否則ajax無法接受返回值
    public String retrievePassword(HttpServletRequest request, HttpServletResponse response)
            throws UnsupportedEncodingException {
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");

        HttpSession session = request.getSession();
        Map<String, Object> map = new HashMap<String, Object>();
        String email = request.getParameter("email");// email

        //實例化一個發送郵件的對象
        SendMail mySendMail = new SendMail();
        //修改密碼並返回
        //產生隨機的6位數密碼
        int Password = ((int)((Math.random()*9+1)*100000));
        //根據郵箱尋找是否有該用戶信息,找到就修改密碼,否則就提示用戶無效的用戶Email,此步代碼省略。。。。
        
        //修改密碼成功后進行發送郵件
        //設置收件人和消息內容
        mySendMail.sendMail(email, "xxx提醒,您的密碼為:"+ Password);
        map.put("code", 200);
        map.put("msg", "恭喜,找回密碼成功,請前往郵箱查看密碼!");
        JSONObject jsonFail = new JSONObject(map);
        return jsonFail.toString();
}                

3.發送郵件類

package com.xxx.xxx.util;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Date;
import java.util.Properties;

public class SendMail {
        // 發件人的郵箱賬號如:xxx@163.com
        public static String sendEmailAccount = "xxx@163.com";
        // 發件人的郵箱的授權碼(自己在郵箱服務器中開啟並設置)
        public static String sendEmailPassword = "xxx";
        // 發件人郵箱的SMTP服務器地址,如:smtp.163.com
        public static String sendEmailSMTPHost = "smtp.163.com";
        // 收件人的郵箱賬號
        public static String receiveMailAccount = "";
     
        // 把發送郵件封裝為函數,參數為收件人的郵箱賬號和要發送的內容
        public void sendMail(String receiveMailAccount, String mailContent) {
            // 創建用於連接郵件服務器的參數配置
            Properties props = new Properties();
            // 設置使用SMTP協議
            props.setProperty("mail.transport.protocol", "smtp");
            // 設置發件人的SMTP服務器地址
            props.setProperty("mail.smtp.host", sendEmailSMTPHost);
            // 設置需要驗證
            props.setProperty("mail.smtp.auth", "true");
            
            //Linux端口25沒有開放,放棄25端口,使用ssl加密並改用465端口--此舉可以兼顧window和Linux
            //使用ssl加密
            props.setProperty("mail.smtp.ssl.enable", "true");
            //設置端口
            props.setProperty("mail.smtp.port", "465");
            
            // 根據配置創建會話對象, 用於和郵件服務器交互
            Session session = Session.getInstance(props);
            // 設置debug模式,便於查看發送過程所產生的日志
            session.setDebug(true);
     
            try {
                // 創建一封郵件
                MimeMessage message = createMimeMessage(session, sendEmailAccount, receiveMailAccount, mailContent);
     
                // 根據 Session 獲取郵件傳輸對象
                Transport transport = session.getTransport();
     
                transport.connect(sendEmailAccount, sendEmailPassword);
     
                // 發送郵件, 發到所有的收件地址, 通過message.getAllRecipients() 可以獲取到在創建郵件對象時添加的所有收件人
                transport.sendMessage(message, message.getAllRecipients());
     
                // 關閉連接
                transport.close();
            } catch (NoSuchProviderException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (MessagingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
        /**
         * 
         * @param session
         *            和服務器交互的會話
         * @param sendMail
         *            發件人郵箱
         * @param receiveMail
         *            收件人郵箱
         * @return
         * @throws Exception
         */
        public static MimeMessage createMimeMessage(Session session, String sendMail, String receiveMail,
                String mailContent) throws Exception {
            // 創建一封郵件
            MimeMessage message = new MimeMessage(session);
     
            // 設置發件人姓名和編碼格式
            message.setFrom(new InternetAddress(sendMail, "xxx平台", "UTF-8"));
     
            // 收件人
            message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail, "尊敬的用戶", "UTF-8"));
     
            // 設置郵件主題
            message.setSubject("找回密碼提醒", "UTF-8");
     
            // 設置郵件正文
            message.setContent(mailContent, "text/html;charset=UTF-8");
     
            // 設置發件時間
            message.setSentDate(new Date());
     
            // 保存設置
            message.saveChanges();
     
            return message;
        }
}

  注意此處用的授權碼,需要自己登錄郵箱去設置,如163郵箱設置如下:

 

 

參考:https://blog.csdn.net/qq_40348465/article/details/83629000


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM