2015-05-20 2 views
8

Каков правильный способ создания HTML-E-mail с встроенными вложениями и не встроенными вложениями?HTML-электронная почта с встроенными вложениями и не встроенными вложениями

Кроме того, пожалуйста, сообщите мне, какой Content-Type использовать только с встроенными вложениями и только с не встроенными вложениями.

До сих пор я не сделал это так:

MIME-Version: 1.0 
[some more headers] 
Content-type: multipart/mixed; 
boundary="myboundary" 
--myboundary 
Content-Type: text/html; charset=ISO-8859-15 
Content-Transfer-Encoding: 7bit 

[html with img cid:my_image] 

--myboundary 
Content-Type: image/png; 
name="my_image.png" 
Content-Transfer-Encoding: base64 
Content-ID: <my_image> 
Content-Disposition: inline; 
filename="my_image.png" 

[base64 image data] 

--myboundary 
Content-type:application/pdf; 
    name="my_pdf.pdf" 
Content-length:1150 
Content-Transfer-Encoding: base64 
Content-ID: <my_pdf.pdf> 
Content-Disposition: attachment; 
filename="my_pdf.pdf" 

[base64 pdf data] 

--myboundary-- 

Почта хорошо выглядит в перспективе. Но я заметил, что Thunderbird не отображает мое встроенное изображение и показывает вместо него 2 вложения («Мой образ и мой PDF»). Поэтому я сделал некоторую отладку и заметил, что встроенные изображения должны быть отправлены через Content-Type: multipart/related.

Таким образом, я изменил Content-Type: multipart/mixed на Content-Type: multipart/related, и Thunderbird отобразило его правильно: изображение показано в html и одном приложении, отображается PDF.

Я не уверен, что это правильное решение, хотя оно работает. Правильно ли использовать multipart/related (в случае, если у меня есть встроенные и не встроенные вложения, в случае, если у меня есть только встроенные вложения и в случае, если у меня есть только не встроенные вложения)?

Или это правильный способ использования одной границы типа, связанной с разделением встроенных вложений и другой границей смешанного типа, чтобы разделить нестрочные вложения?

Я надеюсь, что вы можете предоставить мне образец для

  1. Email с инлайн только вложения
  2. Email с не инлайн только вложения
  3. электронной почты с помощью встроенных и без встроенных приложений
+0

Я написал ответ с на подобный вопрос и создана ascii art, чтобы объяснить ответ: http://stackoverflow.com/a/40420648/633961 – guettli

ответ

15

Фотографии

Да, это является правильным подходом к использованию типа контента multipart/related.Вот пример (обратите внимание на 'Content-Type' и значения 'Content-Disposition'):

enter image description here

Example source and detailed info

Вот образцы вы запрошенные:

  1. Email с встроенными вложениями
  2. Эл. почта с использованием не входящих в комплект поставки
  3. Электронная почта с встроенным и не включенным
  4. вложения ап пара та

Пример 1: рядный только

enter image description here

Subject: Test 01: inline only 
To: Renat Gilmanov 
Content-Type: multipart/related; boundary=089e0149bb0ea4e55c051712afb5 

--089e0149bb0ea4e55c051712afb5 
Content-Type: text/html; charset=UTF-8 
Content-Transfer-Encoding: quoted-printable 

<div dir=3D"ltr">Lorem ipsum dolor sit amet, consectetur adipiscing elit. P= 
ellentesque odio urna, bibendum eu ultricies in, dignissim in magna. Vivamu= 
s risus justo, viverra sed dapibus eu, laoreet eget erat. Sed pretium a urn= 
a id pulvinar.<br><br><img src=3D"cid:ii_ia6yo3z92_14d962f8450cc6f1" height= 
=3D"218" width=3D"320"><br>=E2=80=8B<br>Cras eu velit ac purus feugiat impe= 
rdiet nec sit amet ipsum. Praesent gravida lobortis justo, nec tristique ve= 
lit sagittis finibus. Suspendisse porta ante id diam varius, in cursus ante= 
luctus. Aenean a mollis mi. Pellentesque accumsan lacus sed erat vulputate= 
, et semper tellus condimentum.<br><br>Best regards<br></div> 

--089e0149bb0ea4e55c051712afb5 
Content-Type: image/png; name="test-01.png" 
Content-Disposition: inline; filename="test-01.png" 
Content-Transfer-Encoding: base64 
Content-ID: <ii_ia6yo3z92_14d962f8450cc6f1> 
X-Attachment-Id: ii_ia6yo3z92_14d962f8450cc6f1 

iVBORw0KGgoAAAANSUhEUgAAAUAAAADaCAYAAADXGps7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz 
AAALewAAC3sBSRnwgAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAALnSURB 
... 
QCDLAIEsAwSyDBDIMkAgywCBLAMEsgwQyDJAIMsAgSwDBLIMEMgyQCDLAIEsAwSyDBDIMkAg6wK+ 
4gU280YtuwAAAABJRU5ErkJggg== 
--089e0149bb0ea4e55c051712afb5-- 

Пример 2: только вложения

enter image description here

Subject: Test 02: only attachments 
To: Renat Gilmanov 
Content-Type: multipart/mixed; boundary=047d7b41cc5c82ae5d051712c40c 

--047d7b41cc5c82ae5d051712c40c 
Content-Type: text/plain; charset=UTF-8 

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque 
odio urna, bibendum eu ultricies in, dignissim in magna. Vivamus risus 
justo, viverra sed dapibus eu, laoreet eget erat. Sed pretium a urna 
id pulvinar. 

