我想在我的网站上为发送的电子邮件添加一个额外的标题,以便我可以轻松确定哪个网站发送了给定的电子邮件。(我在我所有的网站上都放了一个标准的功能插件,所以这很容易做到,而配置我的电子邮件客户端来过滤和处理这个标题将是一个惊人的节省时间的方法。)
我想这将是一个插入wp_mail
功能,但显然不是。
首先,我尝试了以下方法:
add_filter(\'wp_mail\', \'ws_add_site_header\');
function ws_add_site_header() {
return array(\'headers\' => \'X-WU-Site: \' . parse_url(get_site_url(), PHP_URL_HOST));
}
在这里,我的数组优先于修改邮件设置的任何其他设置(比如重力表单),因此HTML电子邮件开始显示为纯HTML,并且格式不好。这很有意义,因为GF添加的内容类型:header已被删除。但我的标题被添加到了电子邮件中。由于其他人也依赖于收到漂亮的电子邮件(我相信我网站的所有内容开发人员和最终用户,以及其他人),这是不可接受的。
然后,我的一位同事建议通过wp\\u parse\\u args()路由我的东西,因此:
add_filter(\'wp_mail\', \'ws_add_site_header\');
function ws_add_site_header($args) {
$new_header = array(\'headers\' => \'X-WU-Site: \' . parse_url(get_site_url(), PHP_URL_HOST));
return wp_parse_args($args, $new_header);
}
这样一来,就好像我的函数不存在了——我的标题没有添加,但其他人的标题和邮件设置也没有被删除。
在不干扰任何其他可能存在的过滤器的情况下,向传出的电子邮件添加标题的正确方法是什么?
SO网友:birgire
下面是一个直接使用AddCustomHeader
的方法PHPMailer
实例:
/**
* Add a custom header.
* $name value can be overloaded to contain
* both header name and value (name:value)
* @access public
* @param string $name Custom header name
* @param string $value Header value
* @return void
*/
public function addCustomHeader($name, $value = null)
{
if ($value === null) {
// Value passed in as name:value
$this->CustomHeader[] = explode(\':\', $name, 2);
} else {
$this->CustomHeader[] = array($name, $value);
}
}
在这里,我们可以看到有两种使用方法:
示例#1:
这里我们只传递
$name
输入字符串,用分隔
:
add_action( \'phpmailer_init\', function( $phpmailer )
{
$phpmailer->AddCustomHeader(
\'X-WU-Site: \' . parse_url( get_site_url(), PHP_URL_HOST )
);
} );
示例2:
$name
和
$value
非空:
add_action( \'phpmailer_init\', function( $phpmailer )
{
$phpmailer->AddCustomHeader(
\'X-WU-Site\', parse_url( get_site_url(), PHP_URL_HOST )
);
} );