java實現使用QQ郵箱發送驗證碼功能


首先當然是導入jar包了啊

如果是maven項目可以進maven資源庫進行搜索導入,在此附上地址:https://mvnrepository.com

這是需要導入的jar包  commons-email-1.x.jar、mail.jar  activation.jar,其中activation.jar我並沒有導入,但是還是發送成功了,但看網上有蠻多都說需要導入,所以看你們咯,可以試試。

緊着就是確定QQ開通了POP3/SMPT協議,只需要發件人開通就好了

不知道怎么開通的看圖,首先進入QQ郵箱,點擊設置點擊“賬戶”,然后往下面拉,拉到下面“POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務點擊開啟

也就是這個

然后會彈出一個頁面,需要你發送消息進行驗證,當然你也可以不適用短信驗證,選擇一種你認為最方便的就行咯

驗證完了之后你會得到一個授權碼,這個授權碼就相當於你發送郵件的時候所需要用到的密碼一樣,賬戶當然是你的咯。這個授權碼可以后續重新生成的,所以不需要擔心忘記了

在上面這些步驟完成之后就可以開始代碼測試了,我這個方法放回boolean類型的原因是后續會在控制層進行判斷是否發送成功

其中參數如下:code:驗證碼(待會附上驗證碼的代碼)

         email:收件人的郵箱號

       content:發送消息的內容

         username:這個參數其實沒啥用,只是我用來替換發送內容的名字的,這個你不用管就是

public  boolean sendSimpleMessage(String code, String email, String content, String username)
            throws MessagingException {

        Properties p = new Properties();

        try {
            //發送郵件協議名稱
            p.setProperty("mail.transport.protocol", "smtp");
            //發送服務器需要身份驗證
            p.setProperty("mail.smtp.auth", "true");
            //設置主機名
            p.setProperty("mail.smtp.host",this.iUserService.findConfigEmail("smtpHost").getString("value"));
            p.setProperty("mail.smtp.port", "25");  //端口號
            //創建emailsession,其中MyAuthenticator為自定義的類,繼承了Authenticator,並重寫了getPasswordAuthentication方法
            Session session = Session.getInstance(p,new MyAuthenticator(this.iUserService.findConfigEmail("smtpUserName").getString("value"),
                    this.iUserService.findConfigEmail("smtpPwd").getString("value")));
            session.setDebug(false);
            Message messgae = new MimeMessage(session);
            //設置發件人地址,即你的發件人qq賬戶
            messgae.setFrom(new InternetAddress(this.iUserService.findConfigEmail("smtpUser").getString("value")));
            //發件內容替換(你可以不用下面這兩行代碼)
            content = content.replace("$mobile_code",code);
            content = content.replace("$mobile_name",username);
            //設置發件內容
            messgae.setText(content);
            //設置郵件標題
            messgae.setSubject(this.iUserService.findConfigEmail("smtpTitle").getString("value"));
            
            //通過session獲得transport對象
            Transport tran = session.getTransport();

            tran.connect();
            //發送郵件並設置收件人地址
            tran.sendMessage(messgae,
                    new Address[] { new InternetAddress(email) });
            tran.close();
            return true;

        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }

    }

在上面代碼所說的自定義實現的MyAuthenticator代碼如下,userName就是發件人郵箱,passwordd就是之前的授權碼

public class MyAuthenticator extends Authenticator{   
    String userName=null;   
    String password=null;   
        
    public MyAuthenticator(){   
    }   
    public MyAuthenticator(String username, String password) {    
        this.userName = username;    
        this.password = password;    
    }    
    protected PasswordAuthentication getPasswordAuthentication(){   
        return new PasswordAuthentication(userName, password);   
    }   
}   

驗證碼生成代碼

    private char randomChar(){
        Random r = new Random();
        String s = "ABCDEFGHJKLMNPRSTUVWXYZ0123456789";
        return s.charAt(r.nextInt(s.length()));
    }

整個過程就這樣結束了,另外我上面的相關配置因為都是保存在數據庫中的,所以你只需要直接替換成自己的相關配置信息就好了,在測試完之后可以進入你的郵箱查看是否發送成功。

 


免責聲明!

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



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