530 A secure connection is requiered(such as ssl)
出現(xiàn)該錯誤的原因主要是郵箱為了保證安全,有了黑名單制度,通過網(wǎng)站發(fā)來了一些郵件(包括驗證郵件會被認為不安全),所以直接攔截處理掉
解決的辦法:
1、如果是接收郵箱,則添加白名單,將測試的發(fā)送郵箱改為白名單。
2、如果是發(fā)送郵箱,建議使用客戶端授權(quán)碼,這個授權(quán)碼替代上面代碼部分的passwd即可成功發(fā)送郵件。
553 authentication is required
出現(xiàn)該錯誤的原因是郵箱的用戶名和密碼錯誤,或者創(chuàng)建信件服務(wù)器的驗證步驟時出錯,即properties.put("mail.smtp.auth", true),true不為boolean值
解決的辦法:
1、校驗一下郵箱的用戶名和密碼是否正確
2、properties.put("mail.smtp.auth",true);//設(shè)置smtp身份認證
實際應(yīng)該是這properties.put("mail.smtp.auth", “true”);//設(shè)置smtp身份認證
該認證也是對用戶名和密碼的驗證,必須要有這一條
535 Error:請使用授權(quán)碼登錄。
詳情請看:http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256
解決的辦法:這里用到的不是你的郵箱登陸密碼而是開啟郵箱smtp服務(wù)之后給的授權(quán)碼。輸入這個授權(quán)碼就可以。
AuthenticationFailedException異常
在用戶名和密碼都沒有問題的情況下,如果代碼拋出javax.mail.AuthenticationFailedException異常,請從以下幾個方面查找:
1、有些新注冊的郵箱是不提供SMTP服務(wù)的,這時候用這樣的郵箱發(fā)信就會報此異常。網(wǎng)易的現(xiàn)在新注冊的郵箱已經(jīng)不提供smtp服務(wù)了,所以不管你是jMail還是用outlook都無法驗證。以前注冊并且使用過pop服務(wù)的郵箱現(xiàn)在還可以用。而且現(xiàn)在SINA新注冊的郵箱也不提供smtp服務(wù)。
2、其次要看from的email地址和Authenticator類中驗證的用戶名是否是一致的,要不也會出錯。
另外
郵件驗證的時候Session.getDefaultInstance(props, authentic);
何謂getDefaultInstance?
從處理流程中可以看出,首先是從緩存中查找是否有properties存在
如果存在,則加載默認的properties
如果不存在才加載用戶自己定義的properties,
所以當(dāng)一個應(yīng)用為每個用戶獨立創(chuàng)建properties的時候,還是應(yīng)該調(diào)用getInstance,
除非你希望有一個默認的properties讓用戶使用
它會首先去內(nèi)存和系統(tǒng)文件中去找properties,所以不管我在頁面改幾次數(shù)據(jù)或者方法參數(shù)里傳多少次不同的郵件帳號如果有smtp不同的都是按照第一次的來,其實在后臺中生成session時都和系統(tǒng)啟動時的一樣,所以在MailUtil.sendTextMessage(mailSession,RptTaskMailConfig.Sender,
receiver,null,mail_subject,mail_content,"GB2312",null);時session里的sender和傳入的sender不一致,因此出錯
報javax.mail.AuthenticationFailedException
session.getdefaultinstance和getinstance的區(qū)別(引自網(wǎng)絡(luò)):
如果想要同時使用兩個帳號發(fā)送javamail,比如使用1@a.com發(fā)送1#郵件,使用2@a.com發(fā)送2#郵件,這時候,你就需要同時創(chuàng)建兩個java.mail.Session對象。但是如果你仍然使用Session.getDefaultInstance創(chuàng)建session對象的話,你會發(fā)現(xiàn),第二個username:2@a.com創(chuàng)建的session永遠都和第一個一樣,這是為什么呢?因為,getDefaultInstance是真正單例模式,而且,里面的username和password屬性是final型的,無法更改。所以,你會發(fā)現(xiàn)兩封email都是由1@a.com發(fā)出來的。所以這個時候你要使用javax.mail.Session.getInstance()方法來創(chuàng)建session對象。
所以如果發(fā)郵件一直只用一個郵件發(fā)是不會有問題的
但是你會隨機選擇不同郵件服務(wù)地址來給不同人發(fā)郵件
就要注意這個問題