Edit report at https://bugs.php.net/bug.php?id=73485&edit=1
ID: 73485
Comment by: mattcoz at yahoo dot com
Reported by: sherwoodsports at gmail dot com
Summary: mail() adds a lone CR or LF
Status: Analyzed
Type: Bug
Package: Mail related
Operating System: All
PHP Version: 7.0.X
Block user comment: N
Private report: N
New Comment:
I'm running Windows, so the MTA is not an issue. Also, I have no problem overriding the from
address. I think I found where the problem might really be though. My server had the
mail.add_x_header preference set to On for some reason. When I switch it to Off I no longer get the
space before the rest of my headers. I'll open a new bug report for this specific issue and
leave it Off on my server because I really don't need it.
Previous Comments:
------------------------------------------------------------------------
[2016-11-12 07:02:21] rasmus@php.net
I don't think this is PHP doing this. At least not directly. Which MTA are you using? The first
thing to understand here is that by default PHP just invokes an external MTA to send an email with
the mail() function on non-Windows machines. The program that is run is defined by your
sendmail_path ini setting. This also means we can override it to examine what exactly PHP is sending
to the MTA program.
Here is a test. Create this trivial PHP program:
#!/usr/local/bin/php
<?php
file_put_contents("/tmp/test.log", file_get_contents("php://stdin"),
FILE_APPEND);
I called mine /home/rasmus/sm and I made it executable (chmod +x ./sm)
Then I tried your example script of:
<?php
mail("to@email.com", "Subject", "Message", "From:
from@email.com");
I ran it like this:
php -d sendmail_path="/home/rasmus/sm" m
The output I see in /tmp/test.log is:
To: to@email.com
Subject: Subject
From: from@email.com
Message
What I think is happening here, at least for mattcoz at yahoo dot com is that the user invoking the
MTA is not conifgured to be a trusted user and as such is not allowed to override the From address.
The MTA inserts the space in front of it and adds its own From line.
For sherwoodsports at gmail dot com, what is your mail() line that is producing that error? As you
can see from my minimal test it doesn't appear that PHP is inserting an extra cr-lf in the
headers. Again, it is likely some sort of interaction with your MTA.
------------------------------------------------------------------------
[2016-11-11 17:40:43] mattcoz at yahoo dot com
I think this is the same as my issue. There seems to be an extra character before the additional
headers. For example:
mail("to@email.com", "Subject", "Message", "From:
from@email.com");
To: <to@email.com>
X-PHP-Originating-Script: 0:test.php
From: from@email.com
From: <from@email.com>
An additional From header is added and this causes it to be blocked when sent to gmail addresses. On
the other hand, if I put a dummy header before it:
mail("to@email.com", "Subject", "Message", "X-PHP-Fix: x\r\nFrom:
from@email.com");
To: <to@email.com>
X-PHP-Originating-Script: 0:test.php
X-PHP-Fix: x
From: <from@email.com>
This is sent successfully to gmail addresses. My guess is that this is the lone CR or LF that is
causing his emails to fail. I have one server running 7.0.10 that is affected and one running 5.3.13
that is not affected, which matches his experience.
------------------------------------------------------------------------
[2016-11-10 15:02:22] sherwoodsports at gmail dot com
Further research shows others having no problem with PHP 5.6.
Changing affected PHP version to 7.0.X.
------------------------------------------------------------------------
[2016-11-10 02:22:15] sherwoodsports at gmail dot com
Description:
------------
Mail sent with the mail() function in PHP 7.0.9 or 7.0.11 results in a 550 error from mail servers
that does not manifest in mails sent with the mail() function in PHP 5.3.24.
The situation results in the receiving mail server to throw the following error during the DATA
transmission of the mail message:
550+5.6.0+Lone+CR+or+LF+in+headers+(see+RFC2822+section+2.2)
SMTP servers vary as it is a configuration issue to block incoming mail that exhibits this issue.
The fix is likely to compare output of mail() for 5.3.24 vs. mail for 7.0.9 or 7.0.11 and resolve
the "extra" CR or LF character addition.
Expected result:
----------------
Sending from 5.3.24 (to server which identifies issue):
2016-11-10 00:11:35 173.203.187.1 OutboundConnectionResponse SMTPSVC1 xxxx - 25 - -
220+mx1.emailsrvr.com+ESMTP+-+VA+Code+Section+18.2-152.3:1+forbids+sending+spam+through+this+system
0 0 99 0 16 SMTP - - - -
2016-11-10 00:11:35 173.203.187.1 OutboundConnectionCommand SMTPSVC1 xxxx - 25 EHLO - xxxx 0 0 4 0
16 SMTP - - - -
2016-11-10 00:11:35 173.203.187.1 OutboundConnectionResponse SMTPSVC1 xxxx - 25 - -
250-smtp5.gate.iad3a.rsapps.net+says+EHLO+to+xxx.xxx.xxx.xxx:60802 0 0 65 0 47 SMTP - - - -
2016-11-10 00:11:35 173.203.187.1 OutboundConnectionCommand SMTPSVC1 xxxx - 25 MAIL -
FROM:<name@domain.com>+SIZE=740 0 0 4 0 47 SMTP - - - -
2016-11-10 00:11:35 173.203.187.1 OutboundConnectionResponse SMTPSVC1 xxxx - 25 - - 250+2.1.0+Ok 0 0
12 0 172 SMTP - - - -
2016-11-10 00:11:35 173.203.187.1 OutboundConnectionCommand SMTPSVC1 xxxx - 25 RCPT -
TO:<sendtoname@sendtodomain.com> 0 0 4 0 172 SMTP - - - -
2016-11-10 00:11:35 173.203.187.1 OutboundConnectionResponse SMTPSVC1 xxxx - 25 - - 250+2.1.5+Ok 0 0
12 0 219 SMTP - - - -
2016-11-10 00:11:35 173.203.187.1 OutboundConnectionCommand SMTPSVC1 xxxx - 25 DATA - - 0 0 4 0 219
SMTP - - - -
2016-11-10 00:11:35 173.203.187.1 OutboundConnectionResponse SMTPSVC1 xxxx - 25 - -
354+3.0.0+continue.++finished+with+"\r\n.\r\n" 0 0 46 0 250 SMTP - - - -
2016-11-10 00:11:35 173.203.187.1 OutboundConnectionResponse SMTPSVC1 xxxx - 25 - -
250+2.0.0+Ok:+queued+as+D4/38-19322-24BB3285 0 0 44 0 468 SMTP - - - -
2016-11-10 00:11:35 173.203.187.1 OutboundConnectionCommand SMTPSVC1 xxxx - 25 QUIT - - 0 0 4 0 468
SMTP - - - -
2016-11-10 00:11:35 173.203.187.1 OutboundConnectionResponse SMTPSVC1 xxxx - 25 - -
221+2.3.0+smtp5.gate.iad3a.rsapps.net+closing+connection 0 0 56 0 484 SMTP - - - -
Actual result:
--------------
Sending from 7.0.11 (to server which identifies issue):
2016-11-10 00:00:00 173.203.187.1 OutboundConnectionResponse SMTPSVC1 xxxx - 25 - -
220+mx1.emailsrvr.com+ESMTP+-+VA+Code+Section+18.2-152.3:1+forbids+sending+spam+through+this+system
0 0 99 0 16 SMTP - - - -
2016-11-10 00:00:00 173.203.187.1 OutboundConnectionCommand SMTPSVC1 xxxx - 25 EHLO - xxxx 0 0 4 0
16 SMTP - - - -
2016-11-10 00:00:00 173.203.187.1 OutboundConnectionResponse SMTPSVC1 xxxx - 25 - -
250-smtp52.gate.iad3a.rsapps.net+says+EHLO+to+xxx.xxx.xxx.xxx:60785 0 0 66 0 47 SMTP - - - -
2016-11-10 00:00:00 173.203.187.1 OutboundConnectionCommand SMTPSVC1 xxxx - 25 MAIL -
FROM:<name@domain.com>+SIZE=743 0 0 4 0 47 SMTP - - - -
2016-11-10 00:00:00 173.203.187.1 OutboundConnectionResponse SMTPSVC1 xxxx - 25 - - 250+2.1.0+Ok 0 0
12 0 78 SMTP - - - -
2016-11-10 00:00:00 173.203.187.1 OutboundConnectionCommand SMTPSVC1 xxxx - 25 RCPT -
TO:<sendtoname@sendtodomain.com> 0 0 4 0 78 SMTP - - - -
2016-11-10 00:00:00 173.203.187.1 OutboundConnectionResponse SMTPSVC1 xxxx - 25 - - 250+2.1.5+Ok 0 0
12 0 140 SMTP - - - -
2016-11-10 00:00:00 173.203.187.1 OutboundConnectionCommand SMTPSVC1 xxxx - 25 DATA - - 0 0 4 0 140
SMTP - - - -
2016-11-10 00:00:00 173.203.187.1 OutboundConnectionResponse SMTPSVC1 xxxx - 25 - -
354+3.0.0+continue.++finished+with+"\r\n.\r\n" 0 0 46 0 156 SMTP - - - -
2016-11-10 00:00:00 173.203.187.1 OutboundConnectionResponse SMTPSVC1 xxxx - 25 - -
550+5.6.0+Lone+CR+or+LF+in+headers+(see+RFC2822+section+2.2) 0 0 60 0 172 SMTP - - - -
2016-11-10 00:00:00 173.203.187.1 OutboundConnectionCommand SMTPSVC1 xxxx - 25 QUIT - - 0 0 4 0 187
SMTP - - - -
2016-11-10 00:00:00 173.203.187.1 OutboundConnectionResponse SMTPSVC1 xxxx - 25 - -
221+2.3.0+smtp52.gate.iad3a.rsapps.net+closing+connection 0 0 57 0 203 SMTP - - - -
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=73485&edit=1