【发布时间】: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