web-dev-qa-db-fra.com

Comment remplacer l'en-tête Message-ID de la fonction wp_mail?

J'ai une fonction de notification personnalisée pour notre éditeur de commentaires, qui préfère que tous les commentaires d'un article soient intégrés dans son client de messagerie. Pour ce faire, je crée un ID de message personnalisé pour le premier commentaire d'un article, puis je le configure comme En réponse à pour les futures notifications de commentaires.

Cela fonctionne dans une certaine mesure - je peux voir les en-têtes supplémentaires dans le client de messagerie - mais le premier message est en cours de création avec deux ID de message. En d’autres termes, celui que j’ai passé dans les en-têtes ne remplace PAS celui que Wordpress génère automatiquement. Par conséquent, le threading ne fonctionne pas.

Est-ce un bug avec Wordpress? Je ne veux pas avoir recours à la recherche de la fonction WP_mail et à l'édition du code principal; et je ne suis pas sûr que cela fonctionnerait même. Est-ce quelque chose de plus fondamental avec la fonction PHP Mail que je ne peux peut-être pas modifier?

$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";

Merci d'avance.

4
James Bruce

Vous pouvez filtrer l'objet $phpmailer. Quelque chose comme ça devrait faire l'affaire (non testé):

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';
}
5
fuxia

Toute personne cherchant simplement à mettre à jour le nomhôte à l'intérieur de la messageID, qui peut être nécessaire pour l'installation de Nginx. Wordpress documentation .

add_action('phpmailer_init', 'sender_message_id');

function sender_message_id(&$phpmailer) {
  $phpmailer->Hostname = 'domain.com';
}
0
Ricky Boyce