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