电子邮件地址未经验证(AWS SES)

274

我想使用Amazon的简单电子邮件服务发送电子邮件。

我已经验证了我的域名和我想要发送的电子邮件地址。

对于两者,都显示已验证

现在,当我从AWS控制台使用“发送测试电子邮件”将测试电子邮件发送到myemail@outlook.com时,我只收到错误消息:

电子邮件地址未经过验证。以下身份在EU-WEST-1地区未通过检查:myemail@outlook.com(请求ID:9fb78de1-2673-11e6-bbbc-5f819fabe4f4)

现在让我感到困惑的是,因为它说myemail@outlook.com未经验证,但我尝试从admin@mydomain.example发送。甚至发件测试电子邮件对话框也强制你使用已注册的电子邮件。

如何解决这个问题?我错过了什么吗?


1
您只能向已验证的电子邮件地址和域发送邮件,或者发送到Amazon SES邮箱模拟器。https://docs.aws.amazon.com/ses/latest/dg/send-an-email-from-console.html#send-email-simulator - Hamdi Yilmaz
18个回答

469

当您的SES帐户处于“沙箱”模式时,您只能:

  1. 仅从已验证的域和电子邮件地址发送电子邮件,以及
  2. 仅发送到已验证的域和电子邮件地址

如果要向其他人发送电子邮件,则必须通过联系AWS支持并请求将帐户移出沙箱模式:

https://docs.aws.amazon.com/console/ses/sandbox


8
您也可以在SES控制台中将目标电子邮件地址添加到已验证的电子邮件地址列表中。这样,您就可以向该地址发送测试邮件。 - yem yem yen
232
抱歉,错误信息能够提示这些信息可能是期望过高了。 - mattacular
5
在我的情况下,所有内容都经过了验证,但仍然收到了这个(令人困惑的)错误消息,直到我意识到该请求是由错误的IAM用户发出的。也值得检查一下。 - Nick
2
为了测试目的,可以像这样验证电子邮件:docs.aws.amazon.com/ses/latest/DeveloperGuide/...,您必须将TXT记录添加到要验证的域的DNS中,或者使用发送到该地址的验证代码逐个添加地址。还要注意验证是每个区域的,因此在验证太多之前,请选择要从中发送并验证的区域,...嗯... (^-^) - Simon B.
4
2020年仍然期望过高。 - Martin Capodici
显示剩余8条评论

34
在我的情况下,我需要在验证失败的地区再次验证电子邮件。您可以尝试在右上角更改您的地区,然后点击“验证新电子邮件地址”输入图像描述

5
屏幕截图现在已过期,你可能是指:“已验证身份”。 - Greg Wozniak

12
如果您的电子邮件已经验证,并且您已经退出SES沙盒,请检查您是否对SMTP服务器设置了正确的AWS区域。我曾尝试连接到email-smtp.eu-west-1.amazonaws.com,但我的SMTP凭据是为email-smtp.us-east-1.amazonaws.com服务器而设计的。

输入图像描述


1
不正确,我联系了AWS支持,他们说默认情况下,所有创建的帐户都处于沙盒模式。您需要联系AWS支持,提交新工单,只要您拥有有效的域名,他们就会删除沙箱环境。 - pass-by-ref
3
是的,我说过,只要你不在SES沙盒中,你仍然需要使用正确的AWS区域。 - georgiecasey
@Sarit 不用担心,你仍然可以使用SES,只需要使用亚太地区即可。当我发布我的答案时,你已经可以这样做了! - georgiecasey
很遗憾,没有亚太地区。那么我的EC2就不能使用它了。 - joe
即使我们退出沙盒模式,这是否仍然需要? - SalahAdDin
显示剩余2条评论

6
@Matt Houser已经回答了这个问题,但我会添加一个2020年6月的截图,解释他所说的内容。 enter image description here

4

请确保

  1. 您将电子邮件添加到SES并进行验证。
  2. 您为您的帐户启用生产模式。

3

