Make WordPress Core

Opened 15 months ago

Last modified 15 months ago

#23243 new defect (bug)

wp_mail() not working with "Name <email>" format in buggy PHP versions on Windows

Reported by: bbosh Owned by:
Milestone: Awaiting Review Priority: normal
Severity: minor Version: 3.5
Component: Mail Keywords:
Focuses: Cc:


As a result of ticket #17305, wp_mail() accepts the $to parameter in the format "Name <email@…>".

There exists a PHP bug in versions below 5.2.11 and in 5.3, on Windows. This bug occurs when addresses are passed to the PHP mail() function in the "Name <email>" format and prevents e-mails from being sent. I believe this bug in fixed in 5.3.1 and above. (see https://bugs.php.net/bug.php?id=28038)

I don't believe this affects any core functionality, but may affect some plugins which pass $to in the above format.

I tested in PHP 5.2.4 on Windows with the following code:

wp_mail("email@ext.com", "Test", "Test");
wp_mail("Name <email@ext.com>", "Test 2", "Test 2");

The first email is received; the second isn't. When removing error suppression from the mail() calls in class-phpmailer.php, the following warning is outputted:

Warning: mail() [function.mail]: SMTP server response: 501 <Name <email@…>>: "@" or "." expected after "Name" in C:\xampplite\htdocs\wp-includes\class-phpmailer.php on line 771

Change History (3)

comment:1 SergeyBiryukov15 months ago

  • Component changed from General to Mail

comment:2 iandunn15 months ago

  • Cc ian_dunn@… added

#23291 pushes any exceptions that PHPMailer throws to PHP's error_log. Since the bug was fixed in PHP two years ago, isn't triggered by core and only happens on Windows servers, then maybe the extra logging is enough?

If an actual workaround is desired, I would think it'd be more appropriate to do that upstream, rather than in WP.

comment:3 iandunn15 months ago

#23291 no longer triggers an entry in the PHP error log; instead it returns a WP_Error.

Note: See TracTickets for help on using tickets.