Wordpress不向Gmail发送电子邮件


Wordpress is not sending emails to Gmail

我的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发送而不会出错。