Regex Чтобы найти встроенные изображения в простом текстовом электронном сообщении

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

Вопрос

Некоторые почтовые клиенты позволяют отправителю размещать изображения непосредственно в корпус своей электронной почты (вместо традиционного приложения). Когда я получаю одну из этих электронных писем в моем приложении, мне нужно иметь возможность посмотреть на Только то 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 следуйте.

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

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

Я использую C #, если это имеет значение для всех.

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

  • Gmail: [image: filename.jpg]
  • Outlook 2007: [cid:filename.jpg@01CB50D4.769583B0]
  • Thunderbird 3.0.7: none
Это было полезно?

Решение

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

^\[.*\]$

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top