View a markdown version of this page

配置自定义域以处理打开和单击跟踪 - Amazon Simple Email Service

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

配置自定义域以处理打开和单击跟踪

当您使用事件发布来捕获打开和单击事件时,Amazon SES 将对您发送的电子邮件进行细微更改。为了捕获打开事件,SES 在通过 SES 发送的每封电子邮件中添加 1 像素 x 1 像素的透明 GIF 图像,其中包括每封电子邮件的唯一文件名,并托管在 SES 运营的服务器上;当图像被下载时,SES 可以准确地指明哪封邮件已由谁打开。

默认情况下,此像素将插入到电子邮件底部;不过,一些电子邮件提供商的应用程序会在电子邮件超出特定大小时截断电子邮件预览,并且可能会提供用于查看邮件的其余部分的链接。在此场景中,SES 像素跟踪图像不会加载,并且会摆脱您试图跟踪的打开率。要解决此问题,您可以选择将像素置于电子邮件的开头或其他任何位置,方法是将 {{ses:openTracker}} 占位符插入电子邮件正文中。在 SES 收到带占位符的邮件后,它将替换为打开跟踪像素图像。

重要
  • SES 将在发送时移除任何超过一个的 {{ses:openTracker}} 占位符。

  • 如果在电子邮件模板中使用 {{ses:openTracker}} 占位符,请仅添加一个,因为多个占位符会导致返回 400 BadRequestException 错误代码。

为了捕获链接单击事件,SES 会将电子邮件中的链接替换为指向由 SES 运营的服务器的链接。这会立即将收件人重定向到其预期目标。向该服务器发出的请求的标头(包括 Cookie)总大小不得超过 8192 字节,否则将返回 400 BadRequestException 错误代码。

您还可以选择使用自己的域(而非 SES 拥有和运营的域),来为收件人打造更一致的体验,这意味着将删除所有 SES 指标。您可以配置多个自定义域以处理打开和单击跟踪事件。这些自定义域与配置集关联。当您使用某个配置集发送电子邮件时,如果该配置集被配置为使用自定义域,则电子邮件中的打开和单击链接将自动使用该配置集中指定的自定义域。

本节包含一些过程,用于指示如何在您拥有的服务器上设置子域,以自动将用户重定向到由 SES 运营的打开和单击跟踪服务器。设置这些域涉及到三个步骤。首先,配置子域本身,再设置一个配置集来使用自定义域,然后设置其事件目标以发布打开和单击事件。本主题包含完成所有这些步骤的过程。

但是,如果您只希望在不设置自定义域的情况下启用打开或单击跟踪,则可以直接为配置集定义事件目标以支持针对指定的事件类型(包括打开和单击事件)触发的事件发布。配置集可以具有已定义多个事件类型的多个事件目标。请参阅创建 Amazon SES 事件目标

第 1 部分:设置用于处理打开和单击链接重定向的域

设置重定向域的具体过程因您的 Web 托管提供商(和您的内容传输网络,如果您使用了 HTTPS 服务器)而异。以下各节中的过程提供了一般性指导,而不是具体步骤。

选项 1:配置 HTTP 域

如果打算使用 HTTP 域处理打开和单击链接(与 HTTPS 域相对),则配置子域的过程仅涉及几个步骤。

注意

如果您设置了使用 HTTP 协议的自定义域,并且发送了包含使用 HTTPS 协议的链接的电子邮件,则您的客户在单击您的电子邮件中的链接时可能会看到一条警告消息。如果您计划发送包含使用 HTTPS 协议的链接的电子邮件,则应使用 HTTPS 域来处理单击跟踪事件。

设置用于处理打开和单击链接的 HTTP 子域
  1. 创建用于打开和单击跟踪链接的子域。SES 建议该子域专门用于处理这些链接,并 AWS 区域 为您要跟踪的每封电子邮件创建一个子域名。

  2. 验证用于 SES 的子域。有关更多信息,请参阅 创建域身份

  3. 在子域的 DNS 设置中添加新的 CNAME 记录,以将请求重定向到 SES 跟踪域。您重定向到的地址必须与您的自定义子域 AWS 区域 相同。

    • 使用中的跟踪域名表 AWS 一般参考 ,选择与您的自定义域名位于同一区域的跟踪域。

    注意

    您对子域的 DNS 记录所做的更改可能需要几分钟才能生效,具体取决于您的 Web 托管提供商。您的 Web 托管提供商或 IT 组织可能提供有关这些延迟的其他信息。

