Archive for the ‘mail()’ tag
Bug in PHP 5.3.0’s mail() Funktion
[Edit: Der Bug wurde mit 5.3.2 behoben, siehe Changelog http://www.php.net/ChangeLog-5.php#5.3.2: Fixed bug #50907 (X-PHP-Originating-Script adding two new lines in *NIX). (Ilia)]
Vielleicht hat noch jemand von euch das Problem. Ziel war einfach nur, eine kleine Mail von meinem Mac OS X aus PHP heraus zu versenden. Dazu ist hier PHP 5.3.0 installiert, ebenso wie ein Apache und ein Postfix.
Das Script sieht unspektakulär aus:
$headers = 'From: source@mail.de' . "\n" . 'To: target@mail.de' . "\n" . 'Reply-To: source@mail.de' . "\n" . 'X-Mailer: PHP/' . phpversion(); mail('target@mail.de', 'testmail!', $message, $headers, '-fsource@mail.de');
In der php.ini ist folgendes eingestellt:
sendmail_path = /usr/sbin/sendmail -t -i
Das Problem ist dabei, dass die Emails nicht korrekt ankommen. Alle Header, die ich oben angegeben habe, stehen im Body der Email. Es gibt also ein Umbruchproblem, irgendwo ist einer zuviel.
Return-Path: <source@mail.de> Delivery-Date: Tue, 03 Nov 2009 14:39:05 +0100 Received: from server.de (server.de [111.111.17.10]) by mx.server.de with ESMTP id 0LxhS3-1M6JqE0zvv-016hU3 for source@mail.de; Tue, 03 Nov 2009 14:39:05 +0100 Received: from ip-18-.provider.de (ip-18-.provider.de [222.222.248.46]) by m.server.de with ESMTP id 0LjM2Z-1MTKv00Dgl-00d0Vo; Tue, 03 Nov 2009 14:39:05 +0100 Received: by ip-18-.provider.de (Postfix, from userid 1) id CF7181196C0; Tue, 03 Nov 2009 14:39:04 +0100 (CET) To: target@mail.de Subject: some subject X-PHP-Originating-Script: 501:ErrorController.php Message-Id: <0LjM2Z-1MTKffffgl-00d0Vo@m.server.de> Date: Tue, 03 Nov 2009 14:39:05 +0100 X-Provags-ID: V01U2FsdGVrf1+XTUgdYEhFFTVVw58w3JV/CwkzzZnpRBZbnSR Rtupv2Jro7gRSvDH8j3QVDjBuBuAra893YNAvSVu/TgVETcVIT Y+uvNPgthhI6VXtHYzoCA== X-PhishingScore: 0 tests= X-SpamScore: 2.9 tests= TVD_SPACE_RATIO Envelope-To: source@mail.de From: source@mail.de To: target@mail.de Reply-To: source@mail.de X-Mailer: PHP/5.3.0 Message-Id: <20091029555904.CF7181196C0@ip-18-.provider.de> Date: Tue, 03 Nov 2009 14:39:04 +0100 (CET) message here
Nach etwas rumprobieren, Suchmaschinen bedienen und genauerem Hingucken fällt einem das Problem auf:
PHP ergänzt die Header um einen Eintrag „X-PHP-Originating-Script“. Darin wird der Name des PHP-Scripts festgehalten, welches den mail()-Aufruf gemacht hat. Besonders interessant falls man sich einen fiesen Form-Mailer oder sowas eingefangen hat, und ihn nicht findet. Oder man hat andere Kunden mit ihren Projekten auf seinem Server, die Unfug treiben.
Dieser Header wird von PHP 5.3.0 mit einem „\r\n“ abgeschlossen, und danach folgen die anderen Header.
Da wir hier allerdings unter Mac OS X sind (sprich FreeBSD), wäre ein „\n“ besser. Das betriftt auch Linux etc.
Lösung des Problem ist also: Deaktivieren dieses Zusatzheaders in der php.ini:
mail.add_x_header = Off
Diese Option ist erst seit PHP 5.3.0 verfügbar. In meiner PHP-Version, die hier installiert ist, war das nämlich auf „On“ geschaltet. Im CVS von PHP ist der Bug berichtigt, aber eine 5.3.1 ist aktuell noch nicht released. Hier der Bug-Report, der damit zu tun hat.
Weitere Forenbeiträge zu dem Thema bei Nabble oder auf der Postfixbuch-Mailingliste.