Cras eu velit ac purus feugiat imperdiet nec sit amet ipsum. Praesent 
gravida lobortis justo, nec tristique velit sagittis finibus. 
Suspendisse porta ante id diam varius, in cursus ante luctus. Aenean a 
mollis mi. Pellentesque accumsan lacus sed erat vulputate, et semper 
tellus condimentum. 

Best regards 

--047d7b41cc5c82ae5d051712c40c 
Content-Type: image/png; name="test-02.png" 
Content-Disposition: attachment; filename="test-02.png" 
Content-Transfer-Encoding: base64 
X-Attachment-Id: f_ia6yvl4b0 

iVBORw0KGgoAAAANSUhEUgAAAUAAAADaCAYAAADXGps7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz 
AAALewAAC3sBSRnwgAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAALnSURB 
... 
gECWAQJZBghkGSCQZYBAlgECWQYIZBkgkGWAQJYBAlkGCGQZIJBlgECWAQJZBghkGSCQZYBA1gWV 
ywTWDU1tpwAAAABJRU5ErkJggg== 
--047d7b41cc5c82ae5d051712c40c-- 

Пример 3: встроенный и вложения

enter image description here

Subject: Test 03: inline and attachments 
To: Renat Gilmanov 
Content-Type: multipart/mixed; boundary=001a11c24d809f1525051712cc78 

--001a11c24d809f1525051712cc78 
Content-Type: multipart/related; boundary=001a11c24d809f1523051712cc77 

--001a11c24d809f1523051712cc77 
Content-Type: text/html; charset=UTF-8 
Content-Transfer-Encoding: quoted-printable 

<div dir=3D"ltr">Lorem ipsum dolor sit amet, consectetur adipiscing elit. P= 
ellentesque odio urna, bibendum eu ultricies in, dignissim in magna. Vivamu= 
s risus justo, viverra sed dapibus eu, laoreet eget erat. Sed pretium a urn= 
a id pulvinar.<br><br><img src=3D"cid:ii_ia6yyemg0_14d9636d8ac7a587" height= 
=3D"218" width=3D"320"><br>=E2=80=8B<br>Cras eu velit ac purus feugiat impe= 
rdiet nec sit amet ipsum. Praesent gravida lobortis justo, nec tristique ve= 
lit sagittis finibus. Suspendisse porta ante id diam varius, in cursus ante= 
luctus. Aenean a mollis mi. Pellentesque accumsan lacus sed erat vulputate= 
, et semper tellus condimentum.<br><br>Best regards</div> 

--001a11c24d809f1523051712cc77 
Content-Type: image/png; name="test-01.png" 
Content-Disposition: inline; filename="test-01.png" 
Content-Transfer-Encoding: base64 
Content-ID: <ii_ia6yyemg0_14d9636d8ac7a587> 
X-Attachment-Id: ii_ia6yyemg0_14d9636d8ac7a587 

iVBORw0KGgoAAAANSUhEUgAAAUAAAADaCAYAAADXGps7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz 
AAALewAAC3sBSRnwgAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAALnSURB 
... 
QCDLAIEsAwSyDBDIMkAgywCBLAMEsgwQyDJAIMsAgSwDBLIMEMgyQCDLAIEsAwSyDBDIMkAg6wK+ 
4gU280YtuwAAAABJRU5ErkJggg== 
--001a11c24d809f1523051712cc77-- 
--001a11c24d809f1525051712cc78 
Content-Type: image/png; name="test-02.png" 
Content-Disposition: attachment; filename="test-02.png" 
Content-Transfer-Encoding: base64 
X-Attachment-Id: f_ia6yymei1 

iVBORw0KGgoAAAANSUhEUgAAAUAAAADaCAYAAADXGps7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz 
AAALewAAC3sBSRnwgAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAALnSURB 
... 
gECWAQJZBghkGSCQZYBAlgECWQYIZBkgkGWAQJYBAlkGCGQZIJBlgECWAQJZBghkGSCQZYBA1gWV 
ywTWDU1tpwAAAABJRU5ErkJggg== 
--001a11c24d809f1525051712cc78-- 

Краткое резюме

  1. Инлайн только вложения: использовать multipart/related
  2. Non-инлайн только вложения: использование multipart/mixed
  3. Инлайн и не встроенные вложения используют multipart/mixed и multipart/related

Update

Вот очень интересная статья: Using Images in HTML Email

+0

первое спасибо за ваш ответ. Пожалуйста, исправьте меня, если я ошибаюсь, что я понимаю из вашего ответа, так это то, что в случае как внутристрочных, так и не-встроенных вложений мне приходится использовать как «multipart/mixed», так и «multipart/related». Смешанные имеют следующие части: 1. HTML-Mail, включая связанные вложения и 2. Первое не-встроенное вложение 3. Второе не-встроенное вложение ... Часть 1 сама разделяется связанной границей. – steven

+0

Возможно, вам стоит немного улучшить свой ответ. Вы можете удалить часть, в которой вы объясните, что pdf следует отсылать через приложение типа содержимого/pdf, поскольку оно не является частью вопроса. Речь шла только о граничных типах контента. И было бы неплохо дать три примера, например, ваш последний образец: 1. только встроенное вложение изображения, 2. не встроенное вложение и 3. как встроенное, так и не встроенное вложение (это то, что показывает ваш образец прямо сейчас), но вы можете удалить часть «multipart/alternative», потому что она не была частью вопроса. – steven

+0

Я предложу +100 для вашего ответа, если вы улучшите его, как я объяснил. Надеюсь, вы подтвердите мое намерение предоставить образец для всех трех вариантов. Поэтому я надеюсь помочь понять пограничный материал, который не так легко получить, читая RFC. Большое спасибо. – steven

Смежные вопросы