一些主机不支持发送邮件功能,所以我们才用到了WP-Mail-SMTP插件,使用WP-Mail-SMTP插件后即可通过QQ、163、新浪等邮件服务器发送邮件。
通常WP-Mail-SMTP插件发信失败都是设置错误造成的,相关的教程网上很多,这里要说的是一个特殊案例。
我的一些插件使用了wp_mail函数发信,安装WP-Mail-SMTP插件前没有任何问题,但是使用主机发信100%进垃圾箱,我使用的是虚拟主机又没有权限修改相关配置,所以才安装了WP-Mail-SMTP插件。
今天发现邮件发送失败,读了一下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 );
表面上看也没有问题,通过错误日志发现问题原因是From中的邮件地址与授权邮件地址不同,$adminemail取的是WordPress常规设置中邮件地址,而我插件中设置的邮件地址不同,把这两处的邮件地址设置成一样就解决了。