ID: 48620 Updated by: il...@php.net Reported By: shahar dot e at zend dot com -Status: Open +Status: Closed Bug Type: Mail related Operating System: Mac OS X 10.5 PHP Version: 5.3.0RC4 New Comment:
This bug has been fixed in CVS. Snapshots of the sources are packaged every three hours; this change will be in the next snapshot. You can grab the snapshot at http://snaps.php.net/. Thank you for the report, and for helping us make PHP better. Previous Comments: ------------------------------------------------------------------------ [2009-06-20 19:39:31] shahar dot e at zend dot com I used this patch to fix it (not sure if it's the most suitable way): --- ext/standard/mail.c.orig 2009-06-20 22:25:10.000000000 +0300 +++ ext/standard/mail.c 2009-06-20 22:29:52.000000000 +0300 @@ -241,7 +241,10 @@ php_basename(tmp, strlen(tmp), NULL, 0,&f, &f_len TSRMLS_CC); if (headers != NULL) { - spprintf(&hdr, 0, "%s\r\nX-PHP-Originating-Script: %ld:%s\n", headers, php_getuid(), f); + spprintf(&hdr, 0, "%s%sX-PHP-Originating-Script: %ld:%s\n", + headers, + (headers[strlen(headers) - 1] == '\n' ? "" : "\r\n"), + php_getuid(), f); } else { spprintf(&hdr, 0, "X-PHP-Originating-Script: %ld:%s\n", php_getuid(), f); } ------------------------------------------------------------------------ [2009-06-20 17:49:14] shahar dot e at zend dot com Description: ------------ It is very possible for a developer to use code like in the attached reproduction code to send an e-mail. However, when mail.add_x_header is On, using this code will cause the X-PHP-Originating-Script to show in the message body instead of as a header. This is because mail() assumes the $headers parameter is a string which does not end with a trailing CRLF - while in practice it very well may be (it works well when mail.add_x_header is Off). Reproduce code: --------------- <?php $headers = array( 'X-Foo' => 'bar', 'From' => 'some-...@example.com', 'Priority' => 'Urgent' ); $hdrStr = ''; foreach($headers as $k => $v) { $hdrStr .= "$k: $v\r\n"; } mail('someone-e...@example.com', 'Testing add_x_header', 'This is a test', $hdrStr); Expected result: ---------------- Mail to look like: To: someone-e...@example.com Subject: Testing add_x_header X-Foo: bar From: some-...@example.com Priority: Urgent Date: Sat, 20 Jun 2009 20:37:34 +0300 (IDT) X-PHP-Originating-Script: 503:mailtest.php This is a test Actual result: -------------- To: someone-e...@example.com Subject: Testing add_x_header X-Foo: bar From: some-...@example.com Priority: Urgent Date: Sat, 20 Jun 2009 20:37:34 +0300 (IDT) X-PHP-Originating-Script: 503:mailtest.php This is a test * this is how I receive the e-mail in GMail - perhaps there is some header mangling but you get the point ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=48620&edit=1