Edgar Ehritt: UTF-8 mail SMTP

Beitrag lesen

Hallo Michael,

[code lang=php]
$Header .= "\n";

das mit den Zeilenumbrüchen im Kontext eines Mailheader ist bei PHP immer so eine Sache. "\n" kann gutgehen, muss es aber nicht. Auf *NIX-Systemen sucht sich PHP beim Kompilieren die jeweiligen C-Headerdateien des vorinstallierten sendmail-Programms. Wie es unter Windows aussieht weiß ich nicht.
 So kann "\n" durch das sendmail-Programm unberührt bleiben, aber auch zu "\r\n" umgewandelt werden. Ich merke das nur an, falls Du dieses Script man portieren willst und feststellst, es läuft auf einem anderen System nicht sorgenfrei.

$Header .= "MIME-Version: 1.0\n";
$Header .= "Content-Type: multipart/mixed; boundary=$Trenner\n";

Diesen Content-Type benutzt Du jedenfalls keinesfalls, soweit aus Deinem Posting hervorgeht. multipart/mixed wird dazu genutzt um eine Nachricht mit Anhängen auszuzeichnen. Wahrscheinlich willst Du Content-Type text/plain verwenden. Der wiederum benötigt dann auch keine boundary. Dieser damit ausgezeichnete Wert (bei Dir "$Trenner") wird als unikate Zeichenkette genutzt, um die einzelnen Teile einer Nachricht für das Mailprogramm anzugeben. Dieses ist z. B. für multipart/mixed oder auch multipart/alternative wichtig. Überdenke also, ob Du auf diese (für mich eher überflüssig-falsche) Angabe nicht ganz verzichtest

$Header .= "\n";
$Header .= "Content-Type: text/plain; charset=UTF-8";  //UTF-8 sorgt dafür, dass die umlaute richtig angezeigt werden
$Header .= "\n";
$Header .= "Content-Transfer-Encoding: 8bit";

Diese Angabe ist eigentlich den Mailservern vorbehalten. Mails wurden, als das SMT-Protokoll verfasst wurde standardmäßig mit 7 Bit durch die Leitungen gejagt. Man könnte spötteln, dass erst später ein kluger Kopf darauf aufmerksam wurde, dass eben doch nicht alle auf der Welt Engländer sind.
8 Bit decken aber nicht annähernd den Zeichenvorrat von UTF-8 ab. Ich hoffe, dass ist Dir soweit auch klar. Dieser Header hat, so wie sein Name es auch aussagt, nur mit dem Transfer der Nachricht zutun. Jedenfalls ist es richtig, dass hier charset, wie auch in HTTP, für die gewünschte Anzeige sorgt. ;)

Gruß aus Berlin!
eddi

--
Ab einem gewissen Erkenntnisstand ist die Versuchung wohl zu groß, in diesem und seinen begleitenden Errungenschaften zu verharren.
Das nenne ich Aufblick zu den Stufen des Tempels von der geistigen Gosse aus!