Если вы действительно хотите научиться форматировать интернет-сообщение, вам следует обратиться к его запросу на комментарии (он же RFC).* «1001 * RFC2045 », выпущенный в ноябре 1996 года.
Формат, который определяется как-то очень строгим и должен соблюдаться как есть.
В основном сообщение содержит заголовок и тело.Заголовок определяет тип сообщения, способ его форматирования, некоторые другие поля, которые отличаются от одного типа к другому.
Тело состоит из разных сущностей.Сущность может быть, например, простым текстом типа «Привет!»но также может быть изображением, вложением, чем угодно.
ПРИМЕЧАНИЕ В следующих примерах все, что заключено в квадратные скобки (например, {hello}), должно быть заменено вашим реальным значением,Любой перевод строки в действительности является CRLF (т. Е. ASCII 13 + ASCII 10).Где вы видите два CRLF придерживаться его.Это был бы худший момент, чтобы показать, насколько вы креативны.
В основном для сообщения электронной почты с вложениями заголовок должен выглядеть следующим образом:
MIME-Version: 1.0
To: {email@domain}
Subject: {email-subject}
X-Priority: {2 (High)}
Content-Type: multipart/mixed; boundary="{mixed-boudary}"
В приведенном выше примере{mixed-boudary} может быть любым уникальным хеш-значением, например, 000008050800060107020705. Остальные говорят сами за себя.
Теперь, каждый раз, когда мы хотим добавить новый объект к сообщению (например, тело сообщения, изображение(вложение), мы должны сообщить агенту электронной почты, что новый раздел , т.е.префикс этой сущности со значением {mixed-border}.Мы называем это «открыть границу».Обратите внимание, что, открывая границу, мы не вставляем эту границу, как было определено изначально, мы используем еще 2 знака минус впереди, например - {mixed-boudary}.Когда мы закрываем границу, мы поступаем аналогичным образом, за исключением того, что мы должны использовать другие 2 знака минус в конце, например - {mixed-boudary} -
--{mixed-boudary}
the entity content
--{mixed-boudary}--
, потому что агент электронной почты должен понимать, какой типимеет содержимое нашей новой вставленной сущности, которую мы должны объявить сразу после открытия границы.Объявление является просто заголовком, который содержит только те параметры / значения, которые совместимы с сущностью.
Для содержимого тела HTML мой заголовок сущности будет выглядеть так:
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 7bit
, поэтому весьтело (заключенное в границы) в конечном итоге будет выглядеть так:
--{mixed-boudary}
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 7bit
<html>
<head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head>
<body bgcolor="#FFFFFF" text="#000000">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque vel
dapibus arcu. Duis quam dui, ornare non mi nec, luctus faucibus massa. Vivamus
quis purus in erat euismod ullamcorper vitae eget dolor. Aliquam tempor erat
accumsan, consectetur ex et, rhoncus risus.
</body>
</html>
Если нужно вставить другую сущность, мы действуем точно так же, как описано выше.Когда больше нет данных для добавления к сообщению, мы закрываем смешанную границу, т.е.CRLF + - {mixed-boudary} -.
Если по какой-либо причине сущность должна быть вставлена с альтернативным представлением (например, текст сообщения вставляется как в виде простого текста, так и в виде HTML)формат), тогда контент объекта должен быть объявлен с типом содержимого multipart / alternative (хотя глобальный заголовок multipart / mixed все еще остается!).Каждое альтернативное представление будет заключено в эту новую границу.
Полный пример ниже:
MIME-Version: 1.0
To: {email@domain}
Subject: {email-subject}
X-Priority: {2 (High)}
Content-Type: multipart/mixed; boundary="{mixed-boudary}"
--{mixed-boudary}
Content-Type: multipart/alternative; boundary="{alternative-boudary}"
--{alternative-boudary}
Content-Type: text/plain; charset=utf-8;
Content-Transfer-Encoding: 7bit
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque vel
dapibus arcu. Duis quam dui, ornare non mi nec, luctus faucibus massa. Vivamus
quis purus in erat euismod ullamcorper vitae eget dolor. Aliquam tempor erat
accumsan, consectetur ex et, rhoncus risus.
--{alternative-boudary}
Content-Type: text/html; charset=utf-8;
Content-Transfer-Encoding: 7bit
<html>
<head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head>
<body bgcolor="#FFFFFF" text="#000000">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque vel
dapibus arcu. Duis quam dui, ornare non mi nec, luctus faucibus massa. Vivamus
quis purus in erat euismod ullamcorper vitae eget dolor. Aliquam tempor erat
accumsan, consectetur ex et, rhoncus risus.
</body>
</html>
--{alternative-boudary}--
--{mixed-boudary}
Content-Type: application/pdf; name="myfile.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="myfile.pdf"
JVBERi0xLjINOCAwIG9iag08PCAvTGVuZ3RoIDkgMCBSIC9GaWx0ZXIgL0ZsYXRlRGVjb2Rl
ID4+DXN0cmVhbQ1oQ51bbY/cNg7+BfsfhAUO11w3riW/B7gPaZEAAdpcm06RL8EBzoyn68uM
vZ3xZLv//khKsuUxNaMNiiabpUg+pKiHsmxJEcN/UsgiilP4ab2/+XF1I81vszSqclHIOEpj
sdrf/PC2EFVUpmK1vXkZxVKs1uJlJJVYPYrvPra7XVvvxYdIrE7rL83hhVj97+bNyjUoFam7
FnOB+tubGI3FZEkwmhpKXpVRnqJi0PCyjBJ1DjyOYqWBxxXp/1h3X+ov9abZt434pV0feoG/
ars/xU/9/qEZmm7diJ+abmgOr0TGeFNFEuXx5M4B95Idns/QAaJMI1IpKeXi9+ZhaPafm4NQ
cRwzNpK0iirlRvisRBZpVJa+PP51091kkjBWBXrJxUuZRjIXh0Z8FN3MnB5X5st5Kay9355n
--{mixed-boudary}--
СОВЕТЫ
Используйте предпочитаемый вами вариантпочтовый клиент (мой - Thunderbird) и отправьте себе только одно текстовое сообщение, только один HTML, один смешанный, а затем каждое из предыдущих, но с одним вложенным файлом.Когда вы получаете сообщение, просто изучите его источник (Вид -> Источник сообщения).
@ Edit: очень хорошо документированный пример + пример PHP можно найти по адресу здесь