我想要了解将 Amazon Simple Email Service(Amazon SES)与 Amazon Cognito 用户群体集成所需执行的步骤。
## 简短描述
Amazon SES 和 Amazon Cognito 可进行集成,以通过您拥有的自定义电子邮件地址发送电子邮件。按照以下简要步骤操作,可将 Amazon SES 与 Amazon Cognito 用户群体相集成:
* 考虑 Amazon SES 沙盒的局限性。
* 将账户移出 Amazon SES 沙盒。
* 验证 Amazon SES 身份。
* 使用 Amazon SES 验证的身份配置 Amazon Cognito 用户群体。
## 解决方法
实施以下步骤,将 Amazon SES 与 Amazon Cognito 用户群体相集成,以代表您发送电子邮件。
### Amazon SES 沙盒的局限性
所有新的 Amazon SES 账户都放在 Amazon SES 沙盒中,以防止欺诈和滥用。使用 Amazon SES 沙盒时需要考虑一些限制。要查看具体的沙盒限制,请参阅[移出 Amazon SES 沙盒](https://docs.aws.amazon.com/ses/latest/dg/request-production-access.html?trk=cndc-detail)。您必须将您的 Amazon SES 账户移出沙盒,才能充分使用 Amazon SES 服务。
### 将账户移出 Amazon SES 沙盒
要将账户移出 Amazon SES 沙盒,请执行以下步骤:
1. 查看 [Amazon SES 电子邮件配置](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-email.html#user-pool-email-developer?trk=cndc-detail)中的亚马逊云科技区域映射表。映射表显示了可以将 Amazon SES 身份与 Amazon Cognito 用户群体集成的区域。在将 Amazon SES 账户移出沙盒之前,必须确保使用兼容的区域。
2. [请求 Amazon SES 账户的生产访问权限](https://docs.aws.amazon.com/ses/latest/dg/request-production-access.html)。生产访问请求获得批准后,您可以向任何收件人发送电子邮件。
**重要信息**:您必须切换到全新的 Amazon Cognito 控制台体验,才能在同一区域将 Amazon Cognito 与 Amazon SES 集成。
### 验证 Amazon SES 身份
要验证 Amazon SES 域身份,请执行以下步骤:
1. [创建域身份](https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#verify-domain-procedure?trk=cndc-detail)。
2. [验证 Amazon SES 中的一个或多个域](https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#just-verify-domain-proc?trk=cndc-detail)。
要验证 Amazon SES 电子邮件身份,请执行以下步骤:
1. [创建电子邮件身份](https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#verify-email-addresses-procedure?trk=cndc-detail)。
2. [验证 Amazon SES 中的一个或多个电子邮件地址](https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#just-verify-email-proc?trk=cndc-detail)。
**注意**:不支持 Amazon Cognito 和 Amazon SES 的跨账户集成。您不能在一个账户中配置 Amazon Cognito 用户群体,也不能将其与另一个账户中的 Amazon SES 电子邮件地址集成。
### 使用 Amazon SES 验证的身份配置 Amazon Cognito 用户群体
要将 Amazon Cognito 用户群体与经过验证的 Amazon SES 身份配置相集成,请按照与您的使用案例相关的步骤进行操作。
**当验证 Amazon SES 域身份时**
1. 登录到新的 [Amazon Cognito 控制台](https://console.aws.amazon.com/cognito/home?trk=cndc-detail),然后选择 **User Pools**(用户群体)。
2. 从列表中选择相应的用户群体。
3. 依次选择 **Messaging**(消息)选项卡、**Email configuration**(电子邮件配置),然后选择 **Edit**(编辑)。
4. 在 **FROM email address**(发件人电子邮件地址)下,选择 Amazon SES 验证的域身份。(例如,**example.com**。)
5. 在 **FROM sender name**(发件人姓名)下,输入您的电子邮件地址。(例如,**admin\@example.com**。)
由于域已经过验证,因此您可以为域身份添加自定义电子邮件地址。[UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html?trk=cndc-detail) API 使用 Amazon SES 身份配置 Amazon Cognito 用户群体。
[update-user-pool](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool.html?trk=cndc-detail) 命令示例:
```
$ aws cognito-idp update-user-pool --user-pool-id example_pool_id --email-configuration SourceArn=arn:aws:ses:example_region:example_account_number:identity/example_domain,EmailSendingAccount=DEVELOPER,From=user@example.com --region example_region
```
**重要信息**:由于 **UpdateUserPool** API 会重置用户群体的现有配置,因此请先调用 [DescribeUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html?trk=cndc-detail) API。然后,将所有现有的用户群体参数发送到 **UpdateUserPool** API。
**update-user-pool** 命令的描述:
* **example_pool_id** 对应于 Amazon Cognito 用户群体 ID。示例:ap-southeast-1\_xxxxxxxx。
* **arn:aws:ses:example_region:example_account_number:identity/example_domain** 是您的 Amazon SES 域身份的 ARN。
* 必须将 **user\@example.com** 替换为您的电子邮件身份。
* **example_region** 表示您的 Amazon Cognito 用户群体所在的区域。示例:ap-southeast-1。
**当验证 Amazon SES 电子邮件身份时**
1. 登录到新的 [Amazon Cognito 控制台](https://console.aws.amazon.com/cognito/home?trk=cndc-detail),然后选择 **User Pools**(用户群体)。
2. 从列表中选择相应的用户群体。
3. 依次选择 **Messaging**(消息)选项卡、**Email configuration**(电子邮件配置),然后选择 **Edit**(编辑)。
4. 在 **FROM email address**(发件人电子邮件地址)下,选择 Amazon SES 电子邮件域身份。(例如,**admin\@example.com**。)
### 错误排查
本部分中包含以下信息:对在集成 Amazon Cognito 和 Amazon SES 后发送电子邮件时用户遇到的错误进行故障排查。
**未验证的电子邮件地址错误**
“未验证电子邮件地址。以下身份未通过区域 AP-SOUTHEAST-1 中的检查:user\@example.com。”
Amazon Cognito 在尝试发送电子邮件时收到未经验证的电子邮件地址错误。当您尝试从 Amazon SES 沙盒中的账户向未经验证的电子邮件地址发送电子邮件时,可能会出现此错误。要解决此错误,请[将您的 Amazon SES 账户移出沙盒](https://docs.aws.amazon.com/ses/latest/dg/request-production-access.html?trk=cndc-detail),或在 Amazon SES 中验证收件人的电子邮件地址。
**用户没有收到来自 Amazon Cognito 的电子邮件**
用户没有收到来自 Amazon Cognito 用户群体的电子邮件。要解决此问题,请确认您是否使用 [Amazon Cognito 默认电子邮件功能](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-email.html#user-pool-email-default?trk=cndc-detail)或 [Amazon SES 电子邮件配置](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-email.html#user-pool-email-developer?trk=cndc-detail)来发送电子邮件。通过亚马逊云科技管理控制台或调用 [DescribeUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html?trk=cndc-detail) API 验证您的更新。
[describe-user-pool](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/describe-user-pool.html?trk=cndc-detail) 命令示例:
```
aws cognito-idp describe-user-pool --user-pool-id example_pool_id --region example_region --query 'UserPool.EmailConfiguration'
```
输出:
```
{
"SourceArn": "arn:aws:ses:us-east-1:123456789012:identity/admin@example.com",
"EmailSendingAccount": "DEVELOPER",
"From": "admin@example.com"
}
```
\-或者-
```
{
"SourceArn": "arn:aws:ses:us-east-1:123456789012:identity/admin@example.com",
"EmailSendingAccount": "COGNITO_DEFAULT"
}
```
如果 **EmailSendingAccount** 配置设置为 **DEVELOPER**,说明您的 Amazon Cognito 用户群体正在使用 Amazon SES 发送电子邮件。验证您的 Amazon SES 账户是否在沙盒中。如果是,请将 Amazon SES 移出沙盒,以便向未经验证的身份发送电子邮件。如果 Amazon SES 账户处于生产状态或退出沙盒模式,请查看 Amazon SES 日志以了解电子邮件传送情况。
如果您在输出中收到 **COGNITO_DEFAULT** 消息,说明您的 Amazon Cognito 用户群体正在使用默认功能发送电子邮件。使用此默认功能时,Amazon Cognito 对每个用户群体发送的电子邮件数量有[配额限制](https://docs.aws.amazon.com/cognito/latest/developerguide/limits.html?trk=cndc-detail)。
**抛出 LimitExceededException 异常**
“超过了操作或账户的每日电子邮件限制。已超过允许的操作次数。如果需要更高的限额,请将您的用户群体配置为使用您自己的 Amazon SES 配置来发送电子邮件。”
当 Amazon Cognito 使用具有每日[配额限制](https://docs.aws.amazon.com/cognito/latest/developerguide/limits.html?trk=cndc-detail)的[默认电子邮件功能](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-email.html#user-pool-email-default?trk=cndc-detail)发送电子邮件时,用户会收到每日电子邮件限制错误。按照错误消息中的建议,通过[更改 Amazon SES 电子邮件配置](https://docs.aws.amazon.com/ses/latest/dg/manage-sending-quotas.html?trk=cndc-detail)来设置更高的电子邮件传送量。