Как расшифровать электронное письмо в формате MIME

Большинство электронных писем, отправленных сегодня, имеют формат MIME (Multipupose Internet Mail Extensions). Это позволяет отправлять электронные письма с обычным текстом и версиями RTF / HTML, встроенными изображениями и вложениями. Расширения MIME могут быть добавлены к сообщению в стандартном формате RFC / 822, поэтому достигается обратная совместимость со старыми почтовыми системами.

Шаг 1

Загрузите содержимое электронного письма.

Видео дня

Шаг 2

Проверьте заголовок «Content-Type». Если тип контента является составным (например, «составной / смешанный», «составной / альтернативный» и т. Д.), Сообщение будет иметь несколько разделов для анализа. Если тип контента является составным, перейдите к шагам ниже.

Шаг 3

Заголовок Content-Type должен содержать уникальную строку, используемую кодом, который сгенерировал сообщение MIME, для обозначения границ части MIME. Пример:

Content-Type: составной / смешанный; border = "part_c7161025_fe8a_45f4_83ef_6befcfa5d021"

Строка границы в этом случае - «part_c7161025_fe8a_45f4_83ef_6befcfa5d021».

Шаг 4

Каждая часть MIME будет разделена граничной строкой, которой предшествуют два дефиса («-») на пустой строке. Вам нужно будет сканировать сообщение построчно, ища границы частей. Весь текст между границами кроме финального CR / LF является частью этой части MIME.

Важно: последняя часть MIME будет заканчиваться граничной строкой, за которой следуют еще два тире.

Пример:

--part_c7161025_fe8a_45f4_83ef_6befcfa5d021 Первая часть MIME.

--part_c7161025_fe8a_45f4_83ef_6befcfa5d021 Вторая часть MIME

--part_c7161025_fe8a_45f4_83ef_6befcfa5d021 Последняя часть MIME.

--part_c7161025_fe8a_45f4_83ef_6befcfa5d021--

Шаг 5

Затем необходимо проанализировать каждую часть MIME. Формат каждой части MIME аналогичен формату исходного сообщения RFC / 822. Он будет содержать серию заголовков, за которыми следует пустая строка, а затем данные тела.

ШАГ 6

Часть MIME сама может быть составной, со своим собственным заголовком Content-Type и граничной строкой. Ваш код должен рекурсивно анализировать части MIME, пока не достигнет дочерних узлов.

Шаг 7

Часть MIME может быть просто двоичным вложением. В этом случае обычно предоставляется заголовок Filename вместе с кодировкой передачи. BASE64 - популярный тип кодирования. В этом случае все тело части MIME должно быть декодировано BASE64. В качестве примера приведены первые несколько строк прикрепленного изображения JPG:

=NextPart_003_01C755EF.43F2628D Content-Type: image / jpeg; name = "testimage.jpg" Кодирование передачи содержимого: base64 Описание содержимого: testimage.jpg Расположение содержимого: вложение; filename = "testimage.jpg"

/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL / 2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy MjIyMjIyMjIyMjIyMjIyMjIyMjIjMyMjIyMjIjMyMjIyMjIyMjIjIyMjIjIyMjIyMjIyMjIyMjIy AhEBAxEB / 8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL / 8QAtRAAAgEDAwIEAwUFBAQA

Шаг 8

HTML-текст сообщения должен находиться в разделе MIME с ContentType: Text / Html внутри раздела ContentType: Multipart / Alternative MIME.

Шаг 9

Текст сообщения должен находиться в разделе MIME с ContentType: Text / plain внутри ContentType: Multipart / Alternative MIME раздела.

Вещи, которые вам понадобятся

  • Знание компьютерного языка (например, C ++, C #, VB и т. Д.).

  • Базовые знания формата сообщения электронной почты в формате RFC / 822.

Подсказка

См. RFC 822. http://www.ietf.org/rfc/rfc0822.txt? число = 822 и RFC 1341 http://www.ietf.org/rfc/rfc1341.txt? число = 1341 Чтобы получить больше информации. Если вы пишете код на C #, отличная бесплатная библиотека доступна по адресу http://www.codeproject.com/csharp/mime_project.asp.