今天嘗試用java.mail.jar來實現Java程序發送郵件的功能,遇到一些問題:java
1、當使用QQ郵箱向網易郵箱發郵件時:安全
問題1:530錯誤,須要創建安全鏈接,報錯以下:服務器
javax.mail.AuthenticationFailedException: 530 Error: A secure connection is requiered(such as ssl). More information at http://service.mail.qq.com/cgi-bin/help?id=28session
解決:我在原來的初始化代碼中加上SSL相關代碼便可解決此錯誤,以下前四句代碼:socket
private void init(String name, String pass, String smtpHostName) throws GeneralSecurityException{ //開啓ssl加密,若是沒有ssl加密,會報530錯誤 MailSSLSocketFactory sf = new MailSSLSocketFactory(); sf.setTrustAllHosts(true); prop.put("mail.smtp.ssl.enable", "true"); prop.put("mail.smtp.ssl.socketFactory", sf); prop.setProperty("mail.smtp.auth", "true"); prop.setProperty("mail.smtp.host", smtpHostName); authticator = new MailAuthticator(name, pass); session = Session.getInstance(prop, authticator); }
問題2:535錯誤,身份認證失敗。報錯以下:ui
javax.mail.AuthenticationFailedException: 535 Error: Authentication failed: More information at http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256加密
緣由:我用QQ郵箱的密碼做爲發送者認證密碼,其實這裏應該要用騰訊郵箱給的受權碼。spa
解決:個人具體操做以下:code
登錄個人QQ郵箱---設置---帳戶,找到POP3/IMAP.....,我暫時是將前兩項服務開啓,開啓時須要驗證,驗證成功就能夠得到受權碼了,而後用受權碼替代QQ郵箱的密碼便可解決此錯誤。ps:由於我這裏開啓了兩個服務,因此獲得了兩個受權碼,我試過了用任意一個均可以。orm
ps:我在遇到這個問題2後,看到網上有在人說要把服務器改爲:smtp.exmail.qq.com,個人以前是smtp.qq.com。因此我就改爲了smtp.exmail.qq.com,但問題並無解決。我最後是在smtp.qq.com的配置下,進行上面的步驟才成功的。成功以後我又改爲smtp.exmail.qq.com試了一下,發現仍是報535錯誤。因此最後個人是smtp.qq.com
2、用網易郵箱向QQ郵箱發送郵件時:
一、即便不加上SSL安全鏈接那四句代碼,也能成功發送
二、也須要用受權碼代替發送者的密碼,受權碼的獲取過程與QQ郵箱的相似:登錄網易郵箱--設置--POP3/SMTP/IMAP--開啓相關服務--驗證--獲取認證碼。注意網易的認證碼是本身設置的,而QQ郵箱的則是它本身生成的。