

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 电子邮件身份验证方法
<a name="email-authentication-methods"></a>

Amazon Simple Email Service（Amazon SES）使用简单邮件传输协议（SMTP）发送电子邮件。由于 SMTP 本身不提供任何身份验证，因此垃圾邮件发送者可以发送声称来自其他任何人的电子邮件，同时隐藏其真实来源。垃圾邮件发送者通过伪造电子邮件标头并欺骗源 IP 地址，可误导收件人相信其收到的电子邮件是真实的。

大多数转发电子邮件流量的 ISP 会采取措施来评估电子邮件是否合法。ISP 采取的一项措施是确定电子邮件是否已经过身份验证。身份验证要求发件人证明他们是用来发送电子邮件的账号的所有者。在某些情况下，ISP 会拒绝转发未经身份验证的电子邮件。为了确保实现最佳送达率，建议您对电子邮件进行身份验证。

**Topics**
+ [在 Amazon SES 中使用 DKIM 对电子邮件进行身份验证](send-email-authentication-dkim.md)
+ [在 Amazon SES 中使用 SPF 对电子邮件进行身份验证](send-email-authentication-spf.md)
+ [使用自定义 MAIL FROM 域](mail-from.md)
+ [遵守 Amazon SES 中的 DMARC 身份验证协议](send-email-authentication-dmarc.md)
+ [在 Amazon SES 中使用 BIMI](send-email-authentication-bimi.md)

# 在 Amazon SES 中使用 DKIM 对电子邮件进行身份验证
<a name="send-email-authentication-dkim"></a>

DomainKeys *Identified *Mail* (DKIM*) 是一种电子邮件安全标准，旨在确保声称来自特定域名的电子邮件确实得到了该域名所有者的授权。其使用公有密钥加密技术通过私有密钥对电子邮件进行签名。然后，收件人服务器就可以使用发布到域 DNS 的公有密钥来验证电子邮件的各个部分在传输过程中未被修改。

DKIM 签名为可选项。您可决定使用 DKIM 签名为您的电子邮件签名，以通过符合 DKIM 的电子邮件提供商提高送达率。Amazon SES 提供三种使用 DKIM 签名为您的邮件签名的选项：
+ **Easy DKIM**：SES 生成公有/私有密钥对，并自动将 DKIM 签名添加到您通过该身份发送的每封邮件，请参阅[Amazon SES 中的 Easy DKIM](send-email-authentication-dkim-easy.md)。
+ D@@ **eterministic Easy DKIM (DEED)**： AWS 区域 通过创建副本身份，自动继承 DKIM 签名属性的副本身份作为使用 Easy DKIM 的父身份，使您能够在多个之间保持一致的 DKIM 签名，请参阅。[在 Amazon SES 中使用 Deterministic Easy DKIM（DEED）](send-email-authentication-dkim-deed.md)
+ **BYODKIM（自带 DKIM）**：您提供自己的公有/私有密钥对，而 SES 将 DKIM 签名添加到您通过该身份发送的每封邮件，请参阅[提供 Amazon SES 中您自己的 DKIM 身份验证令牌 (BYODKIM)](send-email-authentication-dkim-bring-your-own.md)。
+ **手动添加 DKIM 签名**：您将自己的 DKIM 签名添加到使用 `SendRawEmail` API 发送的电子邮件，请参阅[Amazon SES 中的手动 DKIM 签名](send-email-authentication-dkim-manual.md)。

## DKIM 签名密钥长度
<a name="send-email-authentication-dkim-1024-2048"></a>

由于许多 DNS 提供商现在完全支持 DKIM 2048 位 RSA 加密，Amazon SES 还支持 DKIM 2048 以允许对电子邮件进行更安全的身份验证，因此当您从 API 或控制台配置 Easy DKIM 时，请将其用作原定设置的密钥长度。2048 位密钥也可以在自带 DKIM (BYODKIM) 中设置和使用，其中您的签名密钥长度必须至少为 1024 位，但不超过 2048 位。

为了安全和电子邮件的送达率，当使用 Easy DKIM 配置时，您可以选择使用 1024 和 2048 位密钥长度，并且在任何 DNS 提供商仍不支持 2048 位导致问题时，可以灵活地返回到 1024 位。*创建新身份时，除非指定 1024 位，否则默认情况下将使用 DKIM 2048 创建身份。*

为了保持传输中电子邮件的送达率，您可以更改 DKIM 密钥长度的频率将受到限制。这些限制包括：
+ 无法切换到与已配置的密钥长度相同的密钥长度。
+ 无法在 24 小时内多次切换到不同的密钥长度（除非这是该时间段内第一次降级到 1024 位）。

当您的电子邮件在传输过程中时，DNS 会使用您的公有密钥验证您的电子邮件；因此，如果您更改密钥过快或频繁，DNS 可能无法对您的电子邮件进行 DKIM 身份验证，因为前一个密钥可能已失效，因此，这些限制可防止出现这种情况。

## DKIM 注意事项
<a name="send-email-authentication-dkim-easy-considerations"></a>

当您使用 DKIM 对电子邮件进行身份验证时，以下规则适用：
+ 您只需为在“发件人”地址中使用的域设置 DKIM。您无需为在“退回路径”或“回复对象”地址中使用的域设置 DKIM。
+ Amazon SES 已在多个 AWS 地区推出。如果您使用多个 AWS 区域发送电子邮件，则必须在每个区域中都完成 DKIM 设置过程才能确保您的所有电子邮件都进行 DKIM 签名。
+ 由于从父域继承 DKIM 属性，当您通过 DKIM 身份验证验证域时：
  + DKIM 身份验证会应用到该域的全部子域。
    + 如果您不希望子域使用 DKIM 身份验证，子域的 DKIM 设置可以通过禁用集成以及在未来重新启用的功能覆盖父域的设置。
  + DKIM 身份验证还将应用于由在其地址中引用 DKIM 已验证域的电子邮件身份发出的全部电子邮件。
    + 如果您想要发送电子邮件而不使用 DKIM 身份验证，电子邮件地址的 DKIM 设置可以通过禁用集成以及在未来重新启用的功能覆盖子域的设置（若适用）。

## 了解继承的 DKIM 签名属性
<a name="dkim-easy-setup-email-key-points"></a>

重要的是，首先要理解，如果域配置了 DKIM，无论使用的是 Easy DKIM 还是 BYODKIM，电子邮件地址标识都会从其父域继承其 DKIM 签名属性。因此，在电子邮件地址标识上禁用或启用 DKIM 签名实际上是基于以下关键事实覆盖域的 DKIM 签名属性：
+ 如果您已为电子邮件地址所属于的域设置了 DKIM，则无需再为电子邮件地址设置 DKIM。
  + 在为域设置 DKIM 时，Amazon SES 通过从父域继承的 DKIM 属性，自动认证来自该域上每个地址的每一封邮件。
+ 特定电子邮件地址标识的 DKIM 设置*自动覆盖地址所属的父域或子域（如适用）*的设置。

由于电子邮件地址身份的 DKIM 签名属性是从父域继承的，因此如果您计划覆盖这些属性，则必须记住覆盖的层次规则，如下表所述。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/ses/latest/dg/send-email-authentication-dkim.html)

通常不建议禁用您的 DKIM 签名，因为这有可能损害您的发件人声誉，并且会增加您发送的邮件转到垃圾邮件或垃圾邮件文件夹或域名被欺骗的风险。

