1. 程式人生 > >JavaMail中的553 Mail from must equal authorized user

JavaMail中的553 Mail from must equal authorized user

文章轉自:http://blog.csdn.net/yanzhibo/article/details/8775029

 在做android中的郵箱系統時,使用了JavaMail的技術,前面帖子中有該技術的實現,這裡就不再贅述。

剛開始傳送都很正常,今天用一個新註冊的163傳送時,雖然顯示傳送成功,但是並沒有傳送,就從網上找資料,

都說網易新註冊的郵箱,是不能使用SMTP協議傳送郵件的,必須經常使用的郵箱才可以。汗。就在介面裡又重新輸入了原有的163郵箱,點擊發送後的結果,不在意料之中,返回了一個這樣的異常錯誤:

com.sun.mail.smtp.SMTPSendFailedException: 553 Mail from must equal authorized user


at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1515)

at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1054)

at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:634)

at javax.mail.Transport.send0(Transport.java:189)

...

        本來對JavaMail就還很模糊,這時就更不知道是哪裡的問題,按字面理解,是說驗證的使用者和發信人不相同,我仔細看了看程式碼裡的驗證使用者和發信人,莫非我賦值的驗證使用者和發信人的值不一樣,我就用Log日誌打印出這兩個變數,發現雖然不是用的同一個變數,但是他們的輸出值都一樣的呀。

        這讓我冒出一個疑問,為什麼第一次輸入郵箱使用者名稱和密碼的時候,沒有這樣的提示,當第二次重新輸入其他郵箱使用者名稱和密碼的時候,就會出現這樣的異常?真是程式碼裡驗證使用者和發信人不相同嗎?那為什麼第一次輸入的郵箱賬號,登入時沒有這樣的異常?

        帶著這個疑問,我就一直在想,莫非是有什麼資源沒有釋放,讓第二次和第一次使用的驗證使用者名稱一樣,這樣第二次的發信人就和第二次的驗證使用者不相同,就會出現553異常。

        經過反覆的程式碼跟蹤和輸出跟蹤,我發現在第二次重新輸入的郵箱使用者名稱登入時,會在輸出發信人之後,就丟擲了553異常,而第一次在輸出發信人之後,還會繼續輸出收信人和主題,內容。是有什麼資源沒有釋放嗎?就開始看程式碼,也沒發現有全域性變數,而且每次執行傳送時,所有的物件都是最新建立的,難道Session要關閉,在Eclipse裡輸入Session物件的變數之後,也沒找到相關的釋放方法,從網上查了一下,也沒有看到有說還要關閉Session的。

       我就繼續從網上找資料,結果找到了一篇CSDN上問題跟我差不多的帖子:

他的問題也是第一次傳送成功,第二次傳送不出去,我就接著往下看,看看有什麼解決方法沒,在第三層,果然讓我找到了,居然是發帖者自己解決的。乖乖,發帖者的解決速度蠻快的,剛貼出問題,就解決了,怪不得跟帖者就一個呢。廢話少說,回到正題,原來他是這樣解決的:

問題解決,
將 Session session = Session.getDefaultInstance(props, myauth);
改成
 Session session = Session.getInstance(props, myauth);
即可

在這裡贊一下發帖者,不像某些人,提出問題,自己解決了,也不說怎麼解決的。

我就按照他的方法把程式碼裡的方法替換了一下,重新執行,輸入第一個郵箱賬號和密碼,成功傳送,第二次輸入其他的郵箱賬號和密碼,點發送,ok,成功了。

好了,到這裡問題也解決了,但是還不明白Session.getDefaultInstance和 Session.getInstance有什麼區別呢?又找了一下資料,結果找到了也是遇到過553異常的人寫的一篇blog,他的blog標題居然是:

”JavaMail中Session.getDefaultInstance的應用“,

