WordPress.org

Make WordPress Core

Opened 3 months ago

Last modified 7 weeks ago

#46217 new defect (bug)

wp_mail() not sending messages on PHP7.3.x

Reported by: whatevs Owned by:
Milestone: Awaiting Review Priority: normal
Severity: major Version: 5.0.3
Component: Mail Keywords: needs-testing
Focuses: Cc:

Description

Hi,

I believe that this is a bug but my PHP-fu is not yet the belt color needed to further debug and fix this.
I have tested this behavior on WordPress 5.0.3 and GitHub sources from 2019-02-07, on FreeBSD and Linux Ubuntu 18.04, with PHP 7.3.1.
PHP versions 7.2 and older work as expected.

While PHP's mail() sends e-mails flawlessly, there are no attempts to open connection to a SMTP server when using wp_mail().

This issue covers all WordPress e-mails including the initial "New WordPress Site" message. Example code, working on PHP 7.2 but not on 7.3.

<?php
require('./wp-config.php');
$headers = 'From: whatevs <tester@proper-and-existing-domain.net>' . "\r\n";
wp_mail('something@proper-and-existing-domain.com','wp mail test','test test test', $headers );

The above example works with PHP 7.3 when "wp_mail" is replaced with "mail". 3rd party PHPmailer also works on PHP 7.3 with no issues.

Upon testing this behavior with tcpdump I can see that with PHP 7.2, WordPress opens a connection to 127.0.0.1:25 and tries to send the message. With PHP 7.3 there are no attempts to establish such connection on lo interface nor any other.

The following change results in: "Invalid address: (setFrom) tester@…"

--- wp-includes/pluggable.php	2019-02-08 15:37:38.459579000 +0100
+++ wp-includes/pluggable.php-debug	2019-02-08 15:37:29.683718000 +0100
@@ -364,7 +364,8 @@
 			$mail_error_data['phpmailer_exception_code'] = $e->getCode();

 			/** This filter is documented in wp-includes/pluggable.php */
-			do_action( 'wp_mail_failed', new WP_Error( 'wp_mail_failed', $e->getMessage(), $mail_error_data ) );
+			//do_action( 'wp_mail_failed', new WP_Error( 'wp_mail_failed', $e->getMessage(), $mail_error_data ) );
+			print('DEBUG '.$e->getMessage().' DEBUG');
 			return false;
 		}

Change History (2)

#1 @techsurgeons
3 months ago

We're seeing this too. Haven't dug in to try and find the specific change yet.

#2 @stefahn
7 weeks ago

  • Severity changed from normal to major

This affects the Divi contact form for example. It does not send a mail to the admin after a visitor filled out the form.

The problem is: nobody gets an error message. So the visitor thinks the message is delivered but it is not. And the admin does not see that there is something wrong (even in php_error.log I didn't see anything).

I thus changed the severity to "major".

Note: See TracTickets for help on using tickets.