2

特定のメールクライアントでは、送信者が(従来の添付ファイルとしてではなく)メールの本文に直接画像を配置することができます。アプリケーションでこれらの電子メールの1つを受信した場合、メッセージ本文のみtext/plainを確認し、送信者がインライン画像を埋め込んだことを確認できる必要があります。

メッセージ本文で画像プレースホルダーを見つけるために正規表現を作成しようとしています。これにより、メッセージのHTML対応バージョンのタグとtext/plainそれらを交換できます。<img>(奇抜な、私は知っていますが、これは要件です)。

私が見つけた問題は、プレースホルダーが送信メールクライアントによって異なることです。たとえば、MS Outlookから送信された場合text/plain、マルチパートメッセージの本文は次のようになります。

Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Check out this image:

[cid:image001.jpg@01CB50D4.769583B0]

Isn't it cool??

Gmailから送信される同様のメッセージは、少し異なります。

Content-Type: text/plain; charset=ISO-8859-1

Check out this image:

[image: image001.jpg]

Isn't it cool??

base64でエンコードされた画像のtext/html本体とパーツが続きます。image/jpeg

誰かが以前にこれについて何か調査をして、リストを編集したり、この目的のために特別に正規表現を作成したことがありますか?

私の目標を達成するためのより信頼できる方法text/htmlは、メッセージの一部を確認することです。これは、私が行ったいくつかのテストからはもう少し標準化されているようですが、残念ながら、このシナリオ。

誰かにとって重要な場合は、C#を使用しています。

これまでにコンパイルしたテキスト/プレーン画像のプレースホルダーのリストは次のとおりです。

  • Gmail: [image: filename.jpg]
  • Outlook 2007: [cid:filename.jpg@01CB50D4.769583B0]
  • サンダーバード3.0.7: none
4

1 に答える 1

3

html 部分を使用することをお勧めします。プレーンテキスト部分のプレースホルダーだけを見つけたい場合は、この非常に単純な正規表現で十分です (PCRE):

^\[.*\]$

少なくとも、これは上記の例で機能します。画像名を特定したい場合は、少し複雑な表現が必要になります。内容が何であれ、これは [ で始まり ] で終わるすべての行をキャッチすることに注意してください。正規表現を一部のファイル タイプに限定したい場合は、次のようにしてください。

^\[.*(\.jpg|\.jpeg|\.png|\.gif|\.bmp).*\]$i

言語について言及していないため、例はPerlで機能します...

于 2010-09-11T18:19:49.180 に答える