但是，对于任何特定的使用情形或外围业务决策，可以覆盖电子邮件地址标识上的域继承的 DKIM 签名属性，您可能必须永久或临时禁用 DKIM 签名，或者在以后重新将其启用。请参阅[覆盖在电子邮件地址身份上继承的 DKIM 签名](send-email-authentication-dkim-easy-managing.md#send-email-authentication-dkim-easy-setup-email)。

# Amazon SES 中的 Easy DKIM
<a name="send-email-authentication-dkim-easy"></a>

为域身份设置 Easy DKIM 后，Amazon SES 会自动向您从该身份发送的每封电子邮件添加一个 2048 位的 DKIM 密钥。您可使用 Amazon SES 控制台或者使用 API 来配置 Easy DKIM。

**注意**  
要设置 Easy DKIM，您必须修改域的 DNS 设置。如果您使用 Route 53 作为 DNS 提供商，Amazon SES 可以自动为您创建适当的记录。如果您使用其他 DNS 提供商，请参阅您的提供商的文档来了解有关为您的域更改 DNS 设置的更多信息。

**警告**  
如果您当前启用了 BYODKIM 并且正在迁移到 Easy DKIM，请注意，在设置 Easy DKIM 且您的 DKIM 状态处于待定状态时，Amazon SES 不会使用 BYODKIM 对您的电子邮件进行签名。从您进行调用以启用 Easy DKIM（通过 API 或控制台）的那一刻到 SES 可以确认 DNS 配置的那一刻之间，SES 可能会在没有 DKIM 签名的情况下发送您的电子邮件。因此，建议使用中间步骤从一种 DKIM 签名方法迁移到另一种（例如，使用启用了 BYODKIM 的域的子域，然后在 Easy DKIM 验证通过后将其删除），或者在应用程序停机期间（如果有）执行此活动。

## 为已验证的域身份设置 Easy DKIM
<a name="send-email-authentication-dkim-easy-setup-domain"></a>

此部分的过程经过简化，旨在展示在您已创建的域身份上配置 Easy DKIM 所需的步骤。如果您尚未创建域身份，或要查看用于自定义域身份的全部可用选项，如使用原定设置配置集、自定义 MAIL FROM 域和标签等，请参阅[创建域身份](creating-identities.md#verify-domain-procedure)。

创建 Easy DKIM 域身份中有一段是配置其基于 DKM 的验证，您可以选择接受 2048 位的 Amazon SES 原定设置值，或选择 1024 位覆盖默认值。有关 DKIM 签名密钥长度以及如何更改密钥长度的详情，请参阅 [DKIM 签名密钥长度](send-email-authentication-dkim.md#send-email-authentication-dkim-1024-2048)。

**为域设置 Easy DKIM**

1. 登录 AWS 管理控制台 并打开 Amazon SES 控制台，网址为[https://console.aws.amazon.com/ses/](https://console.aws.amazon.com/ses/)。

1. 在导航窗格中的**配置**下，选择**身份**。

1. 在身份列表中，选择**身份类型**为*域*的身份。
**注意**  
如果需要创建或验证域，请参阅 [创建域身份](creating-identities.md#verify-domain-procedure)。

1. 在 “**身份验证**” 选项卡下的 “**DomainKeys已识别邮件 (DKIM)**” 容器中，选择 “**编辑”**。

1. 在**高级 DKIM 设置**容器中，选择**身份类型**字段中的 **Easy DKIM** 按钮。

1. 在 **DKIM 签名密钥长度**字段中，选择 [**RSA\$12048\$1BIT** 或 **RSA\$11024\$1BIT**](send-email-authentication-dkim.md#send-email-authentication-dkim-1024-2048)。

1. 在 **DKIM 签名**字段中，选中**已启用**复选框。

1. 选择 **Save changes**（保存更改）。

1. 在使用 Easy DKIM 配置您的域身份以后，必须与您的 DNS 提供商完成验证过程 - 继续转到[与您的 DNS 提供商一起验证 DKIM 域身份](creating-identities.md#just-verify-domain-proc)并执行适用于 Easy DKIM 的 DNS 身份验证过程。

## 更改身份的 Easy DKIM 签名密钥长度
<a name="send-email-authentication-dkim-easy-managing-change-key-length"></a>

本部分中的流程展示了如何轻松更改签名算法所需的 Easy DKIM 位数。虽然始终首选 2048 位签名长度，以提供增强安全性，但在某些情况下，也可能需要使用 1024 位长度，例如必须使用仅支持 DKIM 1024 的 DNS 提供商。

为了保持传输中电子邮件的送达率，您可以更改或改回 DKIM 密钥长度的频率将受到限制。

当您的电子邮件在传输过程中时，DNS 会使用您的公有密钥验证您的电子邮件；因此，如果您更改密钥过快或频繁，DNS 可能无法对您的电子邮件进行 DKIM 身份验证，因为前一个密钥可能已失效，因此，以下限制可防止出现这种情况：
+ 无法切换到与已配置的密钥长度相同的密钥长度。
+ 无法在 24 小时内多次切换到不同的密钥长度（除非这是该时间段内第一次降级到 1024 位）。

在使用以下过程更改密钥长度时，如果您违反了其中一项限制，控制台将返回一个错误条，指出*您提供的输入无效*，并说明其无效的原因。

**更改 DKIM 签名密钥长度位数的步骤**

1. 登录 AWS 管理控制台 并打开 Amazon SES 控制台，网址为[https://console.aws.amazon.com/ses/](https://console.aws.amazon.com/ses/)。

1. 在导航窗格中的 **Configuration**（配置）下，选择 **Verified identities**（已验证身份）。

1. 在身份列表中，选择要更改其 DKIM 签名密钥长度的身份。

1. 在 “**身份验证**” 选项卡下的 “**DomainKeys已识别邮件 (DKIM)**” 容器中，选择 “**编辑”**。

1. 在**高级 DKIM 设置**容器中，选择 **DKIM 签名密钥长度**字段中的 [**RSA\$12048\$1BIT** 或 **RSA\$11024\$1BIT**](send-email-authentication-dkim.md#send-email-authentication-dkim-1024-2048)。

1. 选择 **Save changes**（保存更改）。

# 在 Amazon SES 中使用 Deterministic Easy DKIM（DEED）
<a name="send-email-authentication-dkim-deed"></a>

Deterministic Easy DKIM (DEED) 为管理多个 DKIM 配置提供了一种解决方案。 AWS 区域通过简化 DNS 管理并确保一致的 DKIM 签名，DEED 帮助您简化多区域电子邮件发送操作，同时保持强大的电子邮件身份验证实践。

## 什么是 Deterministic Easy DKIM（DEED）？
<a name="what-is-deed"></a>

[Deterministic Easy DKIM (DEED) 是一项功能，它 AWS 区域 基于配置了 Easy DKIM 的父域在所有域中生成一致的 DKIM 令牌。](send-email-authentication-dkim-easy.md)这使您可以复制不同身份 AWS 区域 ，这些身份会自动继承和维护与当前使用 Easy DKIM 配置的父身份相同的 DKIM 签名配置。使用 DEED，您只需要为父身份发布一次 DNS 记录，副本身份将使用相同的 DNS 记录来验证域所有权和管理 DKIM 签名。

通过简化 DNS 管理并确保一致的 DKIM 签名，DEED 帮助您简化多区域电子邮件发送操作，同时保持最佳的电子邮件身份验证实践。

讨论 DEED 时使用的术语：
+ **父身份**：一个配置了 Easy DKIM 的已验证身份，用作副本身份 DKIM 配置的源。
+ **副本身份**：父身份的副本，共享相同的 DNS 设置和 DKIM 签名配置。
+ **父区域**：设置父身份的 AWS 区域 。
+ **副本区域**：设置副本身份的 AWS 区域 。
+ **DEED 身份**：任何用作父身份或副本身份的身份。（当创建新身份时，它最初被视为常规（非 DEED）身份。但是，一旦创建了副本，该身份就被视为 DEED 身份。）

使用 DEED 的主要好处包括：
+ **简化的 DNS 管理**：仅为父身份发布一次 DNS 记录。
+ **更轻松的多区域操作**：简化将电子邮件发送操作扩展到新区域的过程。
+ **减少管理开销**：从父身份集中管理 DKIM 配置。

## Deterministic Easy DKIM（DEED）的工作原理
<a name="how-deed-works"></a>

当您创建副本身份时，Amazon SES 会自动将 DKIM 签名密钥从父身份复制到副本身份。对父身份进行的任何后续 DKIM 密钥轮换或密钥长度更改都会自动传播到所有副本身份。

该过程涉及以下工作流程：

1.  AWS 区域 使用 Easy DKIM 在中创建家长身份。

1. 设置父身份所需的 DNS 记录。

1. 在其他中创建副本身份 AWS 区域，指定父身份的域名和 DKIM 签名区域。

1. Amazon SES 自动将父级的 DKIM 配置复制到副本身份。

重要注意事项：
+ 您不能创建已经是副本的身份的副本。
+ 父身份必须启用 [Easy DKIM](send-email-authentication-dkim-easy.md)：您不能创建 BYODKIM 或手动签名身份的副本。
+ 在删除所有副本身份之前，无法删除父身份。

## 使用 DEED 设置副本身份
<a name="setting-up-replica-identity"></a>

本节将提供示例，向您展示如何使用 DEED 创建和验证副本身份以及所需的必要权限。

**Topics**
+ [创建副本身份](#creating-replica-identity)
+ [验证副本身份配置](#verifying-replica-identity)
+ [使用 DEED 所需的权限](#required-permissions)

### 创建副本身份
<a name="creating-replica-identity"></a>

要创建副本身份：

1. 在要创建副本身份的 AWS 区域 位置中，打开 SES 控制台，网址为[https://console.aws.amazon.com/ses/](https://console.aws.amazon.com/ses/)。

   （在 SES 控制台中，副本身份被称为*全局身份*。）

1. 在导航窗格中，选择**身份**。

1. 选择**创建身份**。

1. 在**身份类型**下选择**域**，并输入您要复制并作为父身份的配置了 Easy DKIM 的现有身份的域名。

1. 展开**高级 DKIM 设置**并选择 **Deterministic Easy DKIM**。

1. 从**父区域**下拉菜单中，选择一个父区域，其中存在与您为全局（副本）身份输入的名称相同的、经过 Easy DKIM 签名的身份。（您的副本区域默认为您登录 SES 控制台时所在的区域。）

1. 确保已启用 **DKIM 签名**。

1. （可选）向您的域身份添加一个或多个**标签**。

1. 查看配置并选择**创建身份**。

使用 AWS CLI：

要基于配置了 Easy DKIM 的父身份创建副本身份，您需要指定父级的域名、您要创建副本身份的区域以及父级的 DKIM 签名区域，如本例所示：

```
aws sesv2 create-email-identity --email-identity example.com --region us-west-2 --dkim-signing-attributes '{"DomainSigningAttributesOrigin": "AWS_SES_US_EAST_1"}'
```

在上述示例中：

1. *example.com*替换为正在复制的父域身份。

1. *us-west-2*替换为要创建副本域身份的区域。

1. *AWS\$1SES\$1US\$1EAST\$11*替换为父级的 DKIM 签名区域，该区域代表其 Easy DKIM 签名配置，该配置将被复制到副本身份。
**注意**  
前`AWS_SES_`缀表示 DKIM 是使用 Easy DKIM 为父身份配置`US_EAST_1`的，也是它的 AWS 区域 创建位置。

### 验证副本身份配置
<a name="verifying-replica-identity"></a>

创建副本身份后，您可以验证它是否已使用父身份的 DKIM 签名配置正确配置。

**要验证副本身份，请执行以下操作：**

1. 在创建副本身份 AWS 区域 的位置，打开 SES 控制台，网址为[https://console.aws.amazon.com/ses/](https://console.aws.amazon.com/ses/)。

1. 在导航窗格中，选择**身份**，然后从**身份**表中选择要验证的身份。

1. 在**身份验证**选项卡下，**DKIM 配置**字段将指示状态，而**父区域**字段将指示该身份使用 DEED 进行 DKIM 签名配置的区域。

使用 AWS CLI：

使用 `get-email-identity` 命令，指定副本的域名和区域：

```
aws sesv2 get-email-identity --email-identity example.com --region us-west-2
```

响应将在 `SigningAttributesOrigin` 参数中包含父区域的值，表示副本身份已成功配置了父身份的 DKIM 签名配置：

```
{
  "DkimAttributes": {
    "SigningAttributesOrigin": "AWS_SES_US_EAST_1"
  }
}
```

### 使用 DEED 所需的权限
<a name="required-permissions"></a>

要使用 DEED，您需要：

1. 在副本区域创建电子邮件身份的标准权限。

1. 从父区域复制 DKIM 签名密钥的权限。

#### DKIM 复制的示例 IAM 策略
<a name="example-iam-policy"></a>

以下策略允许从父身份到指定副本区域的 DKIM 签名密钥复制：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowDKIMReplication",
      "Effect": "Allow",
      "Action": "ses:ReplicateEmailIdentityDKIMSigningKey",
      "Resource": "arn:aws:ses:us-east-1:123456789124:identity/example.com",
      "Condition": {
        "ForAllValues:StringEquals": {
           "ses:ReplicaRegion": ["us-east-1", "us-east-1"]
        }
      }
    }
  ]
}
```

------

## 最佳实践
<a name="deed-best-practices"></a>

推荐以下最佳实践：
+ **规划您的父区域和副本区域**：仔细考虑您选择的父区域，因为它将是副本区域中使用的 DKIM 配置的真实来源。
+ **使用一致的 IAM 策略**：确保您的 IAM 策略允许在所有目标区域进行 DKIM 复制。
+ **保持父身份活跃**：请记住，您的副本身份继承了父身份的 DKIM 签名配置，由于这种依赖性，在删除所有副本身份之前，您无法删除父身份。

## 问题排查
<a name="troubleshooting"></a>

如果您遇到 DEED 问题，请考虑以下事项：
+ **验证错误**：确保您具有 DKIM 复制所需的必要权限。
+ **复制延迟**：允许一些时间让复制完成，尤其是在创建新副本身份时。
+ **DNS 问题**：验证父身份的 DNS 记录是否正确设置和传播。

# 提供 Amazon SES 中您自己的 DKIM 身份验证令牌 (BYODKIM)
<a name="send-email-authentication-dkim-bring-your-own"></a>

作为使用 [Easy DKIM](send-email-authentication-dkim-easy.md) 的替代方法，您可以改为使用自己的公有-私有密钥对配置 DKIM 身份验证。此过程称为*自带 DKIM*（*BYODKIM*）。

使用 BYODKIM，可以使用单个 DNS 记录为您的域配置 DKIM 身份验证，而不是使用 Easy DKIM，后者要求您发布三个单独的 DNS 记录。此外，使用 BYODKIM，您可以根据需要经常为您的域轮换 DKIM 密钥。

**Topics**
+ [步骤 1：创建密钥对](#send-email-authentication-dkim-bring-your-own-create-key-pair)
+ [步骤 2：将选择器和公有密钥添加到 DNS 提供商的域配置中](#send-email-authentication-dkim-bring-your-own-update-dns)
+ [步骤 3：配置并验证域以使用 BYODKIM](#send-email-authentication-dkim-bring-your-own-configure-identity)

**警告**  
如果您当前启用了 Easy DKIM 并且正在迁移到 BYODKIM，请注意，在设置 BYODKIM 且您的 DKIM 状态处于待定状态时，Amazon SES 将不会使用 Easy DKIM 对您的电子邮件签名。从您进行调用以启用 BYODKIM（通过 API 或控制台）的那一刻到 SES 可以确认 DNS 配置的那一刻之间，SES 可能会在没有 DKIM 签名的情况下发送您的电子邮件。因此，建议使用中间步骤从一种 DKIM 签名方法迁移到另一种（例如，使用启用了 Easy DKIM 的域的子域，然后在 BYODKIM 验证通过后将其删除），或者在应用程序停机期间（如果有）执行此活动。

## 步骤 1：创建密钥对
<a name="send-email-authentication-dkim-bring-your-own-create-key-pair"></a>

要使用自带 DKIM 功能，您需要先创建 RSA 密钥对。

生成的私有密钥必须为 PKCS \$11 或 PKCS \$18 两种格式之一，使用至少 1024 位 RSA 加密（至多 2048 位），并使用 base64[（PEM）](https://en.wikipedia.org/wiki/Privacy-Enhanced_Mail)编码进行编码。有关 DKIM 签名密钥长度以及如何更改密钥长度的详情，请参阅 [DKIM 签名密钥长度](send-email-authentication-dkim.md#send-email-authentication-dkim-1024-2048)。

**注意**  
您可以使用第三方应用程序和工具生成 RSA 密钥对，只要私有密钥是使用至少 1024 位 RSA 加密（至多 2048 位）生成并使用 base64 [(PEM)](https://en.wikipedia.org/wiki/Privacy-Enhanced_Mail) 编码进行编码的。

在以下过程中，使用大多数 Linux、macOS 或 Unix 操作系统中内置的 `openssl genrsa` 命令创建密钥对的示例代码将自动使用 base64 [(PEM)](https://en.wikipedia.org/wiki/Privacy-Enhanced_Mail) 编码。

**使用 Linux、macOS 或 Unix 命令行来创建密钥对**

1. 在命令行中，输入以下命令生成私钥，*nnnn*替换为至少为 1024 且最多 2048 的位长度：

   ```
   openssl genrsa -f4 -out private.key nnnn
   ```

1. 在命令行中，输入以下命令可生成公有密钥：

   ```
   openssl rsa -in private.key -outform PEM -pubout -out public.key
   ```

## 步骤 2：将选择器和公有密钥添加到 DNS 提供商的域配置中
<a name="send-email-authentication-dkim-bring-your-own-update-dns"></a>

现在您已创建密钥对，您必须将公有密钥作为 TXT 记录添加到您的域的 DNS 配置中。

**将公有密钥添加到您的域的 DNS 配置中**

1. 登录您的 DNS 提供商或托管提供商的管理控制台。

1. 将新的文本记录添加到您的域的 DNS 配置中。记录应该使用以下格式：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/ses/latest/dg/send-email-authentication-dkim-bring-your-own.html)

   在前面的示例中，进行以下更改：
   + *selector*替换为标识密钥的唯一名称。
**注意**  
少数 DNS 提供商不允许记录名称中包含下划线 (\$1)。但是，DKIM 记录名称中的下划线是必需的。如果您的 DNS 提供商不允许您在记录名称中输入下划线，请联系提供商的客户支持团队以获取帮助。
   + *example.com*用您的域名替换。
   + *yourPublicKey*替换为您之前创建的公钥，并添加`p=`前缀，如上面的 “*值*” 列所示。
**注意**  
当您将公有密钥发布（添加）到 DNS 提供商时，必须按如下所示进行格式化：  
您必须删除生成的公有密钥的第一行和最后一行（分别为 `-----BEGIN PUBLIC KEY-----` 和 `-----END PUBLIC KEY-----`）。此外，您还必须删除生成的公有密钥中的换行符。产生的值是一个字符串，不包含空格或换行符。
您必须包含 `p=` 前缀，如上表中的 *Value*（值）列所示。

   不同的提供商具有不同的 DNS 记录更新过程。下表包含的链接指向几个广泛使用的 DNS 提供商的文档。此列表并不详尽无遗，也不表示认可；同样，如果您的 DNS 提供商未列出，这并不意味着您不能将该域与 Amazon SES 一起使用。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/ses/latest/dg/send-email-authentication-dkim-bring-your-own.html)

## 步骤 3：配置并验证域以使用 BYODKIM
<a name="send-email-authentication-dkim-bring-your-own-configure-identity"></a>

您可以使用控制台或 AWS CLI为新域（即当前不用于通过 Amazon SES 发送电子邮件的域）以及现有域（即您已设置为与 Amazon SES 一起使用的域）设置 BYODKIM。在使用本节中的 AWS CLI 步骤之前，必须首先安装和配置 AWS CLI。有关更多信息，请参阅《[AWS Command Line Interface 用户指南》](https://docs.aws.amazon.com/cli/latest/userguide/)。

### 选项 1：创建使用 BYODKIM 的新域身份
<a name="send-email-authentication-dkim-bring-your-own-configure-identity-new-domain"></a>

此部分包含用于创建使用 BYODKIM 的新域身份的过程。新域身份是您之前尚未设置为使用 Amazon SES 发送电子邮件的域。

如果要配置现有域以使用 BYODKIM，请改为完成 [选项 2：配置现有域身份](#send-email-authentication-dkim-bring-your-own-configure-identity-existing-domain) 中的过程。

**从控制台使用 BYODKIM 创建身份**
+ 按照[创建域身份](creating-identities.md#verify-domain-procedure)中的过程操作，当您到达步骤 8 时，请按照 BYODKIM 特定的说明进行操作。

**要使用 BYODKIM 创建身份，请访问 AWS CLI**

要配置新域，请使用 Amazon SES API 中的 `CreateEmailIdentity` 操作。

1. 在文本编辑器中，粘贴以下代码：

   ```
   {
       "EmailIdentity":"example.com",
       "DkimSigningAttributes":{
           "DomainSigningPrivateKey":"privateKey",
           "DomainSigningSelector":"selector"
       }
   }
   ```

   在前面的示例中，进行以下更改：
   + *example.com*替换为您要创建的域。
   + *privateKey*用您的私钥替换。
**注意**  
您必须删除生成的私有密钥的第一行和最后一行（分别为 `-----BEGIN PRIVATE KEY-----` 和 `-----END PRIVATE KEY-----`）。此外，还必须删除生成的私有密钥中的换行符。产生的值是一个字符串，不包含空格或换行符。
   + *selector*替换为您在域名的 DNS 配置中创建 TXT 记录时指定的唯一选择器。

   完成后，将文件另存为 `create-identity.json`。

1. 在命令行输入以下命令：

   ```
   aws sesv2 create-email-identity --cli-input-json file://path/to/create-identity.json
   ```

   在前面的命令中，*path/to/create-identity.json*替换为您在上一步中创建的文件的完整路径。

### 选项 2：配置现有域身份
<a name="send-email-authentication-dkim-bring-your-own-configure-identity-existing-domain"></a>

此部分包含用于更新现有域身份以使用 BYODKIM 的过程。现有域身份是您已设置以使用 Amazon SES 发送电子邮件的域。

**从控制台使用 BYODKIM 更新域身份**

1. 登录 AWS 管理控制台 并打开 Amazon SES 控制台，网址为[https://console.aws.amazon.com/ses/](https://console.aws.amazon.com/ses/)。

1. 在导航窗格中的 **Configuration**（配置）下，选择 **Verified identities**（已验证身份）。

1. 在身份列表中，选择**身份类型**为*域*的身份。
**注意**  
如果需要创建或验证域，请参阅 [创建域身份](creating-identities.md#verify-domain-procedure)。

1. 在 “**身份验证**” 选项卡下的 “**DomainKeys 已识别邮件 (DKIM)**” 窗格中，选择 “**编辑”**。

1. 在 **Advanced DKIM settings**（高级 DKIM 设置）窗格中，选择 **Identity type**（身份类型）字段中的 **Provide DKIM authentication token (BYODKIM)** [提供 DKIM 身份验证令牌 (BYODKIM)] 按钮。

1. 对于 **Private key**（私有密钥），粘贴先前生成的私有密钥。
**注意**  
您必须删除生成的私有密钥的第一行和最后一行（分别为 `-----BEGIN PRIVATE KEY-----` 和 `-----END PRIVATE KEY-----`）。此外，还必须删除生成的私有密钥中的换行符。产生的值是一个字符串，不包含空格或换行符。

1. 对于**选择器名称**，输入您在域的 DNS 设置中指定的选择器的名称。

1. 在 **DKIM 签名**字段中，选中**已启用**复选框。

1. 选择**保存更改**。

**要使用 BYODKIM 更新域身份，请访问 AWS CLI**

要配置现有域，请使用 Amazon SES API 中的 `PutEmailIdentityDkimSigningAttributes` 操作。

1. 在文本编辑器中，粘贴以下代码：

   ```
   {
       "SigningAttributes":{
           "DomainSigningPrivateKey":"privateKey",
           "DomainSigningSelector":"selector"
       },
       "SigningAttributesOrigin":"EXTERNAL"
   }
   ```

   在前面的示例中，进行以下更改：
   + *privateKey*用您的私钥替换。
**注意**  
您必须删除生成的私有密钥的第一行和最后一行（分别为 `-----BEGIN PRIVATE KEY-----` 和 `-----END PRIVATE KEY-----`）。此外，还必须删除生成的私有密钥中的换行符。产生的值是一个字符串，不包含空格或换行符。
   + *selector*替换为您在域名的 DNS 配置中创建 TXT 记录时指定的唯一选择器。

   完成后，将文件另存为 `update-identity.json`。

1. 在命令行输入以下命令：

   ```
   aws sesv2 put-email-identity-dkim-signing-attributes --email-identity example.com --cli-input-json file://path/to/update-identity.json
   ```

   在前面的命令中，进行以下更改：
   + *path/to/update-identity.json*替换为您在上一步中创建的文件的完整路径。
   + *example.com*替换为您要更新的域名。

### 验证使用 BYODKIM 的域的 DKIM 状态
<a name="send-email-authentication-dkim-bring-your-own-configure-identity-check"></a>

**从控制台验证域的 DKIM 状态**

配置域以使用 BYODKIM 后，您可以使用 SES 控制台验证已正确地配置 DKIM。

1. 登录 AWS 管理控制台 并打开 Amazon SES 控制台，网址为[https://console.aws.amazon.com/ses/](https://console.aws.amazon.com/ses/)。

1. 在导航窗格中的**配置**下，选择**已验证身份**。

1. 在身份列表中，选择要验证其 DKIM 状态的身份。

1. 对 DNS 设置的更改最长可能需要 72 小时才能生效。一旦 Amazon SES 在域的 DNS 设置中检测到全部必需的 DKIM 记录，则验证过程完成。如果所有配置都正确，则您的域名的 **DKIM 配置**字段将在已**DomainKeys识别邮件 (DKIM)** 窗格中显示**成功**，而**身份状态**字段在 “**摘要**” 窗格中显示**已验证**。

**要验证域名的 DKIM 状态，请使用 AWS CLI**

将域配置为使用 BYODKIM 后，您可以使用该 GetEmailIdentity操作来验证 DKIM 的配置是否正确。
+ 在命令行输入以下命令：

  ```
  aws sesv2 get-email-identity --email-identity example.com
  ```

  在前面的命令中，*example.com*用您的域名替换。

  此命令返回一个 JSON 对象，该对象包含类似于以下示例的部分。

  ```
  {
      ...
      "DkimAttributes": { 
          "SigningAttributesOrigin": "EXTERNAL",
          "SigningEnabled": true,
          "Status": "SUCCESS",
          "Tokens": [ ]
      },
      ...
  }
  ```

  如果以下所有条件均成立，则表示已为域正确配置 BYODKIM：
  + `SigningAttributesOrigin` 属性的值为 `EXTERNAL`。
  + `SigningEnabled` 的值为 `true`。
  + `Status` 的值为 `SUCCESS`。

# 管理 Easy DKIM 和 BYODKIM
<a name="send-email-authentication-dkim-easy-managing"></a>

使用基于 Web 的 Amazon SES 控制台或 Amazon SES API，您可以为已通过 Easy DKIM 或 BYODKIM 验证的身份管理 DKIM 设置。您可以使用其中任一方法来获取身份的 DKIM 记录，或者为身份启用或禁用 Easy DKIM 签名。

## 获取身份的 DKIM 记录
<a name="send-email-authentication-dkim-easy-managing-obtain-records"></a>

您可以随时使用 Amazon SES 控制台获取您的域或电子邮件地址的 DKIM 记录。

**使用控制台获取身份的 DKIM 记录**

1. 登录 AWS 管理控制台 并打开 Amazon SES 控制台，网址为[https://console.aws.amazon.com/ses/](https://console.aws.amazon.com/ses/)。

1. 在导航窗格中的**配置**下，选择**已验证身份**。

1. 在身份列表中，选择要获取其 DKIM 记录的身份。

1. 在身份详细信息页面的**身份验证**选项卡上，展开**查看 DNS 记录**。

1. 复制在此部分显示的三条别名记录（如果您使用 Easy DKIM）或 TXT 记录（如果您使用 BYODKIM）。或者，您可以选择**下载 .csv 记录集**以将记录副本保存到您的电脑中。

   下图显示了展开后的 **View DNS records**（查看 DNS 记录）部分显示的与 Easy DKIM 关联的别名记录的示例。  
![\[\]](http://docs.aws.amazon.com/zh_cn/ses/latest/dg/images/dkim_existing_dns.png)

您还可以使用 Amazon SES API 来获取身份的 DKIM 记录。与 API 交互的常用方法是使用 AWS CLI。

**要获取身份的 DKIM 记录，请使用 AWS CLI**

1. 在命令行处，键入以下命令：

   ```
   aws ses get-identity-dkim-attributes --identities "example.com"
   ```

   在前面的示例中，*example.com*替换为您想要获取 DKIM 记录的身份。您可以指定电子邮件地址或域。

1. 此命令的输出包含一个 `DkimTokens` 部分，如以下示例所示：

   ```
   {
       "DkimAttributes": {
           "example.com": {
               "DkimEnabled": true,
               "DkimVerificationStatus": "Success",
               "DkimTokens": [
                   "hirjd4exampled5477y22yd23ettobi",
                   "v3rnz522czcl46quexamplek3efo5o6x",
                   "y4examplexbhyhnsjcmtvzotfvqjmdqoj"
               ]
           }
       }
   }
   ```

   您可以使用令牌创建添加到域的 DNS 设置中的 CNAME 记录。要创建 CNAME 记录，请使用以下模板：

   ```
   token1._domainkey.example.com CNAME token1.dkim.amazonses.com
   token2._domainkey.example.com CNAME token2.dkim.amazonses.com
   token3._domainkey.example.com CNAME token3.dkim.amazonses.com
   ```

   将的*token1*每个实例替换为您运行`get-identity-dkim-attributes`命令时收到的列表中的第一个标记，将的所有实例替换为列表中的第二个标记，并将的所有实例替换为列表中的第三个标记。*token2* *token3*

   例如，对上述示例中所示的令牌应用此模板会生成以下记录：

   ```
   hirjd4exampled5477y22yd23ettobi._domainkey.example.com CNAME hirjd4exampled5477y22yd23ettobi.dkim.amazonses.com
   v3rnz522czcl46quexamplek3efo5o6x._domainkey.example.com CNAME v3rnz522czcl46quexamplek3efo5o6x.dkim.amazonses.com
   y4examplexbhyhnsjcmtvzotfvqjmdqoj._domainkey.example.com CNAME y4examplexbhyhnsjcmtvzotfvqjmdqoj.dkim.amazonses.com
   ```

**注意**  
并非所有人都 AWS 区域 使用默认的 SES DKIM 域名，`dkim.amazonses.com`要查看您的地区是否使用特定区域的 DKIM 域，请查看中的 [DKIM 域名表](https://docs.aws.amazon.com/general/latest/gr/ses.html#ses_dkim_domains)。*AWS 一般参考*

## 为身份禁用 Easy DKIM
<a name="send-email-authentication-dkim-easy-managing-disabling"></a>

您可以使用 Amazon SES 控制台快速为身份禁用 DKIM 身份验证。

**为身份禁用 DKIM**

1. 登录 AWS 管理控制台 并打开 Amazon SES 控制台，网址为[https://console.aws.amazon.com/ses/](https://console.aws.amazon.com/ses/)。

1. 在导航窗格中的**配置**下，选择**已验证身份**。

1. 在身份列表中，选择要为其禁用 DKIM 的身份。

1. 在 “**身份验证**” 选项卡下的 “**DomainKeys已识别邮件 (DKIM)**” 容器中，选择 “**编辑”**。

1. 在 **Advanced DKIM settings**（高级 DKIM 设置）中，选中 **DKIM signatures**（DKIM 签名）字段中的 **Enabled**（已启用）复选框。

您还可以使用 Amazon SES API 为身份禁用 DKIM。与 API 交互的常用方法是使用 AWS CLI。

**要禁用身份的 DKIM，请使用 AWS CLI**
+ 在命令行处，键入以下命令：

  ```
  aws ses set-identity-dkim-enabled --identity example.com --no-dkim-enabled
  ```

  在前面的示例中，*example.com*替换为要禁用 DKIM 的身份。您可以指定电子邮件地址或域。

## 为身份启用 Easy DKIM
<a name="send-email-authentication-dkim-easy-managing-enabling"></a>

如果您之前为身份禁用了 DKIM，则可以使用 Amazon SES 控制台再次启用它。

**为身份启用 DKIM**

1. 登录 AWS 管理控制台 并打开 Amazon SES 控制台，网址为[https://console.aws.amazon.com/ses/](https://console.aws.amazon.com/ses/)。

1. 在导航窗格中的**配置**下，选择**已验证身份**。

1. 在身份列表中，选择要为其启用 DKIM 的身份。

1. 在 “**身份验证**” 选项卡下的 “**DomainKeys已识别邮件 (DKIM)**” 容器中，选择 “**编辑”**。

1. 在**高级 DKIM 设置**中，选中 **DKIM 签名**字段中的**已启用**复选框。

您还可以使用 Amazon SES API 为身份启用 DKIM。与 API 交互的常用方法是使用 AWS CLI。

**要为身份启用 DKIM，请使用 AWS CLI**
+ 在命令行处，键入以下命令：

  ```
  aws ses set-identity-dkim-enabled --identity example.com --dkim-enabled
  ```

  在前面的示例中，*example.com*替换为要为其启用 DKIM 的身份。您可以指定电子邮件地址或域。

## 覆盖在电子邮件地址身份上继承的 DKIM 签名
<a name="send-email-authentication-dkim-easy-setup-email"></a>

在此部分中，您将学习如何覆盖（禁用或启用）来自您已使用 Amazon SES 验证的特定电子邮件地址身份上的父域继承的 DKIM 签名属性。您只能对属于您已拥有的域的电子邮件地址身份执行此操作，因为 DNS 设置是在域级别配置的。

**重要**  
你不能 disable/enable DKIM 签名获取电子邮件地址身份...  
在您不拥有的域上。例如，您无法为注册 *gmail.com* 或 *hotmail.com* 地址切换 DKIM。
在您拥有但尚未在 Amazon SES 中验证的域名上，
在您拥有但尚未在域上启用 DKIM 签名的域名上。

本节包含以下主题：
+ [了解继承的 DKIM 签名属性](#dkim-easy-setup-email-key-points-mng)
+ [覆盖对电子邮件地址身份的 DKIM 签名（控制台）](#override-dkim-email-console-mng)
+ [覆盖对电子邮件地址身份的 DKIM 签名 (AWS CLI)](#override-dkim-email-cli-mng)

### 了解继承的 DKIM 签名属性
<a name="dkim-easy-setup-email-key-points-mng"></a>

重要的是，首先要理解，如果域配置了 DKIM，无论使用的是 Easy DKIM 还是 BYODKIM，电子邮件地址标识都会从其父域继承其 DKIM 签名属性。因此，在电子邮件地址标识上禁用或启用 DKIM 签名实际上是基于以下关键事实覆盖域的 DKIM 签名属性：
+ 如果您已为电子邮件地址所属于的域设置了 DKIM，则无需再为电子邮件地址设置 DKIM。
  + 在为域设置 DKIM 时，Amazon SES 通过从父域继承的 DKIM 属性，自动认证来自该域上每个地址的每一封邮件。
+ 特定电子邮件地址标识的 DKIM 设置*自动覆盖地址所属的父域或子域（如适用）*的设置。

由于电子邮件地址身份的 DKIM 签名属性是从父域继承的，因此如果您计划覆盖这些属性，则必须记住覆盖的层次规则，如下表所述。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/ses/latest/dg/send-email-authentication-dkim-easy-managing.html)

通常不建议禁用您的 DKIM 签名，因为这有可能损害您的发件人声誉，并且会增加您发送的邮件转到垃圾邮件或垃圾邮件文件夹或域名被欺骗的风险。

但是，对于任何特定的使用情形或外围业务决策，可以覆盖电子邮件地址标识上的域继承的 DKIM 签名属性，您可能必须永久或临时禁用 DKIM 签名，或者在以后重新将其启用。

### 覆盖对电子邮件地址身份的 DKIM 签名（控制台）
<a name="override-dkim-email-console-mng"></a>

以下 SES 控制台过程向您介绍如何覆盖（禁用或启用）来自您已使用 Amazon SES 验证的特定电子邮件地址身份上的父域继承的 DKIM 签名属性。

**使用控制 disable/enable 台进行 DKIM 签名以获取电子邮件地址身份**

1. 登录 AWS 管理控制台 并打开 Amazon SES 控制台，网址为[https://console.aws.amazon.com/ses/](https://console.aws.amazon.com/ses/)。

1. 在导航窗格中的**配置**下，选择**已验证身份**。

1. 在身份列表中，选择 **Identity type**（身份类型）为 *Email address*（电子邮件地址）并且属于已验证域之一的身份。

1. 在 “**身份验证**” 选项卡下的 “**DomainKeys 已识别邮件 (DKIM)**” 容器中，选择 “**编辑”**。
**注意**  
仅当选定的电子邮件地址身份属于已经过 SES 验证的域时，才会显示 **Authentication**（身份验证）选项卡。如果您尚未验证域，请参阅 [创建域身份](creating-identities.md#verify-domain-procedure)。

1. 在 **DKIM signatures**（DKIM）签名字段中的**高级 DKIM 设置**下，清除**已启用**复选框以禁用 DKIM 签名，或者选中它以重新启用 DKIM 签名（如果先前已覆盖）。

1. 选择**保存更改**。

### 覆盖对电子邮件地址身份的 DKIM 签名 (AWS CLI)
<a name="override-dkim-email-cli-mng"></a>

以下示例使用 AWS CLI 带有 SES API 命令和参数，这些命令和参数将覆盖（禁用或启用）从父域继承的 DKIM 签名属性，该属性已通过您已通过 SES 验证的特定电子邮件地址身份。

**要使用 disable/enable DKIM 签署电子邮件地址身份 AWS CLI**
+  假设你拥有 *example.com* 域名，并且要禁用域的其中一个电子邮件地址的 DKIM 签名，请在命令行键入以下命令：

  ```
  aws sesv2 put-email-identity-dkim-attributes --email-identity marketing@example.com --no-signing-enabled
  ```

  1. *marketing@example.com*替换为要禁用 DKIM 签名的电子邮件地址身份。

  1. `--no-signing-enabled` 将禁用 DKIM 签名。要重新启用 DKIM 签名，请使用 `--signing-enabled`。

# Amazon SES 中的手动 DKIM 签名
<a name="send-email-authentication-dkim-manual"></a>

作为使用 Easy DKIM 的替代方案，您可以手动将 DKIM 签名添加到您的邮件，然后使用 Amazon SES 发送这些邮件。如果您选择手动对邮件进行签名，则必须首先创建 DKIM 签名。在创建邮件和 DKIM 签名后，可以使用 [SendRawEmail](https://docs.aws.amazon.com/ses/latest/APIReference/API_SendRawEmail.html) API 来发送它。

如果您决定手动对电子邮件进行签名，请考虑以下因素：
+ 您使用 Amazon SES 发送的每封邮件均包含引用 *amazonses.com* 的签名域的 DKIM 标头（即，它包含以下字符串：`d=amazonses.com`）。因此，如果您手动对邮件进行签名，邮件将包括*两个* DKIM 标头：一个用于您的域，一个由 Amazon SES 自动创建用于 *amazonses.com*。
+ Amazon SES 不验证您手动添加到邮件中的 DKIM 签名。如果邮件中的 DKIM 签名出现错误，则它可能会被电子邮件提供商拒绝。
+ 在对邮件进行签名时，应使用至少为 1024 位的位长度。
+ 不要对以下字段进行签名：Message-ID (邮件 ID)、Date (日期)、Return-Path (退回路径)、Bounces-To (退回到)。
**注意**  
如果您使用电子邮件客户端通过 Amazon SES SMTP 接口发送电子邮件，则您的客户端可能会自动对邮件进行 DKIM 签名。某些客户端可能会对其中一些字段进行签名。有关预设情况下对哪些字段进行签名的信息，请参阅您的电子邮件客户端文档。

# 在 Amazon SES 中使用 SPF 对电子邮件进行身份验证
<a name="send-email-authentication-spf"></a>

*发件人策略框架*（SPF）是一种电子邮件验证标准，旨在防止电子邮件欺骗。域所有者使用 SPF 来告知电子邮件提供商，允许哪些服务器从其域发送电子邮件。SPF 是在 [RFC 7208](https://tools.ietf.org/html/rfc7208) 中定义的。

您通过 Amazon SES 发送的邮件将自动使用 `amazonses.com` 的子域作为原定设置的 MAIL FROM 域。SPF 身份验证成功验证这些邮件，因为原定设置的 MAIL FROM 域与发送电子邮件的应用程序（在这种情况下为 SES）相匹配。因此，在 SES 中，SPF 是为您隐式设置的。

但是，如果您不想使用 SES 默认的 MAIL FROM 域，而是希望使用您拥有的域的子域，则在 SES 中称为使用*自定义* MAIL FROM 域。为此，它要求您为您的自定义 MAIL FROM 域发布您自己的 SPF 记录。此外，SES 还要求您设置 MX 记录，以便您的自定义 MAIL FROM 域可以接收电子邮件提供商向您发送的退回邮件和投诉通知。

**了解如何设置 SPF 身份验证**  
提供了使用 SPF 配置域以及如何在 [使用自定义 MAIL FROM 域](mail-from.md) 中发布 MX 和 SPF（类型为 TXT）记录的说明。

# 使用自定义 MAIL FROM 域
<a name="mail-from"></a>

当您发送电子邮件时，它具有两个指示其来源的地址：一个显示给邮件收件人的 From 地址，以及一个指示邮件来源的 MAIL FROM 地址。MAIL FROM 地址有时称作 *envelope sender*、*envelope from*、*bounce address* 或 *Return Path* 地址。邮件服务器使用 MAIL FROM 地址返回退回邮件和其他错误通知。通常，收件人只有在查看邮件的源代码时才能查看 MAIL FROM 地址。

Amazon SES 将您发送的邮件的 MAIL FROM 域设置为原定设置值，除非您指定自己的（自定义）域。本部分讨论设置自定义 MAIL FROM 域的好处，并包括设置过程。

## 为什么使用自定义 MAIL FROM 域？
<a name="mail-from-overview"></a>

您通过 Amazon SES 发送的邮件将自动使用 `amazonses.com` 的子域作为原定设置的 MAIL FROM 域。发件人策略框架（SPF）身份验证成功验证这些邮件，因为原定设置的 MAIL FROM 域与发送电子邮件的应用程序（在这种情况下为 SES）相匹配。

如果您不想使用 SES 原定设置 MAIL FROM 域，而是希望使用您拥有的域的子域，则在 SES 中称为使用*自定义* MAIL FROM 域。为此，它要求您为您的自定义 MAIL FROM 域发布您自己的 SPF 记录。此外，SES 还要求您设置 MX 记录，以便您的域可以接收电子邮件提供商向您发送的退回邮件和投诉通知。

通过使用自定义 MAIL FROM 域，您可以灵活地使用 SPF 和/或 DKIM 来实现[基于域的消息身份验证、报告和一致性（DMARC）](send-email-authentication-dmarc.md)验证。DMARC 使发件人的域能够指示从该域发送的电子邮件受一个或多个身份验证系统的保护。可通过以下两种方法实现 DMARC 验证：[通过 SPF 遵守 DMARC](send-email-authentication-dmarc.md#send-email-authentication-dmarc-spf)和[通过 DKIM 遵守 DMARC](send-email-authentication-dmarc.md#send-email-authentication-dmarc-dkim)。

## 选择自定义 MAIL FROM 域
<a name="mail-from-requirements"></a>

在下文中，术语 *MAIL FROM 域*始终是指您拥有的域的子域。您为自定义 MAIL FROM 域使用的此子域不得用于其他用途且必须满足以下要求：
+ MAIL FROM 域必须是经验证身份（电子邮件地址或域）的父域的子域。
+ MAIL FROM 域不应是您也用来从中发送电子邮件的子域。
+ MAIL FROM 域不应是您用于接收电子邮件的子域。

## 将 SPF 与自定义 MAIL FROM 域结合使用
<a name="send-email-authentication-spf-cmfd"></a>

*发件人策略框架*（SPF）是一种电子邮件验证标准，旨在防止电子邮件欺骗。您可以使用 SPF 配置您的自定义 MAIL FROM 域，以告诉电子邮件提供商允许哪些服务器从您的自定义 MAIL FROM 域发送电子邮件。SPF 是在 [RFC 7208](https://tools.ietf.org/html/rfc7208) 中定义的。

要设置 SPF，您要将 TXT 记录发布到您的自定义 MAIL FROM 域的 DNS 配置。此记录包含您授权使用您的自定义 MAIL FROM 域发送电子邮件的服务器的列表。当电子邮件提供商从您的自定义 MAIL FROM 域接收到邮件时，它将检查该域的 DNS 记录，以确保电子邮件是从授权服务器发送的。

如果您想使用此 SPF 记录来遵守 DMARC，则发件人地址中的域必须与 MAIL FROM 域匹配。请参阅[通过 SPF 遵守 DMARC](send-email-authentication-dmarc.md#send-email-authentication-dmarc-spf)。

下一节[配置自定义 MAIL FROM 域](#mail-from-set)将介绍如何为您的自定义 MAIL FROM 域设置 SPF。

## 配置自定义 MAIL FROM 域
<a name="mail-from-set"></a>

设置自定义 MAIL FROM 域的过程要求您将记录添加到该域的 DNS 配置中。SES 要求您发布 MX 记录，以便您的域可以接收电子邮件提供商向您发送的退回邮件和投诉通知。您还必须发布 SPF 记录（类型为 TXT），以证明 Amazon SES 经授权可从您的域发送电子邮件。

您可以为整个域或子域，也可以为单个电子邮件地址设置自定义 MAIL FROM 域。以下过程演示如何使用 Amazon SES 控制台来配置自定义 MAIL FROM 域。您也可以使用 [SetIdentityMailFromDomain](https://docs.aws.amazon.com/ses/latest/APIReference/API_SetIdentityMailFromDomain.html)API 操作配置自定义 MAIL FROM 域。

### 为已验证的域设置自定义 MAIL FROM 域
<a name="mail-from-setup-procedure-domain"></a>

这些过程向您演示了如何为整个域或子域配置自定义 MAIL FROM 域，以便从该域地址发送的所有消息都将使用此自定义 MAIL FROM 域。

**将经验证的域配置为使用指定的自定义 MAIL FROM 域**

1. 打开 Amazon SES 控制台，网址为[https://console.aws.amazon.com/ses/](https://console.aws.amazon.com/ses/)。

1. 在左侧导航面板中的**配置**下，选择**身份**。

1. 在身份列表中，选择要配置的身份，其中 **Identity type**（身份类型）是 **Domain**（域），以及 **Status**（状态）为 *Verified*（已验证）。

   1. 如果 **Status**（状态）是 *Unverified*（未核实），请在 [与您的 DNS 提供商一起验证 DKIM 域身份](creating-identities.md#just-verify-domain-proc) 完成过程以验证电子邮件地址的域。

1. 在**自定义 MAIL FROM 域**窗格中的屏幕底部，选择**编辑**。

1. 在 **General details**（一般细节）窗格中，执行以下操作：

   1. 选择 **Use a custom MAIL FROM domain**（使用自定义 MAIL FROM 域）复选框。

   1. 对于 **MAIL FROM Domain (MAIL FROM 域)**，输入要用作 MAIL FROM 子域的域。

   1. 对于 **Behavior on MX failure**（MX 失败时的行为），选择下列选项之一：
      + **使用原定设置的 MAIL FROM 域名** – 如果未正确设置自定义 MAIL FROM 域的 MX 记录，那么 Amazon SES 将使用 `amazonses.com` 的子域。子域名因您使用的 AWS 区域 Amazon SES 而异。
      + **拒绝邮件** – 如果未正确设置自定义 MAIL FROM 域的 MX 记录，那么 Amazon SES 将返回 `MailFromDomainNotVerified` 错误。您尝试从此域发送的电子邮件将被自动拒绝。

   1. 选择 **Save changes**（保存更改）- 您将会回到上一个屏幕。

1. 将 MX 和 SPF（类型为 TXT）记录发布到自定义 MAIL FROM 域的 DNS 服务器：

   在 **Custom MAIL FROM domain**（自定义 MAIL FROM 域）窗格中，**Publish DNS records**（发布 DNS 记录）表现在会显示您必须发布（添加）到域的 DNS 配置中的 MX 和 SPF（类型为 TXT）记录。这些记录使用下表中显示的格式。  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/ses/latest/dg/mail-from.html)

   在以上记录中，
   + *subdomain*。 *domain*。 *com*将填充你的 MAIL FROM 子域名
   + *region*将填充您要验证 MAIL FROM 域的名称（例如`us-west-2``us-east-1``eu-west-1`、或，等） AWS 区域 
   + 与 MX 值一起列出的数字 *10* 是邮件服务器的优先顺序，需要按照 DNS 提供商的 GUI 指定的单独值字段输入
   + SPF 的 TXT 记录值通常必须包含引号，但一些 DNS 提供商不需要它们。

   从 **Publish DNS records**（发布 DNS 记录）表中，通过选择每个值旁边的复制图标复制 MX 和 SPF（类型为 TXT）记录，然后将它们粘贴到 DNS 提供商 GUI 中的相应字段中。或者，您可以选择**下载 .csv 记录集**以将记录副本保存到您的电脑中。
**重要**  
发布 MX 和 SPF（类型 TXT）记录的具体过程取决于您的 DNS 或主机托管提供商。请参阅您的提供商的文档或联系他们，以获取有关将这些记录添加到您域 DNS 配置的信息。
要使用 Amazon SES 成功设置自定义 MAIL FROM 域，您必须仅将一条 MX 记录发布到您的 MAIL FROM 域的 DNS 服务器。如果 MAIL FROM 域有多条 MX 记录，则使用 Amazon SES 设置自定义 MAIL FROM 将失败。

   如果 Route 53 为您的 MAIL FROM 域提供 DNS 服务，并且您使用与 Route 53 相同的账户登录，则选择使用 R **oute 53 发布记录**。 AWS 管理控制台 DNS 记录将自动应用于您的域的 DNS 配置。

   如果使用其他 DNS 提供商，则必须手动将 DNS 记录发布到 MAIL FROM 域的 DNS 服务器。将 DNS 记录添加到域的 DNS 服务器的过程因您的网络托管服务或 DNS 提供商而异。

   为您的域发布 DNS 记录的过程取决于您使用的 DNS 提供商。下表包含的链接指向几个广泛使用的 DNS 提供商的文档。此列表并不详尽无遗，并不表示认可；同样，如果您的 DNS 提供商没有列出，这并不意味着他们不支持 MAIL FROM 域配置。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/ses/latest/dg/mail-from.html)

   当 Amazon SES 检测到记录已生效时，您会收到一封电子邮件，通知您自定义 MAIL FROM 域已成功设置。视您的 DNS 提供商而定，Amazon SES 检测 MX 记录之前可能会延迟最多 72 个小时。

### 为已验证的电子邮件地址设置自定义 MAIL FROM 域
<a name="mail-from-setup-procedure-email-address"></a>

您还可以为特定电子邮件地址设置自定义 MAIL FROM 域。要为电子邮件地址设置自定义 MAIL FROM 域，您必须修改与该电子邮件地址相关联的域的 DNS 记录。

**注意**  
您无法为不归您所有的域上的地址设置自定义 MAIL FROM 域（例如，您无法为 `gmail.com` 域上的地址创建自定义 MAIL FROM 域），因为您无法将必要的 DNS 记录添加到该域中）。

**将经验证的电子邮件地址配置为使用指定的 MAIL FROM 域**

1. 打开 Amazon SES 控制台，网址为[https://console.aws.amazon.com/ses/](https://console.aws.amazon.com/ses/)。

1. 在左侧导航面板中的**配置**下，选择**身份**。

1. 在身份列表中，选择要配置的身份，其中 **Identity type**（身份类型）是 **Email address**（电子邮件地址），以及 **Status**（状态）为 *Verified*（已验证）。

   1. 如果 **Status**（状态）是 *Unverified*（未核实），请在 [验证电子邮件地址身份](creating-identities.md#just-verify-email-proc) 完成过程以验证电子邮件地址的域。

1. 在 **MAIL FROM Domain**（MAIL FROM 域）选项卡下方，选择 **Custom MAIL FROM domain**（自定义 MAIL FROM 域）窗格中的 **Edit**（编辑）。

1. 在 **General details**（一般细节）窗格中，执行以下操作：

   1. 选择 **Use a custom MAIL FROM domain**（使用自定义 MAIL FROM 域）复选框。

   1. 对于 **MAIL FROM Domain (MAIL FROM 域)**，输入要用作 MAIL FROM 子域的域。

   1. 对于 **Behavior on MX failure**（MX 失败时的行为），选择下列选项之一：
      + **使用原定设置的 MAIL FROM 域名** – 如果未正确设置自定义 MAIL FROM 域的 MX 记录，那么 Amazon SES 将使用 `amazonses.com` 的子域。子域名因您使用的 AWS 区域 Amazon SES 而异。
      + **拒绝邮件** – 如果未正确设置自定义 MAIL FROM 域的 MX 记录，那么 Amazon SES 将返回 `MailFromDomainNotVerified` 错误。您尝试从此电子邮件地址发送的电子邮件将被自动拒绝。

   1. 选择 **Save changes**（保存更改）- 您将会回到上一个屏幕。

1. 将 MX 和 SPF（类型为 TXT）记录发布到自定义 MAIL FROM 域的 DNS 服务器：

   在 **Custom MAIL FROM domain**（自定义 MAIL FROM 域）窗格中，**Publish DNS records**（发布 DNS 记录）表现在会显示您必须发布（添加）到域的 DNS 配置中的 MX 和 SPF（类型为 TXT）记录。这些记录使用下表中显示的格式。  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/ses/latest/dg/mail-from.html)

   在以上记录中，
   + *subdomain*。 *domain*。 *com*将填充你的 MAIL FROM 子域名
   + *region*将填充您要验证 MAIL FROM 域的名称（例如`us-west-2``us-east-1``eu-west-1`、或，等） AWS 区域 
   + 与 MX 值一起列出的数字 *10* 是邮件服务器的优先顺序，需要按照 DNS 提供商的 GUI 指定的单独值字段输入
   + SPF 的 TXT 记录值必须包含引号

   从 **Publish DNS records**（发布 DNS 记录）表中，通过选择每个值旁边的复制图标复制 MX 和 SPF（类型为 TXT）记录，然后将它们粘贴到 DNS 提供商 GUI 中的相应字段中。或者，您可以选择**下载 .csv 记录集**以将记录副本保存到您的电脑中。
**重要**  
要使用 Amazon SES 成功设置自定义 MAIL FROM 域，您必须仅将一条 MX 记录发布到您的 MAIL FROM 域的 DNS 服务器。如果 MAIL FROM 域有多条 MX 记录，则使用 Amazon SES 设置自定义 MAIL FROM 将失败。

   如果 Route 53 为您的 MAIL FROM 域提供 DNS 服务，并且您使用与 Route 53 相同的账户登录，则选择使用 R **oute 53 发布记录**。 AWS 管理控制台 DNS 记录将自动应用于您的域的 DNS 配置。

   如果使用其他 DNS 提供商，则必须手动将 DNS 记录发布到 MAIL FROM 域的 DNS 服务器。将 DNS 记录添加到域的 DNS 服务器的过程因您的网络托管服务或 DNS 提供商而异。

   为您的域发布 DNS 记录的过程取决于您使用的 DNS 提供商。下表包含的链接指向几个广泛使用的 DNS 提供商的文档。此列表并不详尽无遗，并不表示认可；同样，如果您的 DNS 提供商没有列出，这并不意味着他们不支持 MAIL FROM 域配置。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/ses/latest/dg/mail-from.html)

   当 Amazon SES 检测到记录已生效时，您会收到一封电子邮件，通知您自定义 MAIL FROM 域已成功设置。视您的 DNS 提供商而定，Amazon SES 检测 MX 记录之前可能会延迟最多 72 个小时。

## 使用 Amazon SES 的自定义 MAIL FROM 域设置状态
<a name="mail-from-states"></a>

在您将身份配置为使用自定义 MAIL FROM 域后，设置的状态为 pending (待处理)，并且 Amazon SES 会尝试在您的 DNS 设置中检测所需的 MX 记录。之后，状态因 Amazon SES 是否检测到 MX 记录而异。下表介绍了电子邮件发送行为以及与每个状态关联的 Amazon SES 操作。每当状态发生变化时，Amazon SES 都会向与您关联的电子邮件地址发送通知 AWS 账户。


****  

| 州 | 电子邮件发送行为 | Amazon SES 操作 | 
| --- | --- | --- | 
|  待定  |  使用自定义 MAIL FROM 回退设置  |  Amazon SES 尝试在 72 小时内检测所需的 MX 记录。如果失败，则状态将更改为“失败”。  | 
|  成功  |  使用自定义 MAIL FROM 域  |  Amazon SES 持续检查所需的 MX 记录是否到位。  | 
|  TemporaryFailure  |  使用自定义 MAIL FROM 回退设置  |  Amazon SES 尝试在 72 小时内检测所需的 MX 记录。如果失败，则状态将更改为“已失败”；如果成功，则状态将更改为“成功”。  | 
|  失败  |  使用自定义 MAIL FROM 回退设置  |  Amazon SES 不再尝试检测所需的 MX 记录。要使用自定义 MAIL FROM 域，您必须重新开始 [配置自定义 MAIL FROM 域](#mail-from-set) 中的设置过程。  | 

# 遵守 Amazon SES 中的 DMARC 身份验证协议
<a name="send-email-authentication-dmarc"></a>

基于域名的邮件认证、报告和一致性 (DMARC) 是一种电子邮件认证协议，它使用发件人策略框架 (SPF) 和 DomainKeys 识别邮件 (DKIM) 来检测电子邮件欺骗和网络钓鱼。为了符合 DMARC 的要求，消息必须通过 SPF 或 DKIM 进行身份验证，但理想情况下，当两者都与 DMARC 结合使用时，您将确保您的电子邮件发送获得尽可能高级别的保护。

让我们简要回顾一下每种方法的作用，以及 DMARC 是如何将它们联系在一起的：
+  **SPF** – 标识哪些邮件服务器可以代表您的自定义 MAIL FROM 域，通过 DNS 使用的 DNS TXT 记录发送邮件。收件人邮件系统参考 SPF TXT 记录，以确定来自您自定义域的消息是否来自授权的消息发送服务器。基本上，SPF 的设计初衷是帮助防止欺骗，但实际上存在 SPF 容易遭受的欺骗技术，这就是为什么您还需要结合 DMARC 使用 DKIM 的原因。
+  **DKIM** – 在电子邮件标头中为您的出站消息添加数字签名。接收电子邮件系统可以使用此数字签名来协助验证传入的电子邮件是否由该域拥有的密钥签名。但是，当接收电子邮件系统转发消息时，消息的信封会被更改，从而使 SPF 身份验证失效。由于数字签名是电子邮件标头的一部分，会随电子邮件消息一同保留，因此即使在邮件服务器之间转发消息（只要邮件内容未被修改），DKIM 也能发挥作用。
+  **DMARC** – 确保域与至少一个 SPF 和 DKIM 保持一致。仅使用 SPF 和 DKIM 并不能确保发件人地址经过身份验证（这是您的收件人在其电子邮件客户端中看到的电子邮件地址）。SPF 仅检查 MAIL FROM 地址中指定的域（您的收件人看不到此域）。DKIM 仅检查 DKIM 签名中指定的域（您的收件人也看不到此域）。DMARC 通过要求 SPF 或 DKIM 上的域一致性正确来解决这两个问题：
  + 为了使 SPF 通过 DMARC 一致性检查，发件人地址中的域必须与 MAIL FROM 地址（也称为 Return-Path 和 Envelope-from 地址）中的域匹配。在转发邮件时，这几乎不可能实现，因为转发邮件会删除原始的发件人地址信息；在使用第三方批量电子邮件提供商发送邮件时也不可能实现，因为 Return-Path（MAIL FROM）用于处理退信和投诉，而提供商（SES）会使用他们自己的地址来跟踪这些退信和投诉。
  + 为了使 DKIM 通过 DMARC 一致性检查，DKIM 签名中指定的域必须与发件人地址中的域相匹配。如果您使用代表您发送邮件的第三方发件人或服务，则可以通过确保第三方发件人已正确配置为使用 DKIM 签名，并且已在域中添加了相应的 DNS 记录来实现。然后，接收邮件服务器将能够验证由您的第三方发送的电子邮件，就好像该电子邮件是由授权使用域内地址的人发送的邮件一样。

**与 DMARC 协同运行**  
我们在上面讨论的 DMARC 一致性检查展示了 SPF、DKIM 和 DMARC 是如何协同工作的，以增加对您的域的信任以及确保将您的电子邮件传送到收件箱。DMARC 通过确保收件人看到的发件人地址已通过 SPF 或 DKIM 进行身份验证，来实现这一目标：
+ 如果所述的 SPF 或 DKIM 检查中的一个或两个都成功，则消息通过 DMARC 验证。
+ 如果所述的 SPF 或 DKIM 检查均失败，则邮件将无法通过 DMARC 验证。

因此，为了让 DMARC 能够最大限度地对您发送的电子邮件进行身份验证，SPF 和 DKIM 都是必不可少的，通过同时使用这三者，有助于确保您的发送域得到全面保护。

DMARC 还允许您通过设置的策略，指示电子邮件服务器在 DMARC 身份验证失败时如何处理电子邮件。下一节（[对域设置 DMARC 策略](#send-email-authentication-dmarc-dns)）将对此进行解释，其中包含有关如何配置您的 SES 域，从而使您发送的电子邮件同时通过 SPF 和 DKIM 符合 DMARC 身份验证协议的信息。

## 对域设置 DMARC 策略
<a name="send-email-authentication-dmarc-dns"></a>

要设置 DMARC，您必须修改域的 DNS 设置。域的 DNS 设置应包括指定域的 DMARC 设置的 TXT 记录。向 DNS 配置中添加 TXT 记录的过程取决于您使用的 DNS 或托管提供商。如果您使用 Route 53，请参阅《Amazon Route 53 开发人员指南》**中的[使用记录](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/rrsets-working-with.html)。如果使用的是其他提供商的产品，请参阅提供商的 DNS 配置文档。

您创建的 TXT 记录的名称应为 `_dmarc.example.com`，其中 `example.com` 是域。TXT 记录的值包含应用于域的 DMARC 策略。以下是包含 DMARC 策略的 TXT 记录的示例：


| Name | Type | 值 | 
| --- | --- | --- | 
| \$1dmarc.example.com | TXT | "v=DMARC1;p=quarantine;rua=mailto:my\$1dmarc\$1report@example.com" | 

在前面的 DMARC 策略示例中，该策略要求电子邮件提供商执行以下操作：
+ 对于任何未通过身份验证的消息，请按策略参数 `p=quarantine` 的指定将其发送到垃圾邮件文件夹。其他选项包括使用 `p=none` 不执行任何操作，或者使用 `p=reject` 直接拒绝消息。
  + 下一节将讨论如何以及何时使用这三种策略设置 - *在错误的时间使用错误的策略设置，可能会导致您的电子邮件无法传送，*请参阅[实施 DMARC 的最佳实践](#send-email-authentication-dmarc-implement)。
+ 根据报告参数 `rua=mailto:my_dmarc_report@example.com`（*rua* 代表聚合报告的报告 URI）的规定，以摘要形式（即汇总某一时间段内的数据并生成一份报告，而不是为每个事件单独发送报告）发送所有身份验证失败的电子邮件的报告。电子邮件提供商通常每天发送一次此类汇总报告，但具体政策因提供商而异。

要了解更多有关如何为域配置 DMARC 的信息，请参阅 DMARC 网站上的[概述](https://dmarc.org/overview/)。

有关 DMARC 系统的完整规范，请参阅[国际互联网工程任务组（IETF）DMARC 草案](https://datatracker.ietf.org/doc/draft-ietf-dmarc-dmarcbis/)。

## 实施 DMARC 的最佳实践
<a name="send-email-authentication-dmarc-implement"></a>

最好是分阶段逐步实施您的 DMARC 策略执行，以免影响其他邮件流。制定并实施一个遵循以下步骤的推广计划。在进行下一步之前，先对每个子域执行这些步骤，最后再对组织中的顶级域执行。

1. 监控实施 DMARC 的影响（p=none）。
   + 首先，为一个子域或域创建一个简单的监控模式记录，该记录要求邮件接收组织向您发送他们使用该域观察到的消息的统计信息。监控模式记录是一个 DMARC TXT 记录，其策略设置为无 `p=none`。
   + 通过 DMARC 生成的报告将提供通过和未通过这些检查的消息的数量和来源。您可以轻松地了解您的合法流量受这些检查覆盖的情况。您会看到转发的迹象，因为如果内容被修改，转发的消息将无法通过 SPF 和 DKIM 检查。您还将开始看到发送了多少欺诈性消息，以及这些消息是从哪里发送的。
   +  此步骤的目标是了解在实施接下来的两个步骤中的任何一个时，哪些电子邮件会受到影响，并确保任何第三方或授权发件人调整其 SPF 或 DKIM 策略以保持一致。
   + 最适合现有域的使用。

1. 请求外部邮件系统隔离未通过 DMARC 的邮件（p=quarantine）。
   + 当您认为您所有或大部分的合法流量均已通过 SPF 或 DKIM 实现了域对齐，并且您了解了实施 DMARC 的影响后，您可以实施隔离策略。隔离策略是一种 DMARC TXT 记录，其策略设置为隔离 `p=quarantine`。通过这样做，您要求 DMARC 接收方将您域下未能通过 DMARC 的邮件放入本地等同于垃圾邮件文件夹的位置，而不是您客户的收件箱。
   + 最适合用于在第 1 步期间已经分析了 DMARC 报告的域转换。

1. 请求外部邮件系统不接受未通过 DMARC 的邮件（p=reject）。
   + 实施拒绝策略通常是最后一步。拒绝策略是指其策略设置为拒绝 `p=reject` 的 DMARC TXT 记录。当您这样做时，您要求 DMARC 接收方不接受未能通过 DMARC 检查的消息，这意味着这些消息甚至不会被隔离到垃圾邮件文件夹中，而是会被直接拒绝。
   + 当使用拒绝策略时，由于拒绝会导致 SMTP 退信，您将能够确切地知道哪些消息未能通过 DMARC 策略。而使用隔离策略时，汇总数据会提供有关通过或未通过 SPF、DKIM 和 DMARC 检查的电子邮件百分比的信息。
   + 最适合已完成前两个步骤的新域或现有域。

## 通过 SPF 遵守 DMARC
<a name="send-email-authentication-dmarc-spf"></a>

要使电子邮件基于 SPF 遵守 DMARC，必须满足以下两个条件：
+ 该消息必须基于您已发布到自定义 MAIL FROM 域的 DNS 配置中的有效 SPF（类型 TXT）记录，通过 SPF 检查。
+ 电子邮件标头中收件人地址的域必须与 MAIL FROM 地址中指定的域或其子域一致（匹配）。为了实现与 SES 的 SPF 对齐，域的 DMARC 策略不得指定严格的 SPF 策略（aspf=s）。

要满足上述要求，请完成以下步骤：
+ 通过完成 [使用自定义 MAIL FROM 域](mail-from.md) 中的过程设置自定义 MAIL FROM 域。
+ 确保您的发送域使用宽松的 SPF 策略。如果您尚未更改域的策略遵守方式，它将默认使用宽松的策略，就像 SES 一样。
**注意**  
您可以在命令行中输入以下命令，将 `example.com` 替换为您的域名，从而确定您的域的 DMARC 与 SPF 的符合情况：  

  ```
  dig TXT _dmarc.example.com
  ```
在此命令的输出中，在 **Non-authoritative answer** 下查找以 `v=DMARC1` 开头的记录。如果此记录包含字符串 `aspf=r`，或者 `aspf` 字符串根本不存在，则您的域为 SPF 使用宽松遵守。如果记录包含字符串 `aspf=s`，则您的域为 SPF 使用严格遵守。您的系统管理员需要从域的 DNS 配置的 DMARC TXT 记录中删除此标签。  
或者，你可以使用基于网络的DMARC查询工具，例如 [dmarcian网站上的DMARC In](https://dmarcian.com/dmarc-inspector/) spector或网站上的 [DMARC检查工具](https://mxtoolbox.com/dmarc.aspx)来确定你的域名与SPF的政策一致性。 MxToolBox

## 通过 DKIM 遵守 DMARC
<a name="send-email-authentication-dmarc-dkim"></a>

要使电子邮件基于 DKIM 遵守 DMARC，必须满足以下两个条件：
+ 消息必须具有有效的 DKIM 签名并通过 DKIM 检查。
+ DKIM 签名中指定的域必须与发件人地址中的域一致（匹配）。如果域的 DMARC 策略指定了 DKIM 的严格遵守方式，则这些域必须完全匹配（SES 默认使用严格的 DKIM 策略）。

要满足上述要求，请完成以下步骤：
+ 通过完成 [Amazon SES 中的 Easy DKIM](send-email-authentication-dkim-easy.md) 中的过程设置 Easy DKIM。使用 Easy DKIM 时，Amazon SES 会自动对您的电子邮件签名。
**注意**  
除了使用 Easy DKIM 以外，您也可以[为邮件手动签名](send-email-authentication-dkim-manual.md)。但是，如果您选择这样做，请务必小心，因为 Amazon SES 不验证您构建的 DKIM 签名。因此，我们强烈建议您使用 Easy DKIM。
+ 确保 DKIM 签名中指定的域与发件人地址中的域一致。或者，如果从发件人地址中域的子域发送，请确保您的 DMARC 策略设置为宽松的一致性。
**注意**  
您可以在命令行中输入以下命令，将 `example.com` 替换为您的域名，从而确定您的域的 DMARC 与 DKIM 的符合情况：  

  ```
  dig TXT _dmarc.example.com
  ```
在此命令的输出中，在 **Non-authoritative answer** 下查找以 `v=DMARC1` 开头的记录。如果此记录包含字符串 `adkim=r`，或者 `adkim` 字符串根本不存在，则您的域为 DKIM 使用宽松遵守。如果记录包含字符串 `adkim=s`，则您的域为 DKIM 使用严格遵守。您的系统管理员需要从域的 DNS 配置的 DMARC TXT 记录中删除此标签。  
或者，你可以使用基于网络的DMARC查询工具，例如d [marcian网站上的DMARC In](https://dmarcian.com/dmarc-inspector/) spector或网站上的 [DMARC检查工具](https://mxtoolbox.com/dmarc.aspx)来确定你的域名与DKIM的政策一致性。 MxToolBox 

# 在 Amazon SES 中使用 BIMI
<a name="send-email-authentication-bimi"></a>

用于邮件识别的品牌指标（BIMI）是一种电子邮件规范，它使电子邮件收件箱能够在支持的电子邮件客户端中将品牌徽标显示在该品牌经过身份验证的电子邮件旁边。

BIMI 是一种直接连接到身份验证的电子邮件规范，但它不是一个独立的电子邮件身份验证协议，因为它要求所有电子邮件都符合 [DMARC](send-email-authentication-dmarc.md) 身份验证。

尽管 BIMI 需要 DMARC，而 DMARC 要求您的域具有 SPF 或 DKIM 记录以保持一致，但最好同时包含 SPF 和 DKIM 记录以提高安全性，并且因为一些电子邮件服务提供商（ESP）在使用 BIMI 时需要这两者。以下章节介绍在 Amazon SES 中实现 BIMI 的步骤。

## 在 SES 中设置 BIMI
<a name="bimi-setup-procedure"></a>

您可以为您拥有的电子邮件域配置 BIMI，在 SES 中，此类域称为*自定义* MAIL FROM 域。配置完成后，您从该域发送的所有邮件将在[支持 BIMI 的电子邮件客户端](https://bimigroup.org/bimi-infographic/)中显示您的 BIMI 徽标。

要使您的电子邮件显示 BIMI 徽标，就必须在 SES 中满足一些先决条件：在以下过程中，这些先决条件是概括性的，并将引用详细介绍这些主题的专门章节。这里将详细介绍特定于 BIMI 的步骤以及在 SES 中对其进行配置所需的内容。

**在自定义 MAIL FROM 域中设置 BIMI**

1. 必须在 SES 中配置自定义 MAIL FROM 域，并同时为该域发布 SPF（类型 TXT）和 MX 记录。如果您没有自定义 MAIL FROM 域，或者想为您的 BIMI 徽标创建一个新的域，请参阅 [使用自定义 MAIL FROM 域](mail-from.md)。

1. 使用 Easy DKIM 配置您的域。请参阅[Amazon SES 中的 Easy DKIM](send-email-authentication-dkim-easy.md)。

1. 通过向 DNS 提供商发布 TXT 记录（其中包含 BIMI 所需的以下执行策略细节），使用 DMARC 配置您的域，类似于以下两个示例之一：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/ses/latest/dg/send-email-authentication-bimi.html)

   在前面的 BIMI 所需的 DMARC 策略示例中：
   + `example.com` 应替换为您的域或子域。
   + `p=` 值可以是：
     + *quarantine*，*pct* 值设置为 *100*，如上所示，或者
     + *reject*，如上所示。
   + 如果您从子域发送，BIMI 要求父域也必须具有此执行策略。子域将属于父域的策略范围。但是，如果您除了为父域发布的内容外，还为您的子域添加了 DMARC 记录，则您的子域也必须具有相同的执行策略才能有资格获得 BIMI。
   + 如果您从未为您的域设置 DMARC 策略，请参阅[遵守 Amazon SES 中的 DMARC 身份验证协议](send-email-authentication-dmarc.md)，确保您只使用特定于 BIMI 的 DMARC 策略值，如上所示。

1. 将您的 BIMI 徽标制作成可扩缩矢量图形（SVG）`.svg` 文件，BIMI 所需的特定 SVG 配置文件定义为 SVG Portable/Secure（SVG P/S）。为了使您的徽标显示在电子邮件客户端中，它必须完全符合这些规范。请参阅 [BIMI Group](https://bimigroup.org/) 有关[创建 SVG 徽标文件](https://bimigroup.org/creating-bimi-svg-logo-files/)的指南和建议使用的 [SVG 转换工具](https://bimigroup.org/svg-conversion-tools-released/)。

1. （可选）获取认证标志证书（VMC）。一些 ESP（例如 Gmail 和 Apple）要求 VMC 提供证据，证明您拥有 BIMI 徽标的商标和内容。尽管这不是在您的域上实施 BIMI 的必要条件，但如果您向其发送邮件的 ESP 强制要求遵守 VMC，则您的 BIMI 徽标将不会显示在电子邮件客户端中。请参阅 BIMI Group 的有关[参与证书颁发机构](https://bimigroup.org/verified-mark-certificates-vmc-and-bimi/)的参考资料，为您的徽标获取 VMC。

1. 将您的 BIMI 徽标的 SVG 文件托管在您可以访问的服务器上，使其可通过 HTTPS 公开访问。例如，您可以将其上传到 [Amazon S3 桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-buckets-s3.html)。

1. 创建并发布包含您的徽标 URL 的 BIMI DNS 记录。当[支持 BIMI 的 ESP](https://bimigroup.org/bimi-infographic/) 检查您的 DMARC 记录时，它还会查找一个 BIMI 记录，其中包含您徽标的 `.svg` 文件的 URL，如果已配置，则还包括 VMC 的 `.pem` 文件的 URL。如果记录匹配，它们将显示您的 BIMI 徽标。

   使用 BIMI 配置您的域，方法是向您的 DNS 提供商发布具有如下所示的值的 TXT 记录：从域发送（如第一个示例所示）；从子域发送（如第二示例所示）：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/ses/latest/dg/send-email-authentication-bimi.html)

   在前面的 BIMI 记录示例中：
   + 名称值应按字面意思将 `default._bimi.` 指定为 `example.com` 的子域或 `marketing.example.com`，或者应将其替换为您的域或子域。
   + `v=` 值是 BIMI 记录的*版本*。
   + `l=` 值是一个*徽标*，表示指向图像的 `.svg` 文件的 URL。
   + `a=` 值是一个*颁发机构*，表示指向您的证书的 `.pem` 文件的 URL。

   您可以使用 BIMI Group 的 [BIMI Inspector](https://bimigroup.org/bimi-generator/) 等工具验证您的 BIMI 记录。

此过程的最后一步是定期向支持放置 BIMI 徽标的 ESP 发送图案。您的域应该有一个定期的交付节奏，并且对于您要向其发送邮件的 ESP 应该有良好的声誉。对于您没有既定声誉或发送节奏的 ESP，BIMI 徽标放置可能需要一段时间才能填充到其中。

您可以通过 [BIMI Group](https://bimigroup.org/) 组织找到更多与 BIMI 有关的信息和资源。