Reach

Grow

Manage

Automate

Reach

Grow

Manage

Automate

本地到云端电子邮件迁移指南

2020年6月28日

电子邮件

1 min read

本地到云端电子邮件迁移指南

2020年6月28日

电子邮件

1 min read

本地到云端电子邮件迁移指南

很多次,我们会听到这样的问题,“您是否有某种剧本可以说明从内部安装迁移到Bird的过程”?

是的,我们确实有。请继续阅读。

首先,一些背景故事。Bird Cloud服务于2014年因On-Premises Momentum MTA解决方案的巨大成功而创建。Momentum是Bird Cloud的核心,为数千个客户提供高速传输和流量整形服务。因此,Momentum获得了我们大量的工程关注,但这项工作的结果往往埋藏在性能改进中,没有获得太多的宣传。 Momentum客户在每次发布新的Momentum公共版本时都可以看到这项工作的好处。

这并不意味着Bird只是“云中的Momentum”。MessageBird远不止于此,并且可以为选择迁移或以混合方式使用它们的客户带来额外的好处。这些好处来自我们的现代基于云的电子邮件API架构,提供了传统内部解决方案无法获得的功能。此外,我们还为PowerMTA客户提供了非常简单的迁移或以混合配置使用PowerMTA和Bird的方式。本文档的其余部分将详细描述如何将您的消息流从Momentum或PowerMTA迁移到Bird Cloud服务。

实际上,对于从Momentum或PowerMTA迁移到Bird时需要考虑两种不同的情况。

  1. 您已准备好完全离开内部世界,关闭您的物理数据中心,不再直接管理任何本地MTA。这意味着从您的部署中消除Momentum或PowerMTA,并直接向SparkPost发送消息以进行消息处理。在停止您的内部基础设施之前,确保您对所有关键系统进行了全面的数据库备份,尤其是如果您正在运行包含重要历史数据或配置的PostgreSQL数据库。

  2. 您有理由保留一些本地痕迹。可能的一些情况包括:

  • 需要在Momentum中进行预处理的特定传输流

  • 容量分配以应对突发或灾难恢复需求

  • 在PMTA中支持旧客户,同时将新客户转移到SparkPost

…然后您希望将其他消息转发给Bird以进行后续消息处理。

在任何情况下,您都需要知道Bird仅接受通过端口587或2525注入的SMTP消息,并使用具有特定用户名和密码的SMTP_Auth(查看SMTP文档)。我们还强烈建议使用TLS连接,但这并不是绝对必要的。如果您完全替换MTA层(情况1),那么您可能还需要考虑使用Transmissions REST API,该API可以通过HTTPS连接接受消息。有关该API的文档在这里

对于需要安全电子邮件功能的维护本地基础设施的组织,我们的PowerMTA和Momentum S/MIME实施指南提供了加密电子邮件传输的详细设置说明。

我应该选择哪个选项?

要确定你属于选项#1还是选项#2,请考虑以下因素:

  • 您是否使用Momentum的Lua脚本引擎来处理消息路由之外的复杂事务?

    • Lua是一种全面的脚本工具,可用于在线操作消息,但我们绝大多数用户仅使用它来选择交付绑定。如果是这样,您可以修改生成代码,在X-MSYS-API头中添加一个ip_pool属性,让Bird为您分配路由。

    • 如果您使用Lua进行更复杂的操作,如正文过滤、Mail_From重写或消息节奏计算,并且将这些逻辑移入注入应用程序中不可行,您可能需要考虑切换到选项#2。

  • 您的生成系统能够使用TLS和SMTP_Auth通过端口587发送消息吗?

    • 一些活动管理系统只能通过端口25以明文方式推送邮件。这对Bird造成安全问题,因此您可能需要考虑选项#2。

  • 您是否使用了PowerMTA替换语法或其他在线消息修改功能?

    • 如果您可以将此功能移动到生成器中或使用Bird 模板语言,那么您仍可以使用选项1,否则您可能需要考虑在线保持一个PMTA节点以进行消息修改,然后再交付给Bird。

  • 您是否需要在注入前进行入站AV/AS扫描?虽然在Momentum和PowerMTA中可以实现,但eBird假定您已完成所有这些检查。您可能需要考虑在注入前进行。

