当我使用wp_mail( $to, $subject, $message, $headers )(当然有适当的值)时,将使用发自的名称和未在我可以找到的任何地方设置的电子邮件(甚至在PHP或Apache设置中也不提供)发送电子邮件。但是,使用mail( $to, $subject, $message, $headers )可以正常工作。 wp_mail()会发生什么导致这种情况?

#1 楼

@helenyhou,您好:

您可以设置标题,而无需使用参数。 WordPress使用“钩子”,您需要的钩子是'wp_mail_from''wp_mail_from_name'钩子。

这是您可以在将functions.php用作电子邮件地址"From:"时,将其添加到主题的wp_mail()文件中以修改Helen Hou-Sandi <helenyhou@example.com>标头的钩子:

add_filter('wp_mail_from','yoursite_wp_mail_from');
function yoursite_wp_mail_from($content_type) {
  return 'helenyhou@example.com';
}
add_filter('wp_mail_from_name','yoursite_wp_mail_from_name');
function yoursite_wp_mail_from_name($name) {
  return 'Helen Hou-Sandi';
}


评论


我只是看过滤器,而您说的对,它确实可以解决问题。我想应该更新食典? codex.wordpress.org/Function_Reference/wp_mail也相关:这似乎影响了许多表单插件,包括强大的GravityForms。我当前正在编写一个自定义表单,但是如果这就是WP的行为方式,为什么使用常规的old方法设置标头对其他人(甚至我的某些其他网站)有效?

–helenhousandi
2011-02-10 21:47

@helenyhou-为避免影响其他形式,您需要在名为wp_mail()的插件之前添加过滤器,然后在其后将其删除。至于为什么设置标头起作用,我不知道您的其他用例是什么,但是如果wp_mail()可以那样工作,我会感到惊讶。

– MikeSchinkel
2011-2-10 22:49

我发现发生了什么-另一个插件正在全局添加针对我不要求也不选择退出的内容的过滤器-不好,不好,不好。因此,现在常规标头毕竟可以工作。不过,似乎最好使用这些过滤器(如果在其中)。

–helenhousandi
2011-2-10 23:00

此处仅需说明,可以通过remove_filter(HOOK,FUNCTION)删除插件添加的任何过滤器。

–杰森·科尔曼(Jason Coleman)
2012年9月16日下午21:27

仅当发件人电子邮件域与站点相同时才有效。


18年4月28日在7:02

#2 楼

好吧,如果您在标头中使用From: "Your Name" <youremail@example.com>\r\n格式,则应该不会有问题(除非您安装了覆盖wp_mail函数的插件)。您可以使用这些过滤器过滤最终值,也可以只安装此插件:

发送自

它会为您提供一个选项设置,以确定名称和电子邮件在wp_mail()中使用。

#3 楼

抱歉,您可以重新回答一个老问题,但是通过标题设置这样不是更好吗:然后在wp_mail()之后删除。

评论


我没有设置过滤器,另一个插件做了。过滤器优先于标头。另外,您确实应该使用site_url()而不是get_bloginfo('wpurl')

–helenhousandi
2011年4月16日4:14



但是可以肯定的是,该插件不利于无法自行清除....虽然不是很多,但您可以做到这一点:(在这种情况下,我最好将插件更改为使用过滤器,以防万一另一个插件损坏了它。

–斯科特
2011年4月16日在8:59



@helenyhou-+1提醒我有关site_url()的信息。我还更改了插件以使用过滤器,而不是使用$ header。另外,在发送电子邮件后,我确保删除了这些过滤器,以免造成其他问题:)

–斯科特
2011-4-16 13:36



是的,这是该插件的弊端,因为它没有给我选择不使用这些过滤器的选项,而是幸运地注释掉为我的案例设计的过滤器。我可能会问周围,看看将来使用哪种更好-每次使用的过滤器或更熟悉的标题。标头可能更有效,但是为什么那些过滤器在那里?总是有更多问题:)

–helenhousandi
2011年4月26日在12:45

从当前版本开始,使用get_bloginfo('wpurl')是完全可以接受的:这已经返回site_url()。不建议使用get_bloginfo('home')和get_bloginfo('siteurl')。 developer.wordpress.org/reference/functions/get_bloginfo

–詹姆斯M
16 Dec 25 '16:03

#4 楼

有点麻烦,但您也可以使用Reply To标头标签:

$headers = 'Reply-To: "Aaren A. Aarenson" <aaron@somemail.com>';

不幸的是,这会将电子邮件地址添加到“发件人”列表中,回复意味着您将拥有手动删除在wp_mail_from过滤器中配置的地址。

评论


这为我解决了。你救了一个命伴! ;)

–user382738
17年6月26日在23:43

#5 楼

我有同样的问题。对我来说,托管服务提供商(BlueHost)阻止更改from字段。他们在这里对其进行了解释https://my.bluehost.com/cgi/help/206。