0

我已将 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 的新手,我确信我的设置不正确。

请帮忙!

4

1 回答 1

1

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

您看到的症状与证书验证失败的故障排除指南中的描述一样:

在 SMTP 脚本中,这通常会显示为尝试发送 STARTTLS 命令,然后立即发送 QUIT 命令。

正如您所说,这可能是由于您要求连接的主机名与其​​回复的证书上的名称不匹配造成的,这是SMTP 防火墙重定向的症状,这在托管服务中很常见。您尚未发布代码,但如果您说:

$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 块中,因此不会捕获异常。

于 2021-11-11T10:12:47.747 回答