From: jordi at jcanals dot net
Operating system: Windows
PHP version: 4.3.6
PHP Bug Type: Mail related
Bug description: Sent incorrect RCPT TO commands to SMTP server
Description:
------------
In windows, and using an SMTP server, when you try to send a mail using
the mail function the SMTP transaction will fail if you include recipient
names.
When including any recipient header in the following format (wich follows
the RFC 2822), the mail function does not handle it properly:
To: User Name <address@example.com>
Cc: Other User <other@example.net>
Bcc: Third User <third@example.org>
Loking at the SMTP transaction, the PHP mail layer sends this RCPT
commands wich do not folow the SMTP standard stated on RFC 2821:
RCPT TO:<User Name <address@example.com>>
RCPT TO:<Other User <other@example.net>>
RCPT TO:<Third User <third@example.org>>
Fails always with this environments:
Tested on Windows XP, Apache 2.0.49, PHP 4.3.6 (Also in 4.3.4)
Tested also on Windows 2000, IIS, PHP 4.3.6
Tested Using SMTP servers on Linux with Exim and Sendmail.
Tested also using the default Windows 2000 SMTP server.
Reproduce code:
---------------
// SAMPLE 1:
$to_recipient = "User Name <address@example.com>";
$header = "Cc: Other User <other@example.net>\r\n";
$header .= "Bcc: Third User <third@example.org>\r\n";
mail($to_recipient, $subject, $body, $header);
// FAILS with SMTP errors for all three recipients.
SAMPLE 2:
$to_recipient = "address@example.com";
$header = "To: User Name <recipient@example.com>\r\n";
$header .= "Cc: Other User <other@example.net>\r\n";
$header .= "Bcc: Third User <third@example.org>\r\n";
mail($to_recipient, $subject, $body, $header);
FAILS on with SMTP error on the three recipients passed on the $header
field.
Expected result:
----------------
Expected that the mail layer exctracts only the mail address from
recipients to send the SMTP commands:
As seen on the RFC's 2821 and 2822, when sending a mail with the recipient
headers formed like above, it is expected the mail layer to extract ONLY
the email address to send the RCPT commands, and pass the headers without
any change in the DATA command during the SMTP transaction. Example of the
correct SMTP transaction for the above headers:
RCPT TO:<address@example.com>
RCPT TO:<other@example.net>
RCPT TO:<third@example.org>
DATA
To: User Name <address@example.com>
Cc: Other User <other@example.net>
Bcc: Third User <third@example.org>
Actual result:
--------------
You get that error for all recipients with the recipient name:
Warning: mail(): SMTP server response: 501 <SomeOne Name
<someone@example.com>>: "@" or "." expected after "SomeOne"
in
mail.class.php on line 333
This error is produced when the mail layer is sending a wrong formed RCPT
TO: command in the SMTP transaction.
--
Edit bug report at http://bugs.php.net/?id=28038&edit=1
--
Try a CVS snapshot (php4): http://bugs.php.net/fix.php?id=28038&r=trysnapshot4
Try a CVS snapshot (php5): http://bugs.php.net/fix.php?id=28038&r=trysnapshot5
Fixed in CVS: http://bugs.php.net/fix.php?id=28038&r=fixedcvs
Fixed in release: http://bugs.php.net/fix.php?id=28038&r=alreadyfixed
Need backtrace: http://bugs.php.net/fix.php?id=28038&r=needtrace
Need Reproduce Script: http://bugs.php.net/fix.php?id=28038&r=needscript
Try newer version: http://bugs.php.net/fix.php?id=28038&r=oldversion
Not developer issue: http://bugs.php.net/fix.php?id=28038&r=support
Expected behavior: http://bugs.php.net/fix.php?id=28038&r=notwrong
Not enough info: http://bugs.php.net/fix.php?id=28038&r=notenoughinfo
Submitted twice: http://bugs.php.net/fix.php?id=28038&r=submittedtwice
register_globals: http://bugs.php.net/fix.php?id=28038&r=globals
PHP 3 support discontinued: http://bugs.php.net/fix.php?id=28038&r=php3
Daylight Savings: http://bugs.php.net/fix.php?id=28038&r=dst
IIS Stability: http://bugs.php.net/fix.php?id=28038&r=isapi
Install GNU Sed: http://bugs.php.net/fix.php?id=28038&r=gnused
Floating point limitations: http://bugs.php.net/fix.php?id=28038&r=float