私は最近、PHP/IMAP ベースの電子メール処理機能をいくつか実装しており、(状況によっては) メッセージ本文のデコードを除いて、ほとんどすべてがうまく機能しています。
今では、RFC 2822 (「インターネット メッセージ フォーマット」ドキュメント ガイドライン) を半分記憶し、半ダースのオープン ソース CMS の電子メール処理コードを読み、膨大な数のフォーラム投稿、ブログ投稿、 PHPでメールを扱うなど。
また、PHP、 Imapのクラスをフォークして完全に書き直しました。このクラスは電子メールを適切に処理します。自動応答 (不在、古いアドレスなど) を検出し、base64 と 8bit をデコードするための便利なメソッドがいくつかあります。メッセージなど
ただし、確実に動作しない (または、場合によってはまったく動作しない) ことの 1 つは、メッセージがContent-Transfer-Encoding: 7bit
.
さまざまな電子メール クライアント/サービス7BIT
が、さまざまなことを意味するように解釈されているようです。実際にBase64 でエンコードされ7BIT
ていると思われる電子メールをいくつか受け取りました。実際に引用された印刷可能なエンコードされたものをいくつか入手しました。また、何らかの方法でエンコードされていないものもあります。また、HTML であるが、HTML であると示されていないものもあり、それらは...としてリストされています。7BIT
以下は、7Bit エンコーディングで受信したメッセージ本文のいくつかの例 (抜粋) です。
1:
A random message=20
Sent from my iPhone
2:
PGh0bWwgeG1sbnM6dj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwi
IHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9m
3:
tangerine apricot pepper.=0A=C2=A0=0ALet me know if you have any availabili=
ty over the next month or so. =0A=C2=A0=0AThank you,=0ANames Withheld=0A908=
-319-5916=0A=C2=A0=0A=C2=A0=0A=C2=A0=0A=0A=0A______________________________=
__=0AFrom: Names Witheld =0ATo: Names Withheld=
これらはすべて「7Bit」エンコーディングで送信されます (まあ、少なくとも PHP/ によるとimap_*
) が、プレーンテキストとして渡す前に、明らかにさらにデコードする必要があります。おそらく7ビットのエンコーディングを持つすべてのメッセージをプレーンテキストに確実に変換する方法はありますか?