0

我的所有 Wordpress 电子邮件都没有发送到 Gmail。更多信息:

  • 我正在使用 EXIM 邮件服务器
  • 我正在使用 wordpress 最新版本
  • 仅当电子邮件发送到 Gmail 时才会发生

EXIM 日志显示该电子邮件已成功发送到 Gmail,但未发送或以垃圾邮件形式发送。

4

2 回答 2

0

问题是多种因素的组合:

  • EXIM 与 postfix 不同,不会自动设置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 不使用它。还有一个关于这个问题的错误报告。

要使用核心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
于 2013-12-03T08:35:30.647 回答
0

Gmail(最终可能还有 Hotmail 和 Yahoo)开始禁用传统的 SMTP 身份验证机制(PLAIN、LOGIN 和 CRAMMD5),转而支持 OAUTH2。

如果您单独使用 WordPress (PHPMailer) 发送邮件,Gmail 会将其丢弃或标记为垃圾邮件。如果您使用典型的 WordPress SMTP 插件发送邮件,Gmail 会给您一个身份验证错误,或者让您跳过诸如应用程序特定密码、双因素身份验证以及启用不太安全的应用程序作为帐户设置等问题。

第一个为 WordPress 实现 OAuth 2.0 的插件(免责声明,我是作者)是Postman SMTP。如果端口 TCP 465 允许与 Gmail 的出站连接,则您的 WordPress 电子邮件将由 Postman 传送而不会出错。

于 2015-02-15T19:50:35.287 回答