

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

# Amazon SES 中的 DKIM 问题排查
<a name="troubleshoot-dkim"></a>

本节列出了在 Amazon SES 中配置 DKIM 身份验证时可能会遇到的一些问题。如果您尝试设置 DKIM 并且遇到问题，请查看下面的可能原因和解决方法。

**您已成功设置 DKIM，但是您的邮件未经过 DKIM 签名**  
如果您使用了 [Easy DKIM](send-email-authentication-dkim-easy.md) 或 [BYODKIM](send-email-authentication-dkim-bring-your-own.md) 为域配置 DKIM，但是您发送的邮件未经过 DKIM 签名，请执行以下操作：  
+ 请确保为适当的身份启用了 DKIM。要在 Amazon SES 控制台中为某个身份启用 DKIM，请在 **Identities (身份)** 列表中选择电子邮件域。在域的详细信息页面上，展开 **DKIM**，然后选择 **Enable**（启用）以启用 DKIM。
+ 确保您没有从同一域上的经过验证的电子邮件地址发送邮件。如果您已为某个域设置 DKIM，则从该域发送的所有邮件都经过 DKIM 签名，但您单独验证的电子邮件地址*除外*。单独验证的电子邮件地址使用单独的设置。例如，如果您已为域 *example.com* 配置 DKIM，并且您单独验证了电子邮件地址 *mary@example.com*（但没有为该地址配置 DKIM），则您从 *mary@example.com* 发送的电子邮件将在不经过 DKIM 身份验证的情况下发送。您可以通过从自己账户的身份列表中删除电子邮件地址身份，来解决此问题。
+ 如果在多个 AWS 区域中使用相同的身份，则必须为每个区域单独配置 DKIM。同样，如果您将同一个域与多个 AWS 账户结合使用，则必须为每个账户配置 DKIM。如果您删除某个特定区域或账户所需的 DNS 记录，则 Amazon SES 将在该区域或账户中禁用 DKIM 签名。如果 DKIM 签名变为禁用状态，Amazon SES 会通过电子邮件向您发送通知。

**在 Amazon SES 控制台中，域的 DKIM 详细信息显示：*DKIM: waiting on sender verification...（DKIM：正在等待发件人验证......） DKIM 验证状态：等待验证。***  
如果您完成 [Easy DKIM](send-email-authentication-dkim-easy.md) 或 [BYODKIM - 自带 DKIM](send-email-authentication-dkim-bring-your-own.md) 中的过程来为域配置 DKIM，但 Amazon SES 控制台仍指示 DKIM 验证处于等待状态，请执行以下操作：  
+ 等待最多 72 小时。在极少数情况下，DNS 记录可能需要一些时间才能对 Amazon SES 可见。
+ 确认 CNAME 记录（对于 Easy DKIM）或 TXT 记录（对于 BYODKIM）使用了正确的名称。某些 DNS 提供商会自动将域名附加到您创建的记录。例如，如果您创建的记录中带有 `example._domainkey.example.com` 名称，则 DNS 提供商可能会将您的域名添加到此字符串的结尾，从而生成 `example._domainkey.example.com.example.com`。有关更多信息，请参阅您的 DNS 提供商的文档。

**您收到一封来自 Amazon SES 的电子邮件，其中声明您的 DKIM 设置已被（或将被）撤销。**  
这意味着 Amazon SES 无法再在您的 DNS 服务器上找到所需的 CNAME 记录（如果您使用了 Easy DKIM）或所需的 TXT 记录（如果您使用了 BYODKIM）。通知电子邮件将告诉您在撤销 DKIM 设置状态和禁用 DKIM 签名之前必须重新发布 DNS 记录的时间。如果 DKIM 设置已撤销，您必须从头重新开始 DKIM 设置过程。

**尝试设置 BYODKIM 时，DKIM 验证过程失败。**  
确保您的私有密钥使用正确的格式。私有密钥必须为 PKCS \#1 或 PKCS \#8 两种格式之一，并使用 1024 位或 2048 位 RSA 加密。此外，私有密钥必须采用 base64 编码。

**设置 BYODKIM 时，当尝试为域指定公有密钥时，您收到 `BadRequestException` 错误。**  
如果收到 `BadRequestException` 错误，请执行以下操作：  
+ 确保为公有密钥指定的选择器至少包含 1 个字母数字字符并且小于等于 63 个字母数字字符。选择器不能包含句点，也不能包含其他符号或标点符号。
+ 请确保已从公有密钥中删除页眉和页脚行，并且已从公有密钥中删除所有换行符。

**在使用 Easy DKIM 时，您的 DNS 服务器成功返回了 Amazon SES DKIM CNAME 记录，但为域验证 TXT 记录返回了 `SERVFAIL`。**  
您的 DNS 提供商可能无法重定向 CNAME 记录。Amazon SES 和 ISP 会查询 TXT 记录。为遵守 DKIM 规范，您的 DNS 服务器必须能够响应 TXT 记录查询以及 CNAME 记录查询。如果您的 DNS 提供商无法响应 TXT 记录查询，替代方法是使用 Route 53 作为您的 DNS 托管提供商。

**您的电子邮件包含两个 DKIM 签名**  
包含 `d=amazonses.com` 的额外 DKIM 签名是 Amazon SES 自动添加的。您可以忽略它。  
Microsoft Enterprise Outlook 随机选择一个 DKIM 签名进行验证，而忽略另一个。此行为似乎与签名排列的顺序无关，使得程序性解决方法无效。SES 不能停止使用 `amazonses.com` DKIM 签名对电子邮件进行签名，因为它们对于投诉反馈循环是必需的。Microsoft 已承认这是一个已知问题，并将其归因于其基础设施内的 DNS 解析问题。这些 DNS 解析失败可以解释为什么 DKIM 签名验证似乎随机失败，因为公钥是从 DNS 记录中检索的。