为什么 Amazon SES SMTP 只在端口 443 上工作?



我正在设置一个使用 PHPMail 发送电子邮件的 PHP 脚本。"发件人"地址已在亚马逊的控制台上验证,并且我已经创建了 IAM 用户和 SMTP 凭证。创建这些端口时,亚马逊会告诉您使用端口 25、465 或 587。这是亚马逊文档中的一个php示例,不使用PHPMail,但想法应该是相同的。

这是我的脚本:

$mail = new PHPMailer;
$mail->SMTPDebug = 3;                               // Enable verbose debug output
$mail->Timeout = 20;
$mail->CharSet = 'UTF-8';
$mail->isSMTP();                                      // Set mailer to use SMTP
$mail->Host = 'ssl://email-smtp.us-east-1.amazonaws.com';  // Specify main and backup SMTP servers
$mail->SMTPAuth = true;                               // Enable SMTP authentication
$mail->Username = 'my_username';                 // SMTP username
$mail->Password = 'my_password';                           // SMTP password
$mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
$mail->Port = 587;                                    // TCP port to connect to
$mail->setFrom('my@email.com', 'My email name');
$mail->addAddress('test@test.com', 'Test');     // Add a recipient
$mail->addReplyTo('my@email.com', 'My email name');
$mail->isHTML(true);                                  // Set email format to HTML
$mail->Subject = 'Amazon SES SMTP test with PHPMailer';
$mail->Body    = 'This is the HTML message body <b>in bold!</b>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
if(!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
echo 'Message has been sent';
}

这样的脚本不起作用,我收到连接超时错误。但是,如果我将端口更改为 443,那么它可以正常工作。为什么?这不是亚马逊列出的端口,所以我担心即使它现在可以工作,将来也可能会出现其他一些问题。我在这里错过了什么吗?顺便说一下,端口 465 也不起作用。

编辑只是为了澄清,我意识到这可以使用端口 443 工作,就像我提到的,但是为什么这不适用于他们建议的端口?这就是我试图理解的。这个脚本中缺少什么吗?我也测试了没有用"ssl://"前缀主机(这就是他们在示例中显示的方式)并使用建议的端口,但无济于事。

TCP 端口443 是用于使用 SSL 的网站的标准 TCP 端口。 您的地址是

ssl://email-smtp.us-east-1.amazonaws.com

所以对我来说,这是应该的。

问题是我们的 CSF 防火墙中有一个名为SMTP_BLOCK的设置已打开。我们关闭了它,现在端口 587 工作正常(我还不得不从主机地址中删除ssl://)。

也许这对将来解决相同问题的人有所帮助。

相关内容

  • 没有找到相关文章

最新更新