2013-08-01 23 views
7

在我的電子郵件檢查器中,我支持POP3 SSL和IMAP SSL。儘管使用SASL的Pop3 SSL已經運行了一段時間,但我從未使用SASL獲得IMAP SSL,即使SASL的代碼在POP3和IMAP之間應該非常相似。我的理解是,我不應該期望它能夠工作,直到this issue被修復。那麼這個問題已經解決了,所以我想我會再次考慮讓SASL適用於IMAP。我更新並重建了Indy,並且取消了所有SASL代碼的註釋,現在我發現當我發出Login命令時,IdIMAP4中的讀取超時(即使超時設置爲大量時間(在20-30秒左右),比使用SASL在POP3上認證要長約5倍。我應該期望Indy Imap SASL連接起作用嗎?

在調試器中單步執行代碼,看起來引起讀超時的行在函數function PerformSASLLogin_IMAP(ASASL: TIdSASL; AEncoder: TIdEncoder; on line 1358:

AClient.SendCmd(AClient.NewCmdCounter, 'AUTHENTICATE ' + String(ASASL.ServiceName), [], True); {Do not Localize} 

考慮到這整個方法是在該bug報告指出了新的修訂,我敢肯定,我已經成功地更新印,我設立SASL機制和whatno邏輯t與POP3非常相似(除了使用IMAP AuthType iatSASL而不是Pop3 AuthType patSASL之類的東西)。那麼,爲什麼我會在這裏獲得讀取超時?我怎麼能解決它是我的代碼還是Indy不能正常工作?如果我將IMAP.AuthType更改爲iatUserPass或DEF_IMAP4_AUTH連接成功。我似乎無法找到有關我是否應該期望SASL和IMAP能夠正常工作的最新信息,除了錯誤報告被關閉爲已修復的提示之外。

編輯: 每雷米的問題在他的答覆,這裏由Wireshark的捕獲,當我將它設置爲與SASL連接不使用SSL的TCP會話:

 

* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE STARTTLS AUTH=PLAIN AUTH=LOGIN] Dovecot ready. 

C1 CAPABILITY 

* CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS MULTIAPPEND UNSELECT IDLE CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS QUOTA STARTTLS AUTH=PLAIN AUTH=LOGIN 

C1 OK Capability completed. 

C2 AUTHENTICATE PLAIN 

+ 

C3 LOGOUT 

C2 NO [ALERT] Invalid base64 data in continued response 

回答

5

據我所知,TIdIMAP SASL現在工作正常(考慮到我是實施它的人)。我無法訪問任何使用SASL的IMAP服務器,所以我實際上無法親自測試它,但這是我在過去幾個月中第一次聽說它存在固定實現存在的任何問題。

但是,如果沒有看到實際的套接字流量,就無法知道服務器是否根本發送任何回覆,或者TIdIMAP只是沒有正確讀取答覆。你能提供一個實際的命令/響應日誌嗎?可以使用Wireshark等數據包嗅探器,也可以將Indy自己的TIdLog...組件之一附加到TIdIMAP.Intercept屬性中。

更新:這是TIdIMAP4.GetInternalResponse()中的一個錯誤。它不正確處理+行。我已經檢查了Indy的SVN。

+0

* OK [CAPABILITY IMAP4rev1 LITERAL + SASL-IR LOGIN-REFERRALS ID ENABLE STARTTLS AUTH = PLAIN AUTH = LOGIN] Dovecot準備就緒。 C1 CAPABILITY * CAPABILITY IMAP4rev1 LITERAL + SASL-IR LOGIN-REFERRALS ID ENABLE排序排序= DISPLAY THREAD =參考THREAD = REFS MULTIAPPEND UNSELECT IDLE兒童NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL = 1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT =搜索列表-STATUS QUOTA STARTTLS AUTH = PLAIN AUTH =登錄 C1 OK功能已完成。 C2 AUTHENTICATE平原 + C3註銷 C2 NO [警示]在繼續應答 –

+0

ACK無效的base64數據,這是很難讀,我將修改的問題,以把在格式化 –

+0

比較它在做什麼的IMAP與SASL和POP3與SASL它似乎缺少的是客戶端不發送密碼 –

相關問題