最新消息:

从wordpres发送的邮件带有HTML标签的解决办法

php 大步 720浏览 0评论

wordpress用wp-mail这个函数发送邮件时,邮件接收后发现有html标签。

比如:

我写的发送的内容如下:

hello

Thank you

Please help me

但是接收后的显示的内容是:

<p>Hello,</p>

<p>&nbsp;</p>

<p>Thank you </p>

<p>&nbsp</p>

<p>Please help me</p>

 

可以看到,html代码被原样的输出了。

在function.php中的代码如下:

$headers = 'From: XXXXXX.com <info@xxxxx.com>' . "\r\n";

$subject = 'Registration from xxxxx.com' . "\r\n";

$message = $result_email_text;

wp_mail($_POST['admin_email'], $subject, $message, $headers );


解决办法:

发邮件用的函数是wp_mail(),wp_mail()则基于强大的邮件类phpMailer,所以发送HTML格式是小菜一碟。只是WordPress默认以纯文本格式发送邮件,我们收到的重设密码、评论提醒、用户注册等邮件都是纯文本格式的。

默认情况下content type(内容类型)是“text/plain" ,就是纯文本的格式,所以就会把html当做字符直接输出,而没有正常的解析。

所以,我们要在邮件的头部设置邮件的content type(内容类型),如"Content-type: text/html"

有人直接用 'wp_mail_content_type' filter在function.php中插入下面的代码:

add_filter('wp_mail_content_type',create_function('', 'return "text/html";'));

但是这样会让所有的邮件都是html发送,而有的邮件如用户注册和重设密码等确实用纯文本格式的。所以可以加一个判断条件,以判断何种情况下用何种content type。

remove_filter( 'wp_mail_content_type', 'set_html_content_type' );

add_filter( 'wp_mail_content_type', 'set_html_content_type' );

function set_html_content_type() {

if( '你的条件' )

return 'text/html';

else

return $content_type;

 

}


当然最好的方法还是用header的方式,,代码如下:

$headers = 'Content-type: text/html;' . "\r\n";

$headers .= 'From: XXXXXX.com <info@xxxxx.com>' . "\r\n";

$subject = 'Registration from xxxxx.com' . "\r\n";

$message = $result_email_text;

wp_mail($_POST['admin_email'], $subject, $message, $headers );

从wordpres发送的邮件带有HTML标签的解决办法

可以自己参考官方的文档:https://codex.wordpress.org/Function_Reference/wp_mail

 

转载请注明:大步's Blog » 从wordpres发送的邮件带有HTML标签的解决办法

SiteMap