请注意,验证身份实际上是区分大小写的。我曾经想知道为什么我出现了这样的错误,即使我的电子邮件已被验证并且已经从沙箱中删除。


2

请确保:

-您已向客户支持提交了案例请求,并解释了确认的目的,以便在24小时内进行确认。他们可能会要求您提供有关您的应用程序的其他信息。

亚马逊客户支持


2

我已经验证了一个电子邮件地址,然后几天后又验证了我的域名。当域名完全验证通过(包括 DKIM)时,当尝试向我的域名中的电子邮件地址发送电子邮件(而不是我特定的验证地址)时,仍然出现“电子邮件地址未经验证”的错误。

我删除了已验证的电子邮件地址,并重新验证了它,立刻就可以正常工作了。现在我可以发送域范围内的电子邮件,而之前我只能发送和接收之前已验证过的电子邮件地址。


我有一个 grandfathered(pre DKIM)批准的域名和电子邮件地址。我正在设置一个新的域名和电子邮件地址。所有代码、密钥和其他内容都是相同的,但我得到了这个错误。我觉得这篇帖子最可能是问题所在。我将每隔6个小时检查一次,如果不起作用,我将删除并重新配置电子邮件。如果它立即起作用,我会点赞此帖子作为解决方案。更多内容即将到来。 - AppDreamer

2

我遇到了这个问题。我已经验证了域名和电子邮件,甚至确认了 DKIM 设置。 但我仍然收到了这条消息:

Email address is not verified. The following identities failed the check in region {aws_region}: {email}

我在sendEmail的参数中添加了SourceArn,然后收到了以下消息:
User `arn:aws:iam::{account_id}:user/{username}' is not authorized to perform `ses:SendEmail' on resource `arn:aws:ses:{aws_region:{account_id}:identity/{email}'

两天后,我发现我使用了错误的 IAM 用户!


1
谢谢!有时候我们会忘记简单的步骤。我建议检查IAM用户凭证是否具有正确的凭据。 - renanrider

2
在我的情况下,我想发送电子邮件到相同的验证电子邮件地址。 因此,我按照Greg Wozniak提到的方法通过DKIM验证了我的电子邮件。我看到该字段变为绿色并得到了验证。

enter image description here

但是我仍然看到:
Email address is not verified. The following identities failed the check in region...

在我的情况下,解决方案是在代码中添加这个函数:
def verify_email_identity():
    ses_client = boto3.client("ses", region_name="us-east-1")
    response = ses_client.verify_email_identity(
        # Email address that will receive the email 
        # In my case the same email address 
        # that was verified on Amazon SES
        EmailAddress="receipientemail@gmail.com"
    )
    print(response)

这个网站中获取
所以,我收到了一封新的电子邮件来验证收件人的电子邮件地址。在通过亚马逊SES发送的链接进行验证后,我能够使用以下代码发送电子邮件:
client = boto3.client('ses',region_name="us-east-1")
# Try to send the email.
try:
    #Provide the contents of the email.
    response = client.send_email(
        Destination={
            'ToAddresses': [
                receipientemail@gmail.com,
            ],
        },
        Message={
            'Body': {
                'Html': {
                    'Charset': "UTF-8",
                    'Data': "Test",
                },
            },
            'Subject': {
                'Charset': "UTF-8",
                'Data': "Test",
            },
        },
        Source=receipientemail@gmail.com,
    )
# Display an error if something goes wrong. 
except ClientError as e:
    print(e.response['Error']['Message'])
else:
    print("Email sent! Message ID:"),
    print(response['MessageId'])

这就像是深入地狱几层的调试。 - serraosays
抱歉@serraosays,我不明白couple-levels-deep-into-hell的意思,这是答案错了吗? - israteneda
3
不,只是对你的回答如此详尽印象深刻。但 AWS SES 在凸显这些问题方面表现得很差,让我有些失望。我正在处理类似的问题。 - serraosays
这真的非常有帮助!非常感谢你!SES的错误信息和文档还有很大的改进空间。 - Ryan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接