【问题标题】:Why is Amazon SES SMTP only working on port 443?为什么 Amazon SES SMTP 仅在端口 443 上工作?
【发布时间】:2017-05-16 21:45:39
【问题描述】:

我正在设置一个使用 PHPMail 发送电子邮件的 PHP 脚本。 “发件人”地址已经在 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://”(这是他们在示例中显示的方式)预先修复主机并使用建议的端口进行测试,但无济于事。

【问题讨论】:

  • 哈哈哈https://email-smtp.us-east-1.amazonaws.com居然回复220 email-smtp.amazonaws.com ESMTP SimpleEmailService。严重地。这没有意义,但他们似乎确实在端口 443 上使用 TLS Wrapper 使用 SMTP。不过,您是对的 - 这是错误的。在您的命令提示符下,telnet email-smtp.us-east-1.amazonaws.com 587。您是否收到 SMTP 横幅?如果没有,您正在阻止某些东西,可能在您的 NAT 网关/实例上的安全组中,如果您有的话。

标签: php email amazon-web-services amazon-ses connection-timeout


【解决方案1】:

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

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

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

【讨论】:

  • 他们不建议使用那个端口一定是有原因的,对吧?你在我的脚本上看到什么为什么这不适用于端口 587 或 465 吗?顺便说一句,我也尝试过不使用“ssl://”。
  • @ATechGuy 这是一个 SMTP/MSA 连接,而不是 HTTPS。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-22
    • 2012-06-26
    • 2012-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    相关资源
    最近更新 更多