无论您选择哪种方式,都必定会影响您的商业关系。正如您所想,这不是我们的第一次操作。请务必让您的商业客户经理和客户成功经理参与其中,以便我们帮助您处理细节,确保您获得最佳的投资回报。

对于选项#1营地(彻底戒除):

假设您对选项1感到满意,并且您准备关闭本地的MTA,并决定继续使用SMTP注入方法,不改变您的消息创建系统。您的生成系统应该创建一个完全格式化的SMTP消息,然后通过TLS使用SMTP_AUTH推送到Bird,用户名和密码如此页面所述。请记住,“密码”是您在Bird账户中生成的API密钥,并开启SMTP投递选项。

如果您属于选项#1的阵营,考虑直接从您的生成系统切换到REST API。大多数情况下,我们发现客户的处理系统已经通过HTTP使用JSON,并且必须在注入前转换为SMTP。您可以跳过那一步,直接将其作为JSON格式的REST负载发送给我们。

如果您选择通过REST API进行注入,您可能需要稍微更改您的内容创建系统,但这可能值得。您可以在这里了解更多

大ESP最关注的一个问题是迁移时的IP预热。通常,他们花了多年时间精心培养IP地址库存,所以放弃所有这些工作是很痛苦的。Bird已制定出一套Bring Your Own IP(BYOIP)流程来解决这个问题。如果您至少有一个连续的/24 CIDR块,Bird可以使用那些现有的IP来交付,从而节省您重新预热它们的麻烦。如果您能利用该选项,您可以跳过关于IP预热的部分。

如果您觉得已准备好了,可以跳到“付诸实现”部分。

假设您对选项1感到满意,并且您准备关闭本地的MTA,并决定继续使用SMTP注入方法,不改变您的消息创建系统。您的生成系统应该创建一个完全格式化的SMTP消息,然后通过TLS使用SMTP_AUTH推送到Bird,用户名和密码如此页面所述。请记住,“密码”是您在Bird账户中生成的API密钥,并开启SMTP投递选项。

如果您属于选项#1的阵营,考虑直接从您的生成系统切换到REST API。大多数情况下,我们发现客户的处理系统已经通过HTTP使用JSON,并且必须在注入前转换为SMTP。您可以跳过那一步,直接将其作为JSON格式的REST负载发送给我们。

如果您选择通过REST API进行注入,您可能需要稍微更改您的内容创建系统,但这可能值得。您可以在这里了解更多

大ESP最关注的一个问题是迁移时的IP预热。通常,他们花了多年时间精心培养IP地址库存,所以放弃所有这些工作是很痛苦的。Bird已制定出一套Bring Your Own IP(BYOIP)流程来解决这个问题。如果您至少有一个连续的/24 CIDR块,Bird可以使用那些现有的IP来交付,从而节省您重新预热它们的麻烦。如果您能利用该选项,您可以跳过关于IP预热的部分。

如果您觉得已准备好了,可以跳到“付诸实现”部分。

假设您对选项1感到满意,并且您准备关闭本地的MTA,并决定继续使用SMTP注入方法,不改变您的消息创建系统。您的生成系统应该创建一个完全格式化的SMTP消息,然后通过TLS使用SMTP_AUTH推送到Bird,用户名和密码如此页面所述。请记住,“密码”是您在Bird账户中生成的API密钥,并开启SMTP投递选项。

如果您属于选项#1的阵营,考虑直接从您的生成系统切换到REST API。大多数情况下,我们发现客户的处理系统已经通过HTTP使用JSON,并且必须在注入前转换为SMTP。您可以跳过那一步,直接将其作为JSON格式的REST负载发送给我们。

如果您选择通过REST API进行注入,您可能需要稍微更改您的内容创建系统,但这可能值得。您可以在这里了解更多

大ESP最关注的一个问题是迁移时的IP预热。通常,他们花了多年时间精心培养IP地址库存,所以放弃所有这些工作是很痛苦的。Bird已制定出一套Bring Your Own IP(BYOIP)流程来解决这个问题。如果您至少有一个连续的/24 CIDR块,Bird可以使用那些现有的IP来交付,从而节省您重新预热它们的麻烦。如果您能利用该选项,您可以跳过关于IP预热的部分。

如果您觉得已准备好了,可以跳到“付诸实现”部分。

利用 Option #2(on-prem 预处理):

