java發送郵件遇到的問題

今天嘗試用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郵箱的則是它本身生成的。

相關文章
相關標籤/搜索