Is there a conditional check I can run for phpmailer_init
or a wp_mail
parameter that let’s me apply my custom phpmailer_init
SMTP settings only on specific wp_mail
actions or does phpmailer_init
always run sitewide?
1 Answer
phpmailer_init
will always fire for every wp_mail()
call – however, you can hook/unhook it conditionally like so:
function wpse_224496_phpmailer_init( $phpmailer ) {
// SMTP setup
// Always remove self at the end
remove_action( 'phpmailer_init', __function__ );
}
function wpse_224496_wp_mail( $mail ) {
// Example: only SMTP for emails addressed to foo@example.com
if ( $mail['to'] === 'foo@example.com' )
add_action( 'phpmailer_init', 'wpse_224496_phpmailer_init' );
// Example: only SMTP for subject "Foo"
if ( $mail['subject'] === 'Foo' )
add_action( 'phpmailer_init', 'wpse_224496_phpmailer_init' );
// Other properties
$mail['message'];
$mail['headers']; // Could be string or array
$mail['attachments']; // Could be string or array
return $mail;
}
add_filter( 'wp_mail', 'wpse_224496_wp_mail' );