不是吧,這樣太難找了,一般都是搜尋問題名稱,誰會搜尋這個。如果發帖者能把標題改成問題,那我也就不用找這麼就了。不過還是要感謝這個人,他在這篇帖子裡詳細的說明了為什麼用Session.getDefaultInstance方法會出現在第二次輸入其他郵箱賬號登入時出現553異常。

以下內容都這摘自這個帖子:

何謂getDefaultInstance? 
從處理流程中可以看出,首先是從快取中查詢是否有properties存在 
如果存在,則載入預設的properties 
如果不存在才載入使用者自己定義的properties, 
所以當一個應用為每個使用者獨立建立properties的時候,還是應該呼叫getInstance, 
除非你希望有一個預設的properties讓使用者使用

問題找到了,因為它會首先去記憶體和系統檔案中去找properties,所以不管我在頁面改幾次資料,其實在後臺中生成session時都和系統啟動時的一樣,所以在MailUtil.sendTextMessage(mailSession,RptTaskMailConfig.Sender,
receiver,null,mail_subject,mail_content,"GB2312",null);時session裡的sender和傳入的sender不一致,因此出錯,修改Session.getDefaultInstance(props, authentic);Session.getInstance(props, authentic);後,可以正確傳送修改帳號,密碼等資料後的郵件.OK

最後再補充一下,session.getdefaultinstance和getinstance的區別 :

 如果想要同時使用兩個帳號傳送javamail,比如使用[email protected]傳送1#郵件,使用[email protected]傳送2#郵件,這時候,你就需要同時建立兩個java.mail.Session物件。但是如果你仍然使用Session.getDefaultInstance建立session物件的話,你會發現,第二個username:[email protected]建立的session永遠都和第一個一樣,這是為什麼呢?因為,getDefaultInstance是真正單例模式,而且,裡面的username和password屬性是final型的,無法更改。所以,你會發現兩封email都是由[email protected]發出來的。所以這個時候你要使用javax.mail.Session.getInstance()方法來建立session物件。

感謝遇到同樣問題的前輩,你們都是巨人。

相關推薦

JavaMail553 Mail from must equal authorized user

文章轉自:http://blog.csdn.net/yanzhibo/article/details/8775029  在做android中的郵箱系統時,使用了JavaMail的技術,前面帖子中有該技術的實現,這裡就不再贅述。 剛開始傳送都很正常,今天用一個新註冊的1

Jenkins 發郵件 553 Mail from must equal authorized user解決辦法

如下配置了Jenkins郵件系統,但是沒法傳送測試郵件,錯誤553。 在網上搜了下,有些人錯誤為501 mail from address must be same as authorization user;其實問題是一樣的,需要在Jenkins Location中配置

553 mail from must equal authorized user解決方法

在配置傳送郵件通知,驗證其正確性時,出現"553 mail from must equal authorized user"提示的錯誤; 原因在於沒有在"系統管理(Manage Jenkins)"的"系統設定(Configure system)"中"Jenkins Loc

553 Mail from must equal authorized user

在本人工作的過程中,遇到了形形色色的問題。當時琢磨了好久才琢磨出這樣的總結,貼出來供大家參考參考。以下觀點僅代表本人在工作過程中的觀點,望大家能夠共同討論,查漏補缺。 那麼首先先貼出我原本的配置給大家看看哈. #default Mai

C#使用QQ郵箱發送,出現mail from address must be same as authorization user異常

第三方 smt log .cn user alt from 登錄密碼 mtp 1.未開啟pop3或者smtp 2.在使用第三方客戶端時,郵箱登錄密碼不是“登錄密碼”,應該是生成的授權碼。 如圖: C#使用QQ郵箱發送,出現mail from address must b

javax.mail 報錯 501 mail from address must be same as authorization user 解決方法

從一個郵箱傳送郵件 從一個郵箱傳送郵件報錯 501 mail from address must be same as authorization user,是由於獲取Session時的賬號和Message中設定的郵箱地址setFrom不一致引起的 程式碼如

