0

このコマンドの結果を解析するには、IMAP コードを記述する必要があります。

tag FETCH 1,2,3,4 ALL

たいていの場合、このような応答が返ってきます

* 1 FETCH (FLAGS ... ) ENVELOPE ("time" "subject" ... )\r\n
* 2 FETCH (FLAGS ... ) ENVELOPE ("time" "subject" ... )\r\n
....
tag OK FETCH COMPLETE 

各エンベロープがアスタリスク UID で始まり、CRLF で終わる場合も同様です。そのため、CRLF を解析ポイントとして使用できます。

問題は、一部のサーバーが IMAP 文字列リテラル、つまり {150}\r\n を使用して応答していることです。\r\n は文字列リテラルの一部であるため、解析ポイントとして使用できなくなりました。

1 つの考えとしては * UID をパースポイントとして使用するというものがありますが、誰かがそれを電子メールの件名などとして偶然使用すると、アルゴリズムが壊れてしまうので、それを行うのは悪い考えだと思います。

CRLFを使用せずにこのタイプの応答を効果的に解析する方法を教えてもらえますか? なによりもありがとうございました。

編集 - 質問を改善するために、個々の ENVELOPE を解析ポイントに基づいて独自の文字列に解析しようとしています。ここでは、ある文字列の開始と別の文字列の終わりを識別する解析ポイントが必要です。

4

1 に答える 1

0

必要なトリックは、2 種類の改行を区別するためのものであり、それは存在します: 読み始め、CRLF が表示されるまで読み、それから自分が持っているものの先頭を見てください。タグスペースは OK、NO、BAD、または PREAUTH のどれですか? もしそうなら、あなたは完全な応答を持っています。そうでない場合は、最後の 10 ~ 15 文字を見てください。それらは "{"、数字、オプションでプラス記号、および "}" と CRLF ですか? その場合は、次の CRLF まで読み、繰り返します。そうでない場合は、完全な応答があります。

IMAP では、次の応答を解析する前に応答を処理する必要があることに注意してください。そうしないと、MSN の処理が中断されます。他にも問題がある可能性があります。

于 2015-07-17T20:47:37.613 に答える