Unser schweizer Provider "Hostfactory" gibt uns auch wichtig Tipps:
Idealerweise haben Sie bisher Ihre via Script versendeten Nachrichten mit UTF-8 kodiert, um die grösstmögliche Kompatibilität von Umlauten, Sonderzeichen, etc. zu gewährleisten und Fehler in deren Anzeige zu vermeiden. Hierzu wird lediglich im Header der Nachricht die Angabe
- Content-Type: text/plain; charset=utf-8
verwendet.
Der typische Fallstrick hierbei ist jedoch der Betreff, welcher seinerseits bereits einen Header darstellt und ausschliesslich ASCII-Zeichen annimmt und interpretiert. Alle davon abweichenden Zeichen (Umlaute, Sonderzeichen, etc.) werden als nicht leserliche Symbole und Zeichen ausgegeben.
Ein inkorrekt formatierter Betreff wird zudem vom jeweils empfangenden (oder auch bereits vom sendenden) Mailserver sehr oft als Spam taxiert und nicht akzeptiert, resp. gar nicht erst versendet.
Hinweis:
Dies betrifft auch alle übrigen Header-Felder! Wenn Sie hier unbehandelte Umlaute oder Sonderzeichen ausserhalb des ASCII-Bereichs verwenden, führt dies zum selben Fehler.
Header Prüfung
Ihr Antispam-Filter unter Ihrem Hostfactory-Account erlaubt aus Sicherheitsgründen keine ausgehenden Nachrichten mit falsch kodierten Headern, solche Nachrichten werden daher nicht ausgeliefert.
Wenn Sie solches vermeiden möchten, müssen Sie stets dafür sorgen, dass Ihre via Script versendeten Nachrichten korrekt formatiert sind.
Verfahren Sie für den Betreff Ihrer Nachrichten daher gemäss folgendem Schema:
- =?<Zeichensatz>?<Encodierung>?<Encodierter-Text>?=
Ein Beispiel nach obigem Schema wäre:
- =?utf-8?B?Dies ist ein Betreff?=
Hinweis:
Die 'Encodierung' kann mit den beiden Flags 'B' oder 'Q' angegeben werden (ohne Anführungszeichen), die angegebene Encodierung muss dann auch für den zu encodierenden Text im Betreff verwendet werden. Das 'B' steht für eine Encodierung mit 'Base64', das 'Q' steht für 'Quoted Printable' (s. auch Base64 resp. Quoted Printable).
Den folgenden Beispiel-Code können Sie z. B. für Ihre Scripts entsprechend anpassen und verwenden:
- $empfaenger = 'info@beispiel.com';
- $betreff = 'Betreff mit Non-ASCII Zeichen: ó¿¡á';
- $text = 'Eine ganz normale Nachricht';
- $headers = 'From: test@beispiel.com'."\r\n";
- $headers .= 'Content-Type: text/plain; charset=utf-8'."\r\n";
- mail($empfaenger, '=?utf-8?B?'.base64_encode($betreff).'?=', $text, $headers);
Das Schema entspricht den Richtlinien unter RFC 1342 und ist die empfohlene Methode, um Nicht-ASCII Zeichen im Betreff zu repräsentieren und beteiligte Mailserver nicht zu 'verwirren'.
Die RFC-Richtlinie 6532 besagt, dass der Betreff auch nur UTF-8 kodiert sein darf, sofern dieser korrekt (!) formatiert ist.
Voraussetzung hierzu ist jedoch die Aktivierung von 'Extended SMTP' (SMTPUTF8), welche u.a. auch das Versenden von Nachrichten an internationalisierte Adressen erlaubt (z. B. 'Pelé@beispiel.com', '测试@测试.测试', etc.). Ihr SMTP-Server unter Hostfactory unterstützt diese Methode, wird diese jedoch von der Gegenstelle nicht ebenfalls unterstützt, werden die Zeichen nach wie vor unleserlich ausgegeben!
Bad Header Count
Immer mal wieder kommt es vor, dass Nachrichten durch unsere Outbound-Protection geblockt werden, aufgrund fehlerhafter Verwendung der PHP-Mailfunktion. Ein sog. "Bad Header Count" entsteht dann, wenn ein oder mehrere Header in einer Nachricht mehrfach verwendet werden, also wenn z. B. 'From'-, 'To'-, 'Subject'- oder andere Felder für die selbe Nachricht mehrfach definiert werden. Eine solche Nachricht entspricht nicht dem weltweiten Standard und wird deshalb nicht versendet. Vermeiden Sie daher zwingend die doppelte Verwendung von Headern, da solche Nachrichten am vorgesehenen Zielort nicht ankommen werden!
Wichtig:
Notieren Sie in Ihren Nachrichten auch stets einen 'Return-Path', wenn Sie Nachrichten via PHP versenden! Dieser stellt sicher, dass im Fehlerfall ein NDR (Non-Delivery-Report) an die angegebene Adresse zurückgesendet und dieser entsprechend ausgewertet werden kann. Sie können den Return-Path im Normalfall fogendermassen anfügen:
- $headers = "Return-Path: ihre@mailadresse.com\r\n";