有没有一种方法可以使用Wordpress的wp_mail函数发送HTML格式的电子邮件?


41

是否有一个action_hook或类似的东西可以帮助我实现这一目标?

我尝试在PHP字符串变量中添加标记,然后使用wp_mail函数触发了电子邮件,如下所示:

$email_to = 'someaddress@gmail.com';
$email_subject = 'Email subject';
$email_body = "<html><body><h1>Hello World!</h1></body></html>";
$send_mail = wp_mail($email_to, $email_subject, $email_body);

但是它显示为纯文本吗?

有任何想法吗?

Answers:


58

wp_mail Codex页面

默认的内容类型是“文本/纯文本”,不允许使用HTML。但是,您可以使用“ wp_mail_content_type”过滤器来设置电子邮件的内容类型。

// In theme's functions.php or plug-in code:

function wpse27856_set_content_type(){
    return "text/html";
}
add_filter( 'wp_mail_content_type','wpse27856_set_content_type' );

1
嗯,听起来很有用。只是一个问题,为什么要命名函数wpse27856_set_content_type的任何特定原因?
racl101 2011年

13
不,它只是基于此特定问题的ID的唯一名称。wpse = wp stachexchange,27856是URL中此问题的ID。我这样做是为了避免人们在此处复制/粘贴代码时可能发生的冲突。
Milo

2
您也可以只在电子邮件标题中包含Content-Type。看看Notifly插件是如何做到的。
奥托

哦,是的,哈哈 我是n00b。猜猜这是这篇文章的ID。
racl101 2011年

1
这将破坏您的密码重置电子邮件,因为重置链接包含在<>中。
西蒙·约瑟夫·科克

89

或者,您可以在$ headers参数中指定Content-Type HTTP标头:

$to = 'sendto@example.com';
$subject = 'The subject';
$body = 'The email body content';
$headers = array('Content-Type: text/html; charset=UTF-8');

wp_mail( $to, $subject, $body, $headers );

2
由于add_filter有时显示为附件,因此效果更好。感谢分享!
deepakssn

10

使用wp_mail函数后,请不要忘记删除内容类型过滤器。按照可接受的答案命名,您应该在执行wp_mail之后执行以下操作:

remove_filter( 'wp_mail_content_type','wpse27856_set_content_type' );

在此处检查此票证-重置内容类型以避免冲突-http://core.trac.wordpress.org/ticket/23578


7
这应该是评论,而不是答案,不是吗?
鲍勃·迭戈

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.