通过AWS SES和CakePHP发送电子邮件时出现偶发错误



我有一个用CakePHP 2.10.18编写的脚本(运行在php 5.6上,我知道,是老东西(。该脚本设置为使用AWS SES作为SMTP服务器,大多数情况下该服务器运行良好,但每隔一段时间,如果根本不更改代码,发送就会失败,并提供以下错误消息:SMTP服务器不接受密码

这是CakePHP:中的电子邮件配置

public $SMTP_config = array(
'transport' => 'Smtp',
'host' => 'email-smtp.us-east-1.amazonaws.com',
'port' => 587,
'timeout' => 30,
'username' => 'redacted',
'password' => 'redacted',
'client' => null,
'log' => true,
'returnPath' => 'my@email.com',
'replyTo' => 'my@email.com',
'tls' => true,
'charset' => 'utf-8',
'headerCharset' => 'utf-8'
);

用作发件人的电子邮件地址(与返回路径和回复地址相同(已通过AWS验证,在AWS控制台中一切正常,DKIM验证正常,帐户处于健康状态。。。

我似乎找不到是什么原因造成的,有什么想法吗?为什么当我再次运行脚本时,密码会被拒绝,几秒钟后又被接受?任何帮助都将不胜感激。

我遇到了类似的问题,我发现问题是我使用了一个旧的SES用户。当我从命令行运行一些测试来测试SES连接时,它通常工作正常,但偶尔(随机(我会得到下图所示的错误。我创建了一个新的SMTP用户来连接SES,问题就消失了。也许我很天真,但AWS的某个人似乎认为,贬低一项功能的好方法是让它随机导致间歇性故障。

错误消息

我也面临着同样的问题。

AWS支持向我们报告了以下解决方案(非常简单,尽管我找不到任何关于此事的文档(。

我刚刚查看了我们的日志(在更新凭据的变量后3天(,问题已经解决。

希望这对你有用。

在2019年1月10日之前创建的任何SMTP凭据都使用Sigv2(签名版本2(,在此之后创建的凭据将默认使用SigV4(签名版本4(。

签名版本2已被弃用,取而代之的是签名版本4。如果您正在接收";SMTP服务器不接受密码"PHP应用程序中的错误,在使用上述用户凭据时,我建议创建一组新的凭据,以确保使用Sigv4-auth。要创建新的SMTP凭据:

1.登录AWS管理控制台,并确保设置验证身份的区域(us-east-1(

2.打开亚马逊SES控制台https://console.aws.amazon.com/ses/。

3.在左侧导航窗格中选择SMTP设置-这将打开"简单邮件传输协议(SMTP(设置"页面。

4.选择";创建SMTP凭据"-IAM控制台将打开。

5.对于"为SMTP创建用户",请在IAM用户名字段中键入SMTP用户的名称。或者,您可以使用此字段中提供的默认值。完成后,选择右下角的"创建"。

6.展开"显示用户SMTP安全凭据"-屏幕上将显示您的SMTP凭据。

7.选择"下载凭据"下载这些凭据,或者复制这些凭据并将其存储在安全的地方,因为关闭此对话框后无法查看或保存凭据。

最新更新