首先當然是導入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())); }
整個過程就這樣結束了,另外我上面的相關配置因為都是保存在數據庫中的,所以你只需要直接替換成自己的相關配置信息就好了,在測試完之后可以進入你的郵箱查看是否發送成功。