7

私のメール チェッカーでは、POP3 SSL と IMAP SSL の両方をサポートしています。SASL を使用した Pop3 SSL はしばらくの間動作していましたが、SASL のコードは POP3 と IMAP で非常に似ているはずですが、SASL を使用した IMAP SSL が動作することはありませんでした。私の理解では、この問題が修正されるまで、それが機能することを期待すべきではないということでした. さて、その問題は修正されたので、IMAP で SASL を機能させる方法をもう一度見てみようと思いました。Indy を更新して再構築し、すべての SASL コードのコメントを外しました。ログイン コマンドを発行すると、IdIMAP4 で読み取りタイムアウトが発生することがわかりました (タイムアウトが十分な時間に設定されていても (これは、SASL を使用して POP3 で認証するのにかかる時間の約 5 倍です。

デバッガーでコードをステップ実行すると、読み取りタイムアウトの原因となっている行が関数のfunction PerformSASLLogin_IMAP(ASASL: TIdSASL; AEncoder: TIdEncoder;1358 行目にあることがわかります。

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

このメソッド全体がそのバグレポートに示されているリビジョンで新しいものであったことを考えると、私は Indy を正常に更新したと確信しており、SASL メカニズムをセットアップするためのロジックとその他のものは POP3 で機能するものと非常に似ています (次のようなものを除く)。 Pop3 AuthType patSASL の代わりに IMAP AuthType iatSASL を使用します)。では、なぜここで読み取りタイムアウトが発生するのでしょうか? 正しく動作していないのが自分のコードなのか Indy なのかをトラブルシューティングするにはどうすればよいですか? IMAP.AuthType を iatUserPass または DEF_IMAP4_AUTH に変更すると、接続は成功します。バグレポートが修正済みとして閉じられているというヒントを除いて、IMAP を使用した SASL が現在機能していると期待できるかどうかについての最新情報を見つけることができないようです。

編集: Remy の返信での質問によると、SSL なしで SASL に接続するように設定したときに、wireshark によってキャプチャされた TCP 会話は次のとおりです。

* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE STARTTLS AUTH=PLAIN AUTH=LOGIN] Dovecot の準備ができました。

C1機能

* 機能 IMAP4rev1 リテラル+ SASL-IR ログイン-参照 ID 並べ替えを有効にする 並べ替え=表示 スレッド=参照 スレッド=REFS マルチアペンド アンセレクト アイドル チャイルドレン ネームスペース UIDPLUS リスト拡張 I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT コンテキスト内検索=検索 リストステータス クォータ STARTTLS AUTH=プレーン認証=ログイン

C1 OK 機能が完了しました。

C2 認証プレーン

+

C3 ログアウト

C2 NO [ALERT] 無効な base64 データの継続応答

4

1 に答える 1

5

AFAIK、TIdIMAPSASLは現在正常に動作しています(私がそれを実装したと考えてください)。私は SASL を使用する IMAP サーバーにアクセスできないので、実際に自分でテストすることはできませんでしたが、修正された実装が存在するという問題を過去数か月で聞いたのはこれが初めてです。

TIdIMAPただし、実際のソケット トラフィックを確認しないと、サーバーが応答を返しているのか、それとも単に応答を正しく読み取っていないのかを知る方法はありません。コマンド/応答の実際のログを提供できますか? Wireshark などのパケット スニファーを使用するか、Indy 独自のTIdLog...コンポーネントの 1 つをTIdIMAP.Interceptプロパティに接続します。

更新: のバグですTIdIMAP4.GetInternalResponse()+ラインを正しく処理していません。Indy の SVN への修正をチェックインしました。

于 2013-08-01T22:25:03.497 に答える