PHP mail() – Header-Fehler in aktuellen Versionen

„Das hat aber früher funktioniert“! Exakt das dachte ich mir, als nach einem PHP-Update ein kleines „Aushilfsscript“ seinen Dienst verweigerte. Das Script nimmt eine fertige E-Mail, entfernt einige Header, welche das Quellsystem nicht Standardkonform einbringt, und sendet die gesäuberte Mail weiter. Um unnötiges Parsing zu vermeiden ging die komplette Mail in den Header.

$headers[] = 'From: Test <test@adlerweb.info>';
$headers[] = 'Cc: Test2 <test2@adlerweb.info>';
$headers[] = 'X-cleaned: cleaned';
//[…]
$headers[] = '  boundary="'.$boundary.'"';

//Neue Header und Content zusammenführen
$content = implode("\r\n", $headers)."\r\n\r\n".'-----'.implode('-----',$content);

//Mailversand
$check = mail($receiver, NULL, NULL, $content);

Nicht schön, da aber nur ersetzt/ergänzt wird muss nicht bei jeder Änderung der Quelle eine Anpassung erfolgen um Content und Header sauber zu trennen. Leider ist seit den letzten Versionen (vermutlich 5.4.43/5.5.26) diese Anwendung nicht mehr erlaubt. Hat man zwei Newlines (\r\n\r\n – genutzt zur Content-Trennung) im Header bricht PHP mit einer Fehlermeldung ab. Das Ganze soll dazu dienen Personen zu schützen, welche Fremddaten aus unsicheren Quellen ohne Eingabevalidierung nutzen und so ihre Anwendung verwundbar machen. Leider trifft es aber eben auch solche Anwendungen wie meine, was gerade bei solchen minor-Versions etwas unschön ist. Nunja, mein Script spricht nun direkt SMTP mit dem zuständigen Mailserver und umgeht so die PHP-mail()-Funktion. Problem solved.

Related:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert