0

Thunderbird から pdf が添付された html メッセージを転送しました。html と txt-plain を含む multipart/alternative と multipart/mixed を受け取り、base 64 でエンコードされた pdf を受け取ります。multipart/alternative は 8 ビット、charset= UTF8 です。

私は、php.net の imap:fetchstructure/fetchbody マニュアル ページのコメントからのほぼすべての提案を試しました。これらには、デコード (少なくともエンコード = 1、3、4)、imap_8bit、imap_qprint、imap_base64 の適用が含まれます。txt/plain を手動で見ると、encoding = 1 が示されているため、imap_8bit が適用されます。

返される $str は常に === "" (空の文字列) であるため、サンプル関数は、返されるテキストがプレーンか html かを判断することさえできません。

次に、誤って print_r($str) (imap_8bit が完了していない場合) を試しましたが、必要な電子メール テキストが含まれています。これは、imap_8bit がなければマルチバイトである可能性があり、mb_detect_encoding は UTF8 を返します (生の電子メール テキストでわかるように)。

mb_convert_encoding($str, "ASCII") をもう一度試すと、空の文字列が返されます。quoted_printable_decode は、imap_8bit の前でも後でも役に立ちません。netbeans PHP デバッガー (xdebug) は、これらすべての文字列が空であることを宣言しますが、変数が「文字列」であることを通知します。

電子メールのテキストにアクセスする方法を知っている人はいますか? print_r はそこにあることを示していますが、何日も頭を壁にぶつけていますが、何の結果もありません。

手動で境界などを検索してデコードすることはできますが、それほど難しくはありませんが...なぜ車輪を再発明するのでしょうか?

コード: 主に、php.net fetch_structure ページとその他の Web リソースから 2 つのバージョンを使用しました。私はそれらをこの投稿に追加できますが、現時点ではあまり爆破したくありません.

*get_part を呼び出す getTxtBody *getpart を呼び出す getmesg

プレーンテキストを見ると、プレーン、html、および pdf の (ネストされた) 境界がはっきりとわかります。

どんな助けでも大歓迎です., クラウス

4

1 に答える 1

0

fetch libraryを試すことができます。

ヘッダーをデコードするには、iconv_mime_decodeを使用できます

于 2013-07-14T20:02:35.153 に答える