在使用
WordPress 搭建网站时,邮件发送功能是很多插件正常运行的基础。但有些虚拟主机不支持自带的邮件发送功能,这时
WP-Mail-SMTP 插件就成了常用的解决方案,它能让网站通过 QQ、163、新浪等第三方邮件服务器发送邮件,有效避免邮件进入垃圾箱的问题。不过,在使用该插件时,有时会遇到一些特殊的
发信失败情况,尤其是当代码中带有 $header 参数时。
有用户反馈,在安装 WP-Mail-SMTP 插件前,使用 wp_mail 函数发信虽然能成功,但邮件 100% 进入垃圾箱,由于使用的是虚拟主机,没有权限修改相关配置,所以选择安装 WP-Mail-SMTP 插件。然而,安装后却出现了邮件发送失败的情况,而之前的发信代码在未安装插件时是正常的。
该插件的核心工作机制如下:
- 过滤 wp_mail_from,将邮件发送者地址($phpmailer->From)设置为插件中 “From Email” 选项所配置的值;
- 过滤 wp_mail_from_name,将发送者名称($phpmailer->FromName)设置为插件中 “From Name” 选项的值;
- 通过 phpmailer_init 钩子配置 SMTP 相关信息,确保邮件通过指定的第三方服务器发送。
用户的发信代码如下:
$headers[] = 'Content-Type: text/html; charset=UTF-8';
$headers[] = 'From: ' . $blogname . ' <' . $adminemail . '>';
wp_mail( $author_name . ' <' . $author_email . '>', $mail_title, $mail_txt, $headers );
从代码来看,似乎没有明显错误。但通过错误日志排查发现,问题出在
发送者邮件地址不匹配上:
- 代码中header参数里的From地址(即adminemail)来自 WordPress 常规设置中的邮件地址;
- 而 WP-Mail-SMTP 插件中配置的授权邮件地址与上述地址不同。
由于插件会强制使用自身配置的授权邮箱作为发送地址,当 $header 中指定的 From 地址与之不一致时,就会导致邮件发送失败。