WP Mail SMTP 插件 邮件无法发送问题

Debug5年前 (2020)发布 Monster
376 0
内容纲要

问题描述:

公司一台亚马逊服务器,上面部署3-4个WP站点。均已安装WP Mail SMTP 邮件插件,但都无法成功发送邮件。

插件配置使用默认phpmailer发送邮件,使用插件测试发送,结果失败,遂追查原因。

调查经过:

  • 首先使用原始配置测试,无法发送。验证本地环境该插件工作正常。初步排除插件本身嫌疑

  • 服务器与本地均安装同类插件Easy WP SMTP 插件,并测试,均能成功发送。排除服务器邮件配置或安全策略可能产生的问题

  • 配置163邮箱SMTP,可向自身163邮箱发送测试邮件,但无法向其他域名邮箱发送。对163邮箱存疑

  • 配置腾讯企业邮SMTP、Gmail等,均可正常发送。确定调查方向为163邮箱

  • 查看错误日志

    由于WP Mail SMTP 插件需要付费才能查看日志,但我们手里有它的代码,所以在插件发送邮件过程中打上断点,并输出日志。

// 文件路径 wp-content/plugins/wp-mail-smtp/src/MailCatcher.php

42  public function send() {
43
44      $options     = new Options();
45      $mail_mailer = sanitize_key( $options->get( 'mail', 'mailer' ) );
46
        ...

91      $this->setError( $e->getMessage() );
92          if ( $this->exceptions ) {
                // 此处获取错误日志,并输出
93              throw $e;
94          }

        ...

130 }

日志如下:

2020-01-03 07:03:31 Connection: opening to ssl://smtp.163.com:465, timeout=300, options=array ()
2020-01-03 07:03:32 Connection: opened
2020-01-03 07:03:37 SERVER -> CLIENT: 220 163.com Anti-spam GT for Coremail System (163com[20141201])
2020-01-03 07:03:37 CLIENT -> SERVER: EHLO www.xxx.com
2020-01-03 07:03:37 SERVER -> CLIENT: 250-mail250-PIPELINING250-AUTH LOGIN PLAIN 250-AUTH=LOGIN PLAIN250-coremail 1Uxr2xKj7kG0xkI17xGrU7I0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UFtSvxTUCa0xDrUUUUj250-STARTTLS250 8BITMIME
2020-01-03 07:03:37 CLIENT -> SERVER: AUTH LOGIN
2020-01-03 07:03:38 SERVER -> CLIENT: 334 dXNlcm5hbWU6
2020-01-03 07:03:38 CLIENT -> SERVER: 用户名base64加密字符串
2020-01-03 07:03:38 SERVER -> CLIENT: 334 UGFzc3dvcmQ6
2020-01-03 07:03:38 CLIENT -> SERVER: 密码base64加密字符串
2020-01-03 07:03:38 SERVER -> CLIENT: 235 Authentication successful
2020-01-03 07:03:38 CLIENT -> SERVER: MAIL FROM:<mail_name@163.com>
2020-01-03 07:03:38 SERVER -> CLIENT: 250 Mail OK
2020-01-03 07:03:38 CLIENT -> SERVER: RCPT TO:<mail_name@foxmail.com>
2020-01-03 07:03:39 SERVER -> CLIENT: 250 Mail OK

=======================================邮件内容开始=======================================

2020-01-03 07:03:39 CLIENT -> SERVER: DATA
2020-01-03 07:03:39 SERVER -> CLIENT: 354 End data with <CR><LF>.<CR><LF>
2020-01-03 07:03:39 CLIENT -> SERVER: Date: Fri, 3 Jan 2020 07:03:31 +0000

        ... ...

2020-01-03 07:03:39 CLIENT -> SERVER: </body>
2020-01-03 07:03:39 CLIENT -> SERVER: </html>
2020-01-03 07:03:39 CLIENT -> SERVER: .

=======================================邮件内容结束=======================================

2020-01-03 07:03:40 SERVER -> CLIENT: 554 DT:SPM 163 smtp4,HNxpCgD3+yND5w5eiqB4CQ--.18S2 1578035020,please see http://mail.163.com/help/help_spam_16.htm?ip=xxx.xxx.xxx.xxx&hostid=smtp4&time=1578035020
2020-01-03 07:03:40 SMTP ERROR: DATA END command failed: 554 DT:SPM 163 smtp4,HNxpCgD3+yND5w5eiqB4CQ--.18S2 1578035020,please see http://mail.163.com/help/help_spam_16.htm?ip=xxx.xxx.xxx.xxx&hostid=smtp4&time=1578035020
SMTP Error: data not accepted.
2020-01-03 07:03:40 CLIENT -> SERVER: QUIT
2020-01-03 07:03:40 SERVER -> CLIENT: 221 Bye
2020-01-03 07:03:40 Connection: closed

从日志可以看到163 SMTP服务器返回信息:

CLIENT: 554 DT:SPM 163 smtp4,HNxpCgD3+yND5w5eiqB4CQ--.18S2 1578035020

可以在返回信息中打开帮助:

网易企业退信的常见问题

另外可以参考以下链接:

网易邮件发送规范

163邮箱问题:554 DT:SPM 163 smtp5,D9GowACHO7RNWNdXmXs1Bw–.9035S2

结论:

  • 由于网易邮箱较严格的反垃圾机制,将服务器上发出的邮件均判定为垃圾邮件而退回,是导致发送失败的直接原因。
  • 本地和测试服务器正常发送原因是:发信服务器均拥有独立发信ip,而公司服务器使用了多域公用的环境;
  • 向其他邮箱发信失败,而向自身163邮箱发信正常是因为:在被判断为垃圾邮件时,只发给自己或是在抄送里加入自己,即可正常发送;
  • 更换其他SMTP服务商。

PS:可以多参考网易反垃圾机制,来避免这种情况。当然最简单的方法还是直接换个服务商。:)

© 版权声明

相关文章

暂无评论

暂无评论...