redmide 配置郵箱 出錯記錄501 mail from address must be same as authorization user

redmine  》配置 》郵件通知 》郵件發件人地址,跟配置檔案的傳送郵箱要統一。 production: delivery_method: :smtp smtp_settings: ssl: true address: "sm

mysql show index from tb_name命令各列的含義

mysql indexshow index from table_name這個命令有助於診斷性能低下的查詢,尤其是查詢是否使用了可用的索引。下面介紹下 這個命令顯示的結果列的含義:| Table | Non_unique | Key_name | Seq_in_index | Column_name | Co

關於MySQLselect (select...) from ... 查詢

and 新建 技術 alt nbsp images pan class color 直接上例子: 新建A表結構及數據如下: 新建B表結構及數據如下: 其中:B表和A表是一對多的關系(1:n),B表的主鍵是A表的外鍵 SELECT A.ha, (SELECT B.hah

pythonimport或from使用及模塊和包的使用總結

python模塊 python包 python import與from __all__使用一、簡介1、模塊(module):根據python官方的解釋,所謂模塊就是一個.py文件,用來存放變量,方法的文件,便於在其他python文件中導入(通過import或from);2、包(package): 包是更大的

SVNRevert changes from this revision 跟Revert to this revision

效果 spa 十個 表示 visio class ges 全部 revert 譬如有個文件,有十個版本,假定版本號是1,2,3,4,5,6,7,8,9,10。Revert to this revision: 如果是在版本6這裏點擊“Revert to this revisi

java呼叫郵箱報錯解決:Client was not authenticated to send anonymous mail during MAIL FROM

郵件傳送報錯資訊 com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.57 SMTP; Client was not authenticated to send anonymous mail during MAIL FROM 錯誤資訊:

ios 協議(delegate)使用過程遇到assign attribute must be unsafeunretained

今天在使用協議的過程中,偶然發現這樣使用 @interface AppDelegate (){ id<ChatDelegate> testdelegate; } @property (nonatomic , assign) id<ChatDelegate>

Python 3的yield from語法詳解

前言 最近在搗鼓Autobahn,它有給出個例子是基於asyncio 的,想著說放到pypy3上跑跑看竟然就……失敗了。 pip install asyncio直接報invalid syntax,粗看還以為2to3處理的時 候有問題——這不能怪我,好~多package都是用

pythonimport和from-import的區別

. import匯入模組的路徑兩種方式 # 將模組所在路徑再程式中新增到sys.path列表中 import sys sys.path import匯入模組按照sys.path順序依次查詢,“”代表當前路徑 # 修改作業系統的PYTHON_PATH環境變數 #

PHP呼叫mail()函式傳送郵件所需sendmail的基本配置和html格式的郵件資訊

首先從http://glob.com.au/sendmail上下載sendmail壓縮包;並將其解壓到D:盤中(一般最好不要解壓到C:盤,且目錄不要太長)。 設定一下PHP.ini檔案: [mail function] ; For Win32 only. ; http://

SMTP server did not accept MAIL FROM

<br /> <b>Fatal error</b>: Uncaught Nette\Mail\SmtpException: SMTP server did no

arcgisCreate Features From Text File功能詳解

安裝軟件 新版本 字段 too 方法 安裝 shape 分享 .com 1.Create Features From Text File工具介紹 Create Features From Text File工具是arcgis->arctoolbox工具箱中的工具,用於

Spring Boot引入mail郵件服務

傳送郵件,包括簡單郵件,html郵件,帶附件郵件,內嵌圖片郵件四種類型。 1、配置 pom.xml <dependency> <groupId>org.springframework.boot</groupId> <artifactI

ButtonKnife在library引用“Attribute value must be constant”報錯解決

最近在搞專案元件化的事,按業務分成獨立的module,在release的時候就要把業務module設定成library,但是發現設定成library時候原先的buttonknife繫結view的程式碼全部標紅下劃線,提示“Attribute value must