2013-08-01 4 views
7

私のメールチェッカーでは、POP3 SSLとIMAP SSLの両方をサポートしています。 SASLを使用しているPop3 SSLはしばらく動いていましたが、SASLのコードはPOP3とIMAPの間で非常に似ていても、SASLを使用してIMAP SSLを使用することはありませんでした。私の理解は、this issueが修正されるまで、それが働くとは思ってはいけないということでした。まあ、その問題は修正されているので、私はSASLをIMAPのために作ってみることをもう一度見てみたいと思いました。 Indyを更新して再構築し、すべてのSASLコードのコメントを外しました。そして今、ログインコマンドを発行すると、IdIMAP4で読み取りタイムアウトが発生します(タイムアウトを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} 

は、そのバグレポートに示された改正で追加された、私はインディ正常に更新されましたかなり確信している、とSASLメカニズムとwhatnoを設定するための私のロジック(POP3 AuthType patSASLの代わりにIMAP AuthType iatSASLを使用する場合を除いて)POP3の場合と非常によく似ています。では、なぜ私はここで読み取りタイムアウトを取得していますか?私のコードかIndyが正しく動作していないかどうか、どうすればトラブルシューティングできますか? IMAP.AuthTypeをiatUserPassに変更するか、DEF_IMAP4_AUTH接続が成功した場合。私は、バグ報告が修正されて閉鎖されているというヒント以外、IMAPでSASLが動作することを期待するべきかどうかに関する最新の情報を見つけることができないようです。

編集:ここでは彼の返事で パーレミーの質問に、」私はSSLなしでSASLと接続するように設定したときのwiresharkで撮影した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のようなパケットスニッファを使用するか、TIdIMAP.InterceptプロパティにIndy独自のTIdLog...コンポーネントの1つを添付します。

更新TIdIMAP4.GetInternalResponse()のバグです。 +行が正しく処理されていません。私はIndyのSVNへの修正をチェックしました。

+0

* OK [CAPABILITY IMAP4rev1 LITERAL + SASL-IR LOGIN-REFERRALS IDを有効にするSTARTTLS AUTH = PLAIN AUTH = LOGIN] Dovecot対応。 C1能力 * CAPABILITY IMAP4rev1のLITERAL + SASL-IR LOGIN-REFERRALS IDは、SORT SORT =表示スレッドをENABLE = REFERENCESスレッド= REFS MULTIAPPEND UNSELECT IDLE CHILDREN NAMESPACE UIDPLUSリスト拡張I18NLEVEL = 1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES CONTEXT =検索リストWITHIN -STATUS QUOTA STARTTLS AUTH = PLAIN AUTH = LOGIN C1 OK能力が完了しました。 C2 AUTHENTICATE PLAIN + C3 LOGOUT継続応答 –

+0

ACKで C2 NO [ALERT]無効なbase64のデータ、それは読みづらいですが、私はそれがやっているものを比較すると、フォーマットされた –

+0

にそれを置くために、質問を編集しますIMAP with SASL and POP3 with SASLこれは、クライアントがパスワードを送信していないことを示しています。 –

関連する問題