选项 2:配置 HTTPS 域

您还可以使用 HTTPS 域来跟踪链接打开和链接单击次数。要设置用于跟踪打开和链接单击次数的 HTTPS 域,除了设置 HTTP 域所需的步骤之外,还必须执行一些额外步骤。

设置处理打开和单击链接的 HTTPS 子域
  1. 创建用于打开和单击跟踪链接的子域。SES 建议该子域专门用于处理这些链接,并 AWS 区域 为您要跟踪的每封电子邮件创建一个子域名。

  2. 验证用于 SES 的子域。有关更多信息,请参阅 创建域身份

  3. 使用内容分发网络 (CDN)(例如 Amazon)创建新账户 CloudFront,请参阅基本 CloudFront 分发入门

  4. 将 CDN 配置为作为 SES 跟踪域的源,例如 r.us-east-1.awstrack.me。CDN 必须指向与您的自定义域名位于同一区域的 AWS 跟踪域。CDN 必须将请求者提供的 Host 标头传递给源,有关更多信息,请参阅此 AWS re:Post 文章以了解更多信息。

    • 使用中的跟踪域名表 AWS 一般参考 ,选择与您的自定义域名位于同一区域的跟踪域。

  5. 如果你使用 Route 53 来管理你的域名和 CloudFront你的 CDN 的 DNS 配置,请在 Route 53 中创建一个引用你的 CloudFront分配的别名记录(例如 d111111abcdef8.cloud front.net)。有关更多信息,请参阅《Amazon Route 53 开发人员指南》中的使用 Amazon Route 53 控制台创建记录

    否则,在您的子域的 DNS 配置中,添加一个 CNAME 记录以引用您的 CDN 的地址。

  6. 从可信证书颁发机构获取 SSL 证书。该证书应涵盖在步骤 1 中创建的子域以及在步骤 3-5 中配置的 CDN。将证书上传到 CDN。

  7. 您可以使用以下 curl 命令来验证新创建的自定义域是否使用了正确的区域和 HTTPS 协议。在以下示例中,除了您的域名之外,其他所有内容均为字面意思:

    curl --head https://custom.domain.com/favicon.ico

    返回的响应如以下示例所示:

    (python-sdk-test) jdoe@12a34567b89c BaconRedirectService % curl --head https://custom.domain.com/favicon.ico HTTPS/1.1 200 OK x-amz-ses-region: us-east-1 x-amz-ses-request-protocol: https Content-Type: image/x-icon Transfer-Encoding: chunked Date: Fri, 30 Aug 2024 13:50:14 GMT

    此代码包含以下属性:

    • x-amz-ses-region 标头值是收到请求的 SES 区域。

    • x-amz-ses-request-protocol 标头值是 CDN 和 SES 之间的请求中标头所使用的协议。

    如果您的设置正确,则该区域应反映您创建域所在的区域,协议应为 HTTPS。

第 2 部分:通过配置集指定您的自定义重定向域和 HTTPS 策略

在将您的域配置为处理打开和单击跟踪重定向后,您必须在配置集中指定自定义域和 HTTPS 策略。

当您使用某个配置集发送电子邮件时,如果该配置集被配置为使用自定义重定向域,则电子邮件中的打开和单击链接将自动使用该配置集中指定的自定义域和 HTTPS 策略。

您可以使用 SES 控制台或 CreateConfigurationSet v2 API 操作来完成此过程。

使用控制台指定自定义重定向域和 HTTPS 策略
  • 创建或编辑配置集时,使用创建配置集步骤 4 中的跟踪选项,来指定您的自定义重定向域和 HTTPS 策略选项。

要指定自定义重定向域和 HTTPS 策略,请使用 AWS CLI

