PHPGangsta - Der praktische PHP Blog

PHP Blog von PHPGangsta


Archive for the ‘mail()’ tag

Bug in PHP 5.3.0’s mail() Funktion

with 4 comments

[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.

Written by Michael Kliewe

November 4th, 2009 at 12:21 pm