HTML Mail von Outlook 2007 nur als "Nur-Text"-Mail erkannt
*jiriki*
- html
0 Edgar Ehritt0 *jiriki*
0 Der Martin
Versende ich eine automatisch generierte HTML-Mail durch dieses PHP-Script, wird eine Mail versand, die in Gmail, Web.de und einem Webinterface eines anderen Mailproviders richtig dargestellt wird.
In Outlook 2007 wird die "HTML-Mail"-Deklaration im Header bzw. Content ignoriert und "Nur-Text" ausgegeben: Die HTML-Tags werden nicht interpretiert. Zudem wird der letzte Header "Content-Type: multipart/related; boundary=0003255546b6117da7047a492fc7" als Textcontent mit ausgegeben. Verändere ich die Header-Reihenfolge, wird immer der letzte Header mit ausgegeben. Füge ich weitere Header hinzu, werden diese ebenfalls ausgegeben. Anders ausgedrückt werden immer die ersten beiden Header verdeckt, die anderen ausgegeben.
Quellcode:
---
$headers = "From: Alex <trash4valhalla@gmail.com>\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: multipart/related; boundary=0003255546b6117da7047a492fc7";
$message = "
--0003255546b6117da7047a492fc7\r\n
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"
\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">
<head>
<meta http-equiv=\"content-type\" content=\"text/html; charset=ISO-8859-1\" />
<title></title>
<style type=\"text/css\">
<!--
html, body {
font-family:arial,helvetica,tahoma,sans-serif;
font-size:12px;
background-color:#FFFFFF;
margin-top:0;
margin-bottom:0;
margin:0;
border:0;
outline:0;
padding:3px;
color:#333333;
}
-->
</style>
</head>
<body>
Servus Dude
</body>
</html>\r\n
--0003255546b6117da7047a492fc7\r\n";
$mailsent = mail("alex@email.com", "Testmail", $message, $headers);
---
Ich wäre für jeden Hinweis dankbar, wie ich Outlook 2007 dazu bringe, die Mail als HTML-Mail zu erkennen.
Viele Grüße
Hallo erstmal!
Versende ich eine automatisch generierte HTML-Mail durch dieses PHP-Script, wird eine Mail versand, die in Gmail, Web.de und einem Webinterface eines anderen Mailproviders richtig dargestellt wird.
In Outlook 2007 wird die "HTML-Mail"-Deklaration im Header bzw. Content ignoriert und "Nur-Text" ausgegeben: Die HTML-Tags werden nicht interpretiert. Zudem wird der letzte Header "Content-Type: multipart/related; boundary=0003255546b6117da7047a492fc7" als Textcontent mit ausgegeben. Verändere ich die Header-Reihenfolge, wird immer der letzte Header mit ausgegeben. Füge ich weitere Header hinzu, werden diese ebenfalls ausgegeben. Anders ausgedrückt werden immer die ersten beiden Header verdeckt, die anderen ausgegeben.
Speichere bitte eine Mail, die Du mit Outlook 2007 vom Server abgeholt hast, als lokale Datei ab, lade sie auf Deinen Webspace hoch und gib den URL dazu hier bekannt, damit man die Header sich genau ansehen kann. Einige Fehler, insbesondere was Wahl und Umsetzung des Mediatyps der Mail betrifft, sind auch ersichtlich. Daher ist wichtig zu wissen, ob die Mail nur als HTML-Dokument gesendet werden soll, oder ob Du dazu einen alternativen Klartext ebenso in der Mail versenden willst und ob auch Bilder innerhalb des HTML-Dokumentes angezeigt werden sollen.
Gruß aus Berlin!
eddi
Servus eddi,
Speichere bitte eine Mail, die Du mit Outlook 2007 vom Server abgeholt hast, als lokale Datei ab, lade sie auf Deinen Webspace hoch und gib den URL dazu hier bekannt, damit man die Header sich genau ansehen kann. Einige Fehler, insbesondere was Wahl und Umsetzung des Mediatyps der Mail betrifft, sind auch ersichtlich. Daher ist wichtig zu wissen, ob die Mail nur als HTML-Dokument gesendet werden soll, oder ob Du dazu einen alternativen Klartext ebenso in der Mail versenden willst und ob auch Bilder innerhalb des HTML-Dokumentes angezeigt werden sollen.
Also ich würde gerne eine HTML-Mail mit alternativem Klartext-Teil versenden. In die HTML-Mail soll zudem ein Header-Bild und ein Hintergrundbild eingebunden werden. Ich habe es nun immerhin geschafft, dass Outlook2007 die Mail als HTML-Mail erkennt. Neuer Quelltext hierzu ist:
---
$headers = "MIME-Version: 1.0
Subject: Testmail
From: Alex <test@web.de>
Cc: Testomate <testomate@web.de>, Weihnachtswichtel <wichtel@gmail.com>
Content-Type: multipart/related; boundary=001636c59763ff4b2e047a4922b5";
$message = "
--001636c59763ff4b2e047a4922b5
Content-Type: multipart/alternative; boundary=001636c59763ff4b29047a4922b4
--001636c59763ff4b29047a4922b4
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
Hey Dude,
Ecard für Dich: http://www.ecard.com.
Gr=FC=DFe, Alex
--001636c59763ff4b29047a4922b4
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
<b>Hey Dude,</b>
<p>Ecard für <a href=\"http://www.ecard.com\" target=\"_blank\">Dich</a>.</p>
Gr=FC=DFe, Alex
--001636c59763ff4b29047a4922b4--
--001636c59763ff4b2e047a4922b5--";
$mailsent = mail("tester@gmx.de", "Testmail", $message, $headers);
---
Was nun weder in Gmail noch in Outlook2007 funktioniert in der HTML-Version, ist der Link auf ecard.com. Witzigerweise steht im Quellcode der von Outlook abgerufenen Mail plötzlich: <a href=ttp://www.ecard.com" .. Kein Wunder, dass der Link nicht mehr funktioniert.
Hättest du ein Beispieltemplate für eine funltionierende komplette HTML-Mail, die auch in Outlook2007 richtig angezeigt wird?
Danke und Grüße
Hi,
Also ich würde gerne eine HTML-Mail mit alternativem Klartext-Teil versenden.
hast du ja nun. :-)
$message = "
--001636c59763ff4b2e047a4922b5
Content-Type: multipart/alternative; boundary=001636c59763ff4b29047a4922b4--001636c59763ff4b29047a4922b4
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
Ah, jetzt ist es besser, nun ist auch der Content-Type für die einzelnen Parts da. Und multipart/alternative für die Gesamtnachricht ist dann auch richtig, wenn die einzelnen Teile tatsächlich alternativ sind.
<p>Ecard für <a href="http://www.ecard.com" target="_blank">Dich</a>.</p>
Gr=FC=DFe, Alex
Was nun weder in Gmail noch in Outlook2007 funktioniert in der HTML-Version, ist der Link auf ecard.com. Witzigerweise steht im Quellcode der von Outlook abgerufenen Mail plötzlich: <a href=ttp://www.ecard.com" .. Kein Wunder, dass der Link nicht mehr funktioniert.
Richtig, kein Wunder. Du hast als Transfer-Encoding "quoted-printable" vereinbart, das heißt, alle Zeichen, die in ASCII nicht darstellbar sind, werden mit ihrem Hex-Code und einem vorangestellten Gleichheitszeichen dargestellt. Das hat natürlich zur Konsequenz, dass das "=" als Escape-Zeichen selbst auch escapet werden muss. Richtig wäre also:
<a href="http://www.ecard.com" target=3D"_blank">Dich</a>
Dann klappt's auch mit dem Nachb^WLink. ;-)
Ach so, das mit dem eingebetteten Bild ...
Ja, da brauchst du zunächst mal noch eine Verschachtelungsebene (schematisch):
Content-Type: multipart/alternative; boundary="boundary(1)"
--boundary(1)
Content-Type: text/plain
(Text)
--boundary(1)
Content-Type: multipart/related; boundary="boundary(2)"
--boundary(2)
Content-Type: text/html
(HTML)
--boundary(2)
Content-Type: image/*
Content-ID: <image-identifier>
(Bild, üblicherweise base64-codiert)
--boundary(2)--
--boundary(1)--
Die Einrückung darf im Mail-Quelltext natürlich nicht sein (Header müssen am Zeilenanfang stehen); ich hab's hier nur gemacht, um die Verschachtelung besser zu zeigen. Beachte außerdem, dass du zwei verschiedene Boundaries brauchst.
Das Bild bekommt dann einen frei wählbaren Identifier, wie oben angedeutet, und wird im HTML-Quellcode mit src="cid:image-identifier" referenziert.
So long,
Martin
Hallo Martin,
$message = "
--001636c59763ff4b2e047a4922b5
Content-Type: multipart/alternative; boundary=001636c59763ff4b29047a4922b4--001636c59763ff4b29047a4922b4
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printableAh, jetzt ist es besser, nun ist auch der Content-Type für die einzelnen Parts da. Und multipart/alternative für die Gesamtnachricht ist dann auch richtig, wenn die einzelnen Teile tatsächlich alternativ sind.
Ohne es jetzt ausprobiert zu haben, habe ich bei der Reihenfolge der Schachtelung meine Bedenken, da die Bilder, die mitgesendet werden sollen, außerhalb des in sich abgeschlossenen Teils "multipart/alternative" liegen würden. In Deinem schematischen Beispiel hast Du es ja auch anders dargestellt.
Gruß aus Berlin!
eddi
Hallo Eddi,
Ah, jetzt ist es besser, nun ist auch der Content-Type für die einzelnen Parts da. Und multipart/alternative für die Gesamtnachricht ist dann auch richtig, wenn die einzelnen Teile tatsächlich alternativ sind.
Ohne es jetzt ausprobiert zu haben, ...
ich fürchte, du hast vor allem den Überblick verloren. ;-)
Denn im zweiten Beispiel von jiriki sind noch gar keine Bilder inbegriffen, die hat er/sie sich erst für eine weitere Ausbaustufe gewünscht.
habe ich bei der Reihenfolge der Schachtelung meine Bedenken, da die Bilder, die mitgesendet werden sollen, außerhalb des in sich abgeschlossenen Teils "multipart/alternative" liegen würden.
Daher kann diese Beobachtung nur ein Fehlschluss sein.
In Deinem schematischen Beispiel hast Du es ja auch anders dargestellt.
Eben. Aber da ist das Bild, das sich zum HTML-Teil gesellt, noch ein neuer Schritt, der eine um eine Stufe komplexere Struktur (multipart/related als Sub-Part von multipart/alternative) erfordert, wie ich abschließend skizziert habe.
Ciao,
Martin
Re:
ich fürchte, du hast vor allem den Überblick verloren. ;-)
Nein, Martin, lies Dir auf meine Frage hin, die umzusetzenden Vorstellungen durch. Es sollen Bilder im HTML angezeigt werden. Warum also nicht gleich darauf hinweisen, dass bereits der letztgepostete Ansatz fürs Vorhaben formal fehlerhaft ist?
Gruß aus Berlin!
eddi
Re:
Speichere bitte eine Mail, die Du mit Outlook 2007 vom Server abgeholt hast, als lokale Datei ab, lade sie auf Deinen Webspace hoch und gib den URL dazu hier bekannt, damit man die Header sich genau ansehen kann. Einige Fehler, insbesondere was Wahl und Umsetzung des Mediatyps der Mail betrifft, sind auch ersichtlich. Daher ist wichtig zu wissen, ob die Mail nur als HTML-Dokument gesendet werden soll, oder ob Du dazu einen alternativen Klartext ebenso in der Mail versenden willst und ob auch Bilder innerhalb des HTML-Dokumentes angezeigt werden sollen.
Also ich würde gerne eine HTML-Mail mit alternativem Klartext-Teil versenden. In die HTML-Mail soll zudem ein Header-Bild und ein Hintergrundbild eingebunden werden.
Einem anderem Fragenden habe ich dazu mal einiges geschrieben, um ihm die Zusammenhänge klar zu machen. Leider hat die Forumsmoderation den entsprechenden Teil, der Fehlerhaft war, nicht gelöscht sondern empfand es wohl für wichtiger, mich an anderer Stelle wegen meiner Schreibfehler aufziehen, sodass Du Dir aus den Beiträgen bitte nur </archiv/2009/9/t190865/#m1272394> und </archiv/2009/9/t190865/#m1272490> ansehen solltest, was etwas unübersichtlich geworden ist ;(. Da sind die für Dein Vorhaben wichtigen Zusammenhänge und wie Du später Bilder innerhalb des HTML-Teils referenzieren musst, erläutert.
$headers = "MIME-Version: 1.0
Subject: Testmail
From: Alex test@web.de
Cc: Testomate testomate@web.de, Weihnachtswichtel wichtel@gmail.com
Content-Type: multipart/related; boundary=001636c59763ff4b2e047a4922b5";$message = "
--001636c59763ff4b2e047a4922b5
Content-Type: multipart/alternative; boundary=001636c59763ff4b29047a4922b4
Die Mediatypen sind nach meiner Auffassung nicht korrekt verschachtelt. Was Du willst, ist entweder -Text- oder -HTML mit Bild-. Daraus ergibt sich folgende Struktur:
- multipart/related | |- text/html |
- image/gif--001636c59763ff4b29047a4922b4
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
Wenn Du das Transfer-Encoding weglässt, brauchst Du das HTML oder wie hier den Klartext nicht weiter anpassen.
Gruß aus Berlin!
eddi
Hallo,
Versende ich eine automatisch generierte HTML-Mail durch dieses PHP-Script, wird eine Mail versand, die in Gmail, Web.de und einem Webinterface eines anderen Mailproviders richtig dargestellt wird.
aber vermutlich nur deshalb, weil innerhalb eines solchen Notzugangs über ein Webmail-Interface sowieso der Defaultkontext "HTML" gilt.
In Outlook 2007 wird die "HTML-Mail"-Deklaration im Header bzw. Content ignoriert und "Nur-Text" ausgegeben:
Du hast keine "HTML-Mail"-Deklaration, und für den *Inhalt* der Nachricht darf sich ein Mailclient nicht interessieren, um zu entscheiden, wie er darzustellen ist. Da muss ich Outlook ausnahmsweise Recht geben; das würde ein richtiger Mailclient auch nicht anders machen.
Nur in einem Punkt macht Outlook anscheinend Unsinn: Nach dem von dir geposteten Quelltext dürften keine Headerzeilen als Nachrichtentext ausgegeben werden, es sei denn, du hast irrtümlich eine Headerzeile mit *zwei* Zeilenumbrüchen abgeschlossen.
Quellcode:
Wenn das der vollständige Quellcode ist, mit dem die Nachricht generiert wird, dann ist die resultierende Nachricht tatsächlich fehlerhaft.
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: multipart/related; boundary=0003255546b6117da7047a492fc7";
Wieso deklarierst du die Mailnachricht als multipart/*, wenn sie dann doch nur aus *einem* Teil besteht? Der MIME-Type multipart/related bedeutet, dass die Nachricht mehrere Teile enthält ("multipart"), die miteinander in Beziehung stehen ("related"). Es ist kein Verstoß gegen die Regeln, eine multipart-Nachricht mit nur einem Teil zu generieren, aber er ist sinnlos.
$message = "
--0003255546b6117da7047a492fc7\r\n<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
Stop, stop! Wo bleiben die Header für diesen Part? Da fehlt mindestens ein "Content-Type: text/html" plus Angabe der Zeichencodierung.
--0003255546b6117da7047a492fc7\r\n";
Und der letzte Trenner wird am Zeilenende mit zwei zusätzlichen Minuszeichen "--" ergänzt.
Ich wäre für jeden Hinweis dankbar, wie ich Outlook 2007 dazu bringe, die Mail als HTML-Mail zu erkennen.
Das Wichtigste ist der Content-Type-Header, der den Nachrichteninhalt als HTML ausweist.
So long,
Martin