How do I override the Message-ID header of wp_mail function?

I have a custom notification function for our comments editor, who prefers to have all comments from one article threaded together in her email client. To achieve this, I’m creating a custom message-ID for the first comment on an article, then setting that as the In-Reply-To for future comment notifications.

This is working to some extent – I can see the additional headers in the mail client – however, the first message is being created with TWO Message-IDs. In other words, the one I passed into the headers is NOT overriding the one WordPress is autogenerating. Therefore, the threading doesn’t work.

Is this a bug with WordPress? I don’t want to resort to hunting down the actual WP_mail function and editing core code; and I’m not sure that would even work. Is this something more fundamental with PHP Mail function that I can’t change perhaps?

$messageIDtoCreate = $post->ID.".".time(); // post ID, and current timestamp
add_post_meta( $post->ID, 'messageID', $messageIDtoCreate);
// add to the email headers
$message_headers .= "Message-ID: <".$messageIDtoCreate."@test.com>\n";

Thanks in advance.

3 s
3

You can filter the $phpmailer object. Something like this should do the trick (not tested):

add_action( 'phpmailer_init', 'wpse_52555_msg_id' );

function wpse_52555_msg_id( &$phpmailer )
{
    $msg_id = get_post_meta( get_the_ID(), 'messageID', TRUE );
    '' !== $msg_id and $phpmailer->MessageID = $msg_id . '@test.com';
}

Leave a Comment