如何覆盖wp_mail函数的Message-ID头?

时间:2012-05-18 作者:James Bruce

我为我们的评论编辑器提供了一个自定义通知功能,她更喜欢将一篇文章中的所有评论链接到她的电子邮件客户端中。为了实现这一点,我为文章的第一条评论创建了一个自定义消息ID,然后将其设置为将来的评论通知的回复。

这在某种程度上是可行的-我可以在邮件客户端中看到额外的头-但是,第一条消息是用两个消息ID创建的。换句话说,我传递到标题中的内容并没有覆盖Wordpress正在自动生成的内容。因此,线程无法工作。

这是Wordpress的bug吗?我不想求助于寻找实际的WP\\U邮件功能和编辑核心代码;我甚至不确定这是否有效。这是不是PHP邮件功能的一些更基本的东西,我可能无法更改?

$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";
提前谢谢。

3 个回复
SO网友:fuxia

您可以筛选$phpmailer 对象像这样的事情应该可以做到(未经测试):

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\';
}

SO网友:Ricky Boyce

任何想要更新messageID, Nginx安装可能需要。Wordpressdocumentation.

add_action(\'phpmailer_init\', \'sender_message_id\');

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

SO网友:Luc

我想我找到了最初问题的解决方案。

当然,您必须使用phpmailer\\u init操作来更改对象phpmailer(由wp\\u mail函数使用)的消息ID属性。感谢福霞的回答。

还必须按照rfc5322 section-3.6.4 否则,您的新邮件ID将被拒绝(consult here the source file of phpmailer where the message-ID is setted).

以下是消息ID的正确格式:<leftpart@rightpart> 包括支架

以下是经过测试的代码:

add_action(\'phpmailer_init\', \'set_message_id\');

function set_message_id(&$phpmailer) {
  $leftpart = \'mycustominfo-\'.uniqid();
  $domain = \'mydomain.com\';
  $messageID = \'<\'.$leftpart.\'@\'.$domain.\'>\';
  $phpmailer->MessageID = $messageID;
}
我希望这会有帮助

结束

相关推荐

函数.php出现问题!错误!

突然,我得到了一个信息:Parse error: syntax error, unexpected T_CLASS in /home/spandabe/public_html/wp-content/themes/modularity-lite/functions.php on line 72打开我的网站时www.spandabel.dk我只更改了标题中的内容。php,而不是函数。php!现在,在我做对这件事之前,我什么都做不了!这就是我的函数php的样子: <?php /*