WordPress Mail Routed via Postfix SMTP Relays

By default, the WordPress wp_mail function will not set the actual sender for sendmail and mail backends. This means that the Postfix relay will set the sender to the default $domain instead of the actual sender. Which, in turn, means that when using relay maps (sender_dependent_relayhost_maps) to map senders to correct SMTP relays none of them is matched because of the sender is not set correctly…

wpmail

Fortunately, the mailer class used by WordPress, PHPMailer knows how to correctly specify the sender via the chosen backend (which in WordPress is the mail backend). By setting the Sender property of the mailer we’re able to have Postfix identify the sender correctly.

The wp_mail function is both pluggable and allows the mailer to be configured before sending by setting the Sender parameter to its From parameter.

add_action( 'phpmailer_init', function( &$phpmailer ) {
    $phpmailer->Sender = $phpmailer->From;
} );

This will allow Postfix to correctly map the sender and apply all the relaying that is necessary.

Why isn’t this being set in wp_mail to begin with? Simply because it “can be changed”: ticket #6861, even if it appears to be a non-sane default behavior resulting in undelivered mail and mail being caught by spam filters. Of course this is being worked on in ticket #18792. A plausible explanation by Otto lies here, which states that WordPress depends on a potentially non-existent e-mail account [email protected]. This is true, but this will result in a mismatch between the actual sender and the mail headers, which can result in spam filtering and non-delivery.

So, overall, wp_mail is broken by default and needs specific configuration when setting WordPress up.