然而,如果您属于选项#2团队,那么您将需要对部署进行一些配置更改。最不痛苦的方法是从Momentum或PMTA迁移一些选择的消息流到Bird,同时仍使用您的生成系统的SMTP注入,是在您的配置中添加一个特殊路由。

对于Momentum:

  1. 设置Momentum版本> 3.6.23。

  2. 安装有效的SSL证书并打开出站端口587,以便Momentum可以与Bird通信。配置一个出站域,这样您就可以通过Momentum将消息路由到Bird。

  3. 根据以下配置,任何碰到该配置的消息都将通过端口587和SMTP_Auth以及在此定义的用户名和密码路由到smtp.sparkpostmail.com。

    outbound_smtp_auth { }
    Keep_Message_Dicts_In_Memory = true
    Domain "smtp.sparkpostmail.com" {
      Remote_SMTP_Port = "587"
      Outbound_SMTP_AUTH_Type = "LOGIN"
      Outbound_SMTP_AUTH_user = "SMTP_Injection"
      Outbound_SMTP_AUTH_pass = "17258redacted8bd6cd7a8redacted8c22bce"
    }
  4. 配置您希望通过MessageBird使用TLS中继的绑定,并将它们连接到您上面定义的域。

    注意:
    TLS不是严格要求的,但强烈推荐。如果由于某种原因不能使用TLS,那么IP白名单API密钥也是强烈建议的。


    binding "CustomerA-Outbound" {
      Gateway = "smtp-demo.sparkpostelite.com"
      TLS = "required"
      TLS_Certificate = "/etc/pki/tls/certs/trymsys.net.crt"
      TLS_Key = "/etc/pki/tls/certs/trymsys.net.key"
      TLS_Ciphers = "DEFAULT"
    }

对于PowerMTA:

  1. 设置PowerMTA版本> 4.5.0

  2. 安装有效的SSL证书并打开出站端口587,以便PowerMTA可以与Bird通信。

  3. 配置一个出站域路径,以便您可以通过PowerMTA将消息路由到Bird。根据以下配置,任何碰到该配置的消息都将通过端口587和SMTP_Auth以及在此定义的用户名和密码路由到smtp.sparkpostmail.com。 在PowerMTA中,这也是可以设置TLS的地方。注意这也有更详细的文档记录这里

<domain sparkpost.rollup>
  use-unencrypted-plain-auth yes
  auth-username SMTP_Injection
  auth-password YourAPIKeygoesherewhenyougenerateit
  route smtp.sparkpostmail.com:587
  use-starttls yes
  require-starttls yes
  max-smtp-out 10
</domain>

4. 配置您希望通过Bird中继的VMTAs使用您上面定义的{sparkpost}汇总配置。

<virtual-mta SparkPostRelay>
  <domain *>
    queue-to {sparkpost}
  </domain>
</virtual-mta>

一旦您做出这些配置更改,发送到选定的“binding”或“VMTA”的任何消息都应自动通过Bird传递。

实现它

当你开始走上这条路时,不要误以为这是一个一夜之间的操作。正确地完成这件事需要一些时间和细心。

  1. 设置你的Bird账户并使用开发子账户进行全面测试,以便稍后可以过滤掉该流量。无论选择哪种方式,你都需要这样做,因为无论如何都需要API密钥作为SMTP_Auth密码。

  2. 如果你使用SMTP注入,计划添加一个X-MSYS-API标头以整合所需的所有元数据和消息属性。任何X-Headers都应重写为元数据,并且你还应包括ip_pool和campaign属性。这里提供了示例。

  3. 如果你不使用BYOIP,那么你应该确保为MessageBird设置稍微不同的发送域,以便在需要时可以平行运行这两个环境。如果你当前的发送域是mycompany.com,可以专门为Bird传递设置sp.mycompany.com。这允许你在不妥协任何一个域的情况下慢慢小心地迁移。

  4. 确保启用了完整的域对齐和安全特性。在DNS中,设置DKIM, SPF, DMARC,退回和跟踪域,以便它们看起来都属于同一个组织。

  5. 在你定义的IP_Pools上配置自动IP预热。如果你使用前面提到的BYOIP选项,可以忽略预热步骤。

  6. 从一个消息流开始,然后从那里继续前进。就像IP预热一样,你不想一次性完成这件事。首先重定向几百条消息,然后重定向10%的流量,接着在第二天增加到20%,并不断增加直到你将所有流量转移完毕。如果你是一家ESP,选择一个可以合作的客户,并根据他们的反馈测试这个过程。如果一切顺利,继续下一个。如果遇到问题,花时间解决并将其融入到下一个过程。

  7. 尽可能通过API实现自动化。除DNS更改外,SparkPost配置大部分可以通过几个API调用自动化。