您可以在 SES API v2 中使用 CreateConfigurationSet 操作,并使用 TrackingOptions 属性来指定您的自定义重定向域和 HTTPS 策略。您可以从调用此操作, AWS CLI 如以下示例所示。

  • 在要发送和跟踪电子邮件 AWS 区域 的地点中创建配置集:

    aws sesv2 create-configuration-set --cli-input-json file://create.json
  • 在此示例中,输入文件使用 TrackingOptions 属性的参数,CustomRedirectDomain 指定用于跟踪打开和单击链接的自定义域,HttpsPolicy 指定一个 HTTPS 策略选项:

    { "ConfigurationSetName": "my-config-set", "TrackingOptions": { "CustomRedirectDomain": "marketing.example.com", "HttpsPolicy": "REQUIRE" }, "SendingOptions": { "SendingEnabled": true } }

    对于 HttpsPolicy 参数,可以指定以下值来设置自定义重定向域的打开和单击跟踪链接的协议:

    • OPTIONAL:(默认行为)打开跟踪链接将使用 HTTP 进行包装。单击跟踪链接将使用链接的原始协议进行包装。

    • REQUIRE:打开和单击跟踪链接都将使用 HTTPS 进行包装。

    • REQUIRE_OPEN_ONLY:打开跟踪链接将使用 HTTPS 进行包装。单击跟踪链接将使用链接的原始协议进行包装。

第 3 部分:通过配置集指定打开和单击事件类型

在上一步的配置集中指定自定义域和 HTTPS 策略后,您必须通过配置集指定要在事件目标中跟踪的 open and/or click 事件类型。

您可以使用 SES 控制台或 CreateConfigurationSetEventDestination v2 API 操作来完成此过程。

要使用控制台选择打开 and/or 点击事件类型

此部分是可选的。只有当你有移动应用并希望收件人点击跟踪链接时 iOS 通用链接或 Android App Links 直接打开你的应用时,才能完成此操作。填写您的应用程序支持的每个移动平台(iOS、Android 或两者兼而有之)的小节。在开始之前,请完成第 1 部分以设置自定义重定向域,完成第 2 部分以配置您的配置集以使用该域。

如果您使用 iOS 通用链接或 Android 应用程序链接,则操作系统会检查点击跟踪网域上托管的验证文件,以决定哪个应用应该打开该链接。如果已安装该应用程序,则链接将直接在应用程序中打开。如果未安装该应用程序,则链接会返回到网络浏览器。由于这些验证文件使用路径前缀匹配,因此您需要控制跟踪网址中的路径段。

使用电子邮件 HTML 中各个<a>标签的ses:custom-path属性向跟踪网址添加固定路径段:

<a href="https://example.com/product/123" ses:custom-path="myapp">View product</a>

以下示例显示了不带跟踪网址和带跟踪网址的区别ses:custom-path

  • 不带ses:custom-path(默认):https://{your-custom-redirect-domain}/CL0/{encodedUrl}/{index}/{messageId}/{hmac}

  • ses:custom-path="myapp"https://{your-custom-redirect-domain}/CL1/myapp/{encodedUrl}/{index}/{messageId}/{hmac}

ses:custom-path值必须满足以下要求:

  • 仅限字母 (A—Z、a—z)、数字 (0—9)、连字符 (-)、句点 (.) 或下划线 (_)

  • 1—32 个字符,区分大小写

  • SES 在投递前将此属性从电子邮件中删除

  • 如果值无效,则回退到默认格式(与省略ses:custom-path相同)

ses:custom-path值不会出现在点击事件数据中。要识别事件中点击了哪个链接,请使用ses:tags

要授权您的 iOS 应用处理自定义重定向域上的通用链接,请将以下文件托管在https://{your-custom-redirect-domain}/.well-known/apple-app-site-association

{ "applinks": { "apps": [], "details": [ { "appID": "TEAMID.com.example.myapp", "paths": ["/CL1/myapp/*"] } ] } }

替换TEAMIDcom.example.myapp使用您的 Apple Team ID 和应用程序包标识符,以及myapp您在中指定的值ses:custom-path

要授权您的 Android 应用处理自定义重定向网域上的应用程序链接,请将以下文件托管在https://{your-custom-redirect-domain}/.well-known/assetlinks.json

[{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.example.myapp", "sha256_cert_fingerprints": ["certificate-fingerprint"] } }]

com.example.myapp替换为应用程序的软件包certificate-fingerprint名称和应用程序的签名证书指纹。

注意

Android 处理路径前缀匹配的方式与 iOS 不同。AndroidManifest.xml与其在assetlinks.json文件中定义路径前缀,不如在应用程序中配置 intent 过滤器android:pathPrefix="/CL1/myapp/",其中myapp是您在中ses:custom-path指定的值。如需了解更多信息,请参阅安卓开发者网站上的 Android 应用程序链接文档