我的Wordpress电子邮件都没有发送到Gmail。更多信息:
- 我正在使用EXIM邮件服务器
- 我正在使用wordpress最新版本
- 只有当电子邮件发送到Gmail时才会发生这种情况
EXIM日志显示,该电子邮件已成功发送到Gmail,但未发送或以垃圾邮件形式发送。
问题是多种因素的结合:
- 与postfix不同,EXIM不会自动设置
Sender
标头 - Gmail最近做了一些更改,以更好地处理垃圾邮件,如果电子邮件标头缺少
Sender
标头,它很可能会默默地丢弃它,或者将其作为垃圾邮件发送 - Wordpress未设置
Sender
标题
一旦你知道了这些,修复就很简单了。如果你使用Wordpress,快速而肮脏的方法是转到wp-includes/pluggable.php
,查找wp_mail()
函数搜索:
$phpmailer->From = apply_filters( 'wp_mail_from' , $from_email );
然后添加以下内容:
$phpmailer->Sender = $phpmailer->From;
一旦你这样做,电子邮件就会工作,你可以通过编写插件以正确的方式解决问题,而不会覆盖核心Wordpress使用了知道这个问题的phpmailer,但Wordpress没有使用它。还有一份关于这个问题的错误报告。
要使用core mail()函数修复问题,您必须执行以下操作:
// $sender can be the same email address as the From header
mail($to, $subject, $message, $additional_headers, "-f {$sender}")
根据您服务器的配置,还有另一个可能有效的选项(我无法测试它,如果有人能测试它,我会很高兴):
$sendmailFrom = ini_get('sendmail_path');
ini_set('sendmail_path', $sendmailFrom . ' -f sender@mysite.com'); // or whatever you want
Gmail(最终可能是Hotmail和Yahoo)开始禁用传统的SMTP身份验证机制(PLAIN、LOGIN和CRAMMD5),转而支持OAUTH2。
如果你只使用WordPress(PHPMailer)发送邮件,Gmail会将其丢弃或标记为SPAM。如果你使用典型的WordPress SMTP插件发送邮件,Gmail会给你一个身份验证错误,或者让你跳过应用程序特定密码、双因素身份验证和启用不太安全的应用程序作为帐户设置等障碍。
第一个为WordPress实现OAuth 2.0的插件(免责声明,我是作者)是Postman SMTP。如果TCP 465端口允许到Gmail的出站连接,您的WordPress电子邮件将由Postman发送而不会出错。