我正在设置一个使用 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://
)。
也许这对将来解决相同问题的人有所帮助。