2015-05-20 10 views
8

Wie kann eine HTML-E-Mail mit Inline-Anhängen und Nicht-Inline-Anhängen korrekt erstellt werden?HTML-E-Mail mit Inline-Anhängen und Nicht-Inline-Anhängen

Außerdem sagen Sie mir bitte, welche Content-Type nur mit Inline-Anhängen und nur mit Nicht-Inline-Anhängen verwendet werden soll.

Bis jetzt ich habe es wie folgt aus:

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-- 

Die E-Mail in Outlook gut aussieht. Aber ich habe gemerkt, dass Thunderbird mein Inline-Bild nicht anzeigt und stattdessen zwei Anhänge anzeigt (Mein Bild und mein PDF). Also habe ich ein paar Debugging gemacht und festgestellt, dass Inline Bilder über Content-Type: multipart/related gesendet werden sollten.

Also ich änderte Content-Type: multipart/mixed zu Content-Type: multipart/related und Thunderbird zeigte es richtig: Das Bild wird in HTML und einem Anhang angezeigt, das PDF wird angezeigt.

Ich bin nicht sicher, ob dies die richtige Lösung ist, obwohl es scheint zu funktionieren. Ist es korrekt, immer multipart/related zu verwenden (wenn ich Inline- und Nicht-Inline-Anhänge habe, falls ich nur Inline-Anhänge habe und wenn ich nur Nicht-Inline-Anhänge habe)?

Oder ist der richtige Weg, eine Grenze des Typs zu verwenden, um die Inline-Anhänge zu teilen und eine andere Grenze des Typs gemischt, um die Nicht-Inline-Anhänge zu teilen?

Ich hoffe, dass Sie mir eine Probe für

  1. E-Mail mit Inline nur Anhängen zur Verfügung stellen können
  2. E-Mail mit nicht-inline nur Anhängen
  3. E-Mail mit Inline-und Nicht-Inline-Anhängen
+0

ich eine Antwort schrieb auf eine ähnliche Frage und erstellt ein ascii art um den answert zu erklären: http://stackoverflow.com/a/40420648/633961 – guettli

Antwort

15

Bilder

Ja, es ist der richtige Ansatz, um den Inhaltstyp multipart/related zu verwenden.Hier ist ein Beispiel (bitte beachten Sie 'Content-Type' und 'Content-Disposition' Werte):

enter image description here

Example source and detailed info

Hier sind Beispiele, die Sie angefordert haben:

  1. E-Mail Nur Inline-Anhänge
  2. E-Mail mit nicht-inline-Nur-Anlagen
  3. E-Mail mit Inline-und nicht-Inl ine Attachments

Probe 1: inline nur

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-- 

Probe 2: nur Anhänge

enter image description here

Probe 3: inline und Anhänge

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-- 

Quick Zusammenfassung

  1. Inline nur Aufsätze: verwenden multipart/related
  2. Non-inline nur Anhänge: Verwendung multipart/mixed
  3. Inline und nicht-Inline-Anhänge verwenden multipart/mixed und multipart/related

aktualisieren

Hier ist ein sehr interessanter Artikel: Using Images in HTML Email

+0

erstmal danke für deine antwort. Bitte korrigieren Sie mich, wenn ich falsch liege, was ich aus Ihrer Antwort verstehe, ist, dass im Falle von sowohl Inline- als auch Nicht-Inline-Anhängen ich beide verwenden muss, eine "multipart/mixed" UND eine "multipart/related" Grenze. Die gemischten haben die folgenden Teile: 1. Die HTML-Mail mit den zugehörigen Anhängen und 2. Die erste nicht-inline-Anlage 3. Die zweite nicht-inline-Anlage ... Teil 1 wird selbst durch die zugehörige Grenze geteilt. – steven

+0

Vielleicht sollten Sie Ihre Antwort ein wenig verbessern. Sie können den Teil entfernen, in dem Sie erklären, dass das PDF-Dokument über den Inhaltstyp Anwendung/PDF gesendet werden sollte, da dies nicht Teil der Frage war. Die Frage bezog sich nur auf Grenzinhaltstypen. Und es wäre schön, stattdessen drei Beispiele wie das letzte Beispiel zu nennen: 1. Nur Inline-Bildanhang, 2. Nur Inline-Anhang und 3. Sowohl Inline- als auch Nicht-Inline-Anhang (das zeigt Ihr Beispiel gerade jetzt), aber Sie können den "multipart/alternative" Teil entfernen, da dies nicht Teil der Frage war. – steven

+0

Ich werde die +100 für Ihre Antwort anbieten, wenn Sie es ein bisschen verbessern, wie ich es erklärt habe. Ich hoffe, Sie bestätigen meine Absicht, eine Probe für alle drei Varianten zur Verfügung zu stellen. So hoffe ich, dass ich helfen kann, das Grenzmaterial zu verstehen, das durch Lesen der RFCs nicht so einfach zu bekommen ist. Vielen Dank. – steven