Если вы действительно хотите узнать, как форматировать Internet Message, то вам следует обратиться его Запрос комментариев (также известный как RFC).Тот, который определяет «Многоцелевые расширения электронной почты Интернета - формат интернет-сообщений», - RFC2045, выпущенный в ноябре 1996 года.
Формат как-то очень строгий и должен соблюдаться как есть.
В основном сообщение содержит заголовок и корпус. Заголовок определяет тип сообщения, способ его формирования, некоторые другие поля, которые отличаются от одного типа к другому.
Тело образовано разными лицами. Сущность может быть, например, просто текстовым, например «Hello there!» но также может быть образ, привязанность, что угодно.
Примечание В следующих примерах все заключенные в скобки (например, {привет}) должно быть заменены с реальным значением. Любая новая строка на самом деле является CRLF (т.е. ASCII 13 + ASCII 10). Где вы видите два CRLF. Было бы худшим моментом, чтобы показать, насколько вы творческий.
В основном для сообщения электронной почты, который имеет вложения заголовок должен выглядеть следующим образом:
MIME-Version: 1.0
To: {[email protected]}
Subject: {email-subject}
X-Priority: {2 (High)}
Content-Type: multipart/mixed; boundary="{mixed-boudary}"
В приведенном выше примере {смешанного boudary} может быть любое уникальное значение хеш-функции, как 000008050800060107020705. остальные не требуют пояснений.
Теперь, когда мы хотим добавить в сообщение новую сущность (например, тело сообщения, изображение, вложение), мы должны сообщить агенту по электронной почте, что приходит новый раздел, т.е. для префикса этого объекта значением {mixed-border}. Мы называем это «открываем границу». Обратите внимание, что, открыв границу, мы не вставляем эту границу, как было определено первоначально, мы используем еще два минусовых знака спереди, например - {mixed-boudary}. Когда мы закрываем границу, поступим аналогично, за исключением того, что мы должны использовать другие 2 минус знаки в конце концов, как - {смешанного 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 (хотя глобальный многочастный/смешанный заголовок все еще остается!). Каждое альтернативное представление будет заключено в эту новую границу.
Полный пример ниже:
MIME-Version: 1.0
To: {[email protected]}
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}--
TIPS
Используйте нужный почтовый клиент (шахта Thunderbird) и отправить себя одно сообщение открытым текстом только один HTML только , один смешанный и , затем каждый из ранних, но с одним прикрепленным файлом. Когда вы получите сообщение, просто изучите его источник (View -> Message источник).
@Edit: исследование очень хорошо документированный случай + PHP пример можно найти в here
каждая часть многочастной почты имеет свой собственный взгляд типа содержимого на источнике надлежащей многочастной почты. – Rufinus
Возможный дубликат [php send email with attachment] (http://stackoverflow.com/questions/4586557/php-send-email-with-attachment). Здесь немало других, которые занимаются электронной почтой и вложениями, просматривают некоторые из связанных. – jprofitt
используйте MIME-заголовок в вашем почтовом шаблоне –