RegEx, чтобы найти встроенные изображения в текстовом сообщении электронной почты - PullRequest
2 голосов
/ 11 сентября 2010

Некоторые почтовые клиенты позволяют отправителю размещать изображения непосредственно в теле своего электронного письма (а не в виде традиционного вложения). Когда я получаю одно из этих писем в своем приложении, мне нужно иметь возможность просмотреть only text/plain тело сообщения и определить, что отправитель встроил встроенное изображение.

Я пытаюсь создать RegEx для поиска заполнителей изображения в теле сообщения text/plain, чтобы я мог поменять их на теги <img> в моей собственной версии сообщения с поддержкой HTML. (Дурацкий, я знаю, но это требование).

Проблема, которую я обнаружил, заключается в том, что заполнители отличаются в зависимости от клиента отправляющей почты. Например, при отправке из 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 изображением.

Кто-нибудь проводил какие-либо исследования по этому вопросу раньше и составлял список или создавал RegEx специально для этой цели?

Я понимаю, что более надежный способ достижения моей цели - посмотреть на часть сообщения text/html, которая кажется немного более стандартизированной из нескольких проведенных мной тестов, но, к сожалению, я этого не делаю. у него нет доступа к этому в этом сценарии.

Я использую C #, если это кому-нибудь важно.

Вот список заполнителей текста / простого изображения, которые я скомпилировал на данный момент:

  • Gmail: [image: filename.jpg]
  • Outlook 2007: [cid:filename.jpg@01CB50D4.769583B0]
  • Thunderbird 3.0.7: none

1 Ответ

3 голосов
/ 11 сентября 2010

Я бы предложил пойти с HTML-частью.Если вы хотите найти только заполнитель в текстовой части, этого достаточно простого регулярного выражения (PCRE):

^\[.*\]$

По крайней мере, это то, что работает для примеров выше.Если вы хотите определить имя изображения, потребуется более сложное выражение.Имейте в виду, что это поймает все строки, начинающиеся с [и заканчивающиеся], независимо от того, что содержимое.Если вы хотите ограничить регулярное выражение некоторыми типами файлов, попробуйте следующее:

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

Примеры будут работать в Perl, поскольку вы не упомянули язык ...

...