regexプレーンテキストの電子メールメッセージでインライン画像を見つける
-
02-10-2019 - |
質問
特定のメールクライアントは、送信者が電子メールの本文に直接画像を配置することを許可します(従来の添付ファイルとしてではなく)。アプリケーションでこれらのメールの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で機能します...