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

Why is Amazon SES SMTP only working on port 443?

我正在设置使用 PHPMail 发送电子邮件的 PHP 脚本。 "from" 地址已经在 Amazon 的控制台上进行了验证,并且我已经创建了 IAM 用户和 SMTP 凭证。创建这些时,Amazon 会告诉您使用端口 25、465 或 587。Here's 来自 Amazon 文档的 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://)。

也许这可以帮助将来遇到同样问题的人。