wake-up-neo.net

Wie überschreibe ich den Message-ID-Header der Funktion wp_mail?

Ich habe eine benutzerdefinierte Benachrichtigungsfunktion für unseren Kommentar-Editor, der es vorzieht, alle Kommentare eines Artikels in seinem E-Mail-Client zusammenzufassen. Um dies zu erreichen, erstelle ich eine benutzerdefinierte Nachrichten-ID für den ersten Kommentar zu einem Artikel und setze diese als Antwort für zukünftige Kommentarbenachrichtigungen.

Dies funktioniert bis zu einem gewissen Grad - ich kann die zusätzlichen Header im Mail-Client sehen - jedoch wird die erste Nachricht mit ZWEI Nachrichten-IDs erstellt. Mit anderen Worten, das, was ich in die Header eingegeben habe, überschreibt NICHT das, was Wordpress automatisch generiert. Daher funktioniert das Threading nicht.

Ist das ein Fehler mit Wordpress? Ich möchte nicht darauf zurückgreifen, die eigentliche WP_mail-Funktion aufzuspüren und den Kerncode zu bearbeiten. und ich bin mir nicht sicher, ob das überhaupt funktionieren würde. Ist dies etwas grundlegenderes mit der PHP Mail-Funktion, das ich vielleicht nicht ändern kann?

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

Danke im Voraus.

4
James Bruce

Sie können das Objekt $phpmailer filtern. So etwas sollte den Trick machen (nicht getestet):

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

Jeder, der nur die Datei hostname in der messageID aktualisieren möchte, die möglicherweise für das Nginx-Setup benötigt wird. Wordpress Dokumentation .

add_action('phpmailer_init', 'sender_message_id');

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