从 Bird 收集数据

MessageBird 报告在 webhooks 数据流或消息事件 API 中的消息传递。访问 Bird 纯文本日志是不可能的。您可以使用 webhooks 收集器或通过定期调用 Events API 并消费数据将此数据回传到您的环境中。我们建议使用 webhooks 并且在这里有一些关于如何正确使用的建议。以最基本的形式,一个 PHP webhook 收集器可以在几行代码中部署:

<?php
$verb = $_SERVER['REQUEST_METHOD'];
if ($verb === "POST") {
    $jsonStr = file_get_contents("php://input");
    http_response_code(200);
    $rnum = rand(1000, 9999);
    $timestamp = date("YmdHis") . $rnum;
    $filePath = './data/data_' . $timestamp . '.txt';
    // Handle duplicate filenames (edge case)
    if (file_exists($filePath)) {
        $baseName = basename($filePath, ".txt");
        $seq = 0;
        $ftail = substr($baseName, -2, 1);
        if ($ftail === "-") {
            $seq = (int)

当您正在试验时,您可以尝试使用诸如http://webhook.site/等免费收集器。

一旦您收集了所有的 webhook 数据,您可以将其读取到数据存储中进行额外处理。还有一些方法可以通过像 StitchData 和 Segment 这样的服务推送 Webhooks。

如果您需要提取数据且不能接受推送数据,则Events API中也提供了相同的信息。以下是一个示例 Event API 调用:
GET https://api.sparkpost.com/api/v1/events/message?/

recipients=recipient@example.com&templates=my-template&events

该 API 在此处提供完整的文档以及示例:https://developers.sparkpost.com/api/events/#events-get-search-for-message-events

如果您真的需要将事件数据返回到看起来像 PMTA 或 Momentum 记录的形式,那也是可能的,只要您使用一些额外的条件代码。好消息是已经有一些例子可以借鉴。

Recap

确保与您的销售和成功管理团队交流。我们以前做过这件事,可以快速且具有成本效益地帮助您。

  1. 找出您是属于营地 #1 (能够完全从 On-Prem 迁移) 还是营地 #2 (仍需要一些本地 MTA)。

  2. 注册一个免费测试账户以评估集成细节。

  3. 决定使用SMTPREST API 注入方法。

  4. 如果您使用 SMTP 注入,请弄清楚如何将头数据和消息属性放入 X-MSYS-API 头中。

  5. 确认您是否可以使用我们的 BYOIP 过程。

  6. 如有必要,用新域更新您的 DNS。

  7. 构建一个小样本以测试您的迁移。您可能需要调整配置。

  8. 增加流量,以便所有流量都迁移完毕。

  9. 如果您属于营地 #1,流量迁移完成后,您可以最终关闭本地 MTA。

在计划高容量电子邮件系统的 DNS 更改时,请注意可能会影响大规模电子邮件交付性能的 AWS DNS 扩展挑战

让我们为您联系Bird专家。
在30分钟内见证Bird的全部威力。

通过提交,您同意 Bird 可能会就我们的产品和服务与您联系。

您可以随时取消订阅。查看Bird的隐私声明以获取有关数据处理的详细信息。

Newsletter

通过每周更新到您的收件箱,随时了解 Bird 的最新动态。

让我们为您联系Bird专家。
在30分钟内见证Bird的全部威力。

通过提交,您同意 Bird 可能会就我们的产品和服务与您联系。

您可以随时取消订阅。查看Bird的隐私声明以获取有关数据处理的详细信息。

Newsletter

通过每周更新到您的收件箱,随时了解 Bird 的最新动态。

让我们为您联系Bird专家。
在30分钟内见证Bird的全部威力。

通过提交,您同意 Bird 可能会就我们的产品和服务与您联系。

您可以随时取消订阅。查看Bird的隐私声明以获取有关数据处理的详细信息。

R

Reach

G

Grow

M

Manage

A

Automate

Newsletter

通过每周更新到您的收件箱,随时了解 Bird 的最新动态。