2016-06-13 8 views
0

でIMAP本体のメッセージを取得し、これはコマンドです:私は、すべてのメッセージ本文を取得することを知っているのtelnet

[imap_code] UID FETCH [uid] BODY.PEEK[TEXT] 

したがって、私はメッセージ本文全体を取得します。 しかし添付ファイルの一部を除外する必要があります。私は送信者、テキスト、および/またはhtmlから書いたメッセージだけを欲しい。

方法はありますか? HTMLバージョン

+0

実際のログと期待される実際の出力からのサンプルエントリで質問を更新してください – Inian

+0

Ok、例を示しました – matiux

+0

すべてのメッセージはこの例のように見えますか? – Max

答えて

3

メッセージがない場合

これは、添付ファイル付きの完全な生のHTMLメールであること

http://pastebin.com/FMEQdLM3

私だけ

<div dir="ltr">This is the message body<div><ul><li>one</li><li>two</li></ul></div></div> 

またはプレーンテキストを取得したいと思いますは、親アイテムがmultipart/*またはmessage/rfc822タイプであり、子が他のタイプである任意のツリーの中に配置されています。 FETCH BODY[...]はこれらの部分を任意に抽出します。

残念ながら、メッセージの標準レイアウトはありません。 BODYSTRUCTURE項目をフェッチしてメッセージのMIMEレイアウトを取得することはできますが、目で解析するのは非常に困難です。

言われているように、ほとんどの方法で利用できる共通のメッセージレイアウトがいくつかあります。

最も簡単なのは、本文がtext/htmlまたはtext/plainの1つのメッセージだけです。ちょうどBODY[TEXT]を取得してください。

次は、text/htmlとtext/plainの両方を含むマルチフォーマットです。そのMIME構造は概ね次のようになります。

+ multipart/alternative [TEXT] 
|- text/plain    [1] 
\- text/html    [2] 

この場合、BODY[2]を取得します。

メッセージが単体の場合は、添付ファイルと、それはこのようなものになります。あなたがBODY[1]をしたいこの場合

+ multipart/mixed or multipart/related [TEXT] 
|- text/html or text/plain    [1] 
|- image/jpg       [2] 
| ... 
\- image/gif 

を。

最後は両方とも添付ファイル付きのマルチフォーマットボディです。それは次のように見える傾向があります。この場合

+ multipart/mixed or multipart/related [TEXT] 
|-+ multipart/alternative    [1] 
| |- text/plain       [1.1] 
| \- text/html       [1.2] 
|- image/jpeg       [2] 
|- image/gif       [3] 
|... 
\- image/png 

を、あなたはおそらくBODY[1.2]をしたいです。あなたのサンプルメッセージはこのタイプです。


さらに、本文はQuoted-PrintableまたはBase64エンコーディングでエンコードすることができます。残念ながら、ベースラインIMAPでは、サーバーがこれをデコードする方法はありません。 Quoted-Printableは、メッセージがasciiの場合は大部分が読み取られますが、 =の多くが本文中にエスケープされます。それがbase64の場合、目で解読することはできません。 BINARY IMAP extensionはこれを助けることができますが、これは広く展開されていません。

+0

[私のアスキーアートの木を間違えて] – Max

関連する問題