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.
You can filter the
$phpmailer
object. Something like this should do the trick (not tested):Anyone looking to just update the hostname inside the
messageID
, which may be needed for Nginx setup. WordPress documentation.I think I found the solution to the initial problem.
You must, of course, use the phpmailer_init action to change the message-ID property of object phpmailer (used by wp_mail function). Thanks to Fuxia for the answer.
It is also necessary to respect message-ID format in accordance with the rfc5322 section-3.6.4 otherwise your new message-ID will be rejected (consult here the source file of phpmailer where the message-ID is setted).
Here is the correct format of a message-ID :
<leftpart@rightpart>
including bracketsHere is the code tested that works:
I hope it will help