WHM/EXIM/SES - SMTP 错误 "We do not authorize the use of this system to transport unsolicited, 220 and/or bulk e-mail"

WHM / EXIM / SES - SMTP Error "We do not authorize the use of this system to transport unsolicited, 220 and/or bulk e-mail"

我已将 AWS SES 连接到我的域,它已通过 DKIM 进行设置和验证,SES 控制台运行良好(包括来自地址的邮件)。我已经创建了 SMTP 凭据,但我无法通过 PHPMailer 和 EXIM 邮件服务器从我的服务器发送邮件。

我收到以下响应(xxxx 替换了我的实际域)

2021-11-11 09:09:20 SERVER -> CLIENT: xxxx.cprapid.com ESMTP Exim 4.94.2 #2 Thu, 11 Nov 2021 09:09:20 +0000 220-We do not authorize the use of this system to transport unsolicited, 220 and/or bulk e-mail.
2021-11-11 09:09:20 CLIENT -> SERVER: EHLO xxxx.gg
2021-11-11 09:09:20 SERVER -> CLIENT: xxxx.cprapid.com Hello xxxx.gg [x.x.x.x]250-SIZE 52428800250-8BITMIME250-PIPELINING250-PIPE_CONNECT250-AUTH PLAIN LOGIN250-STARTTLS250 HELP
2021-11-11 09:09:20 CLIENT -> SERVER: STARTTLS
2021-11-11 09:09:20 SERVER -> CLIENT: 220 TLS go ahead
SMTP Error: Could not connect to SMTP host.
2021-11-11 09:09:20 CLIENT -> SERVER: QUIT
2021-11-11 09:09:20
2021-11-11 09:09:20
SMTP Error: Could not connect to SMTP host.

Fatal error: Uncaught PHPMailer\PHPMailer\Exception: SMTP Error: Could not connect to SMTP host. in /home/xxxx/public_html/lib/src/PHPMailer.php:21

这是我在 Digital Ocean Droplet 上设置的 WHM 服务器。 .gg 域是在带有 cPanel 的 WEHM 服务器上创建的域。

我认为问题在于它正在尝试通过 WHM 主机对服务器进行身份验证。cprapid.com 但它应该是 .gg 域 - 请参见此处:

2021-11-11 09:09:20 CLIENT -> SERVER: EHLO xxxx.gg
2021-11-11 09:09:20 SERVER -> CLIENT: xxxx.cprapid.com Hello xxxx.gg

我是 EXIM/WHM 的新手,我确定我的设置不正确。

请帮忙!

“我们不授权...”消息不是错误,它只是一个“欢迎”横幅,没有技术意义或意义。

您看到的症状与in the troubleshooting guide关于证书验证失败的描述相同:

In an SMTP transcript this will typically be shown as trying to send a STARTTLS command immediately followed by a QUIT command.

正如您所说,这可能是由于您要求连接的主机名与它回复的证书上的名称不匹配造成的,这是 SMTP firewall redirection 的症状,这在托管服务。您尚未发布您的代码,但如果您说:

$mail->Host = 'xxxx.gg';

服务器回复:

SERVER -> CLIENT: xxxx.cprapid.com ESMTP Exim

(证书将包含相同的名称),并且由于 xxx.gg != xxxx.cprapid.com,验证将失败。有两种解决方法:

  1. 请求您的托管服务提供商允许出站 SMTP 到任意地址。
  2. 有意切换到使用托管服务提供商的电子邮件服务器(大概 xxxx.cprapid.com)。
  3. 更不可能的情况是邮件服务器配置错误,并且提供的证书与其主机名不匹配,在这种情况下,邮件服务器管理员需要修复它。

如果您做不到这些,您可能需要寻找新的托管服务提供商。

从它生成的错误中我可以看出的另一件事是您启用了异常(通过将 true 传递给 PHPMailer 构造函数):

$mail = new PHPMailer(true);

但是您没有将以下代码包装在 try/catch 块中,因此未捕获异常。