regexプレーンテキストの電子メールメッセージでインライン画像を見つける

StackOverflow https://stackoverflow.com/questions/3691877

質問

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

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

私が見つけた問題は、プレースホルダーが送信メールクライアントに基づいて異なることです。たとえば、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??

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

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

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

それが誰にとっても重要であれば、私はC#を使用しています。

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

  • Gmail: [image: filename.jpg]
  • Outlook 2007: [cid:filename.jpg@01CB50D4.769583B0]
  • サンダーバード3.0.7: none
役に立ちましたか?

解決

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

^\[.*\]$

少なくともこれは、上記の例で機能するものです。画像名を識別したい場合は、少し複雑な式が必要です。これは、内容が何であれ、[そして終わる]で始まるすべての線をキャッチすることに注意してください。 regexpをいくつかのファイルタイプに制限したい場合は、これを試してください。

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top