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

2020年6月28日

电子邮件

1 min read

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

关键要点

    • Bird Cloud 建立在成熟的 Momentum MTA 引擎之上,为客户提供成熟的本地系统性能,并具有现代云电子邮件 API 平台的新增优势。

    • 许多传统发件人仍依赖于 Momentum 或 PowerMTA,而 Bird 为两者提供了明确的迁移路径——完全云迁移或通过本地节点的混合路由。

    • 迁移需要了解您是否会:

      1. 消除所有本地基础设施,或

      2. 继续使用您的 MTA 进行预处理、路由或满足传统限制。

    • Bird 只接受通过端口 587 或 2525 的经过身份验证的 SMTP 注入(强烈推荐使用 TLS)。REST API 注入也可用于直接基于 JSON 的传递。

    • 选项 #1(“冷火鸡”)允许通过 SMTP 或 REST 直接发送到 Bird,完全取消 MTA,从而简化架构并实现发送架构现代化。

    • 选项 #2 支持混合环境——通过配置与 Bird 的 SMTP_Auth 的出站域,将选定的流从 Momentum 或 PMTA 路由到 Bird。

    • PowerMTA 和 Momentum 配置可以通过使用 TLS、基于 API 密钥的 SMTP_Auth 和路由定义安全地将流量转发给 Bird。

    • 使用高级 Lua 脚本、内联替换或预送达过滤的客户可能会保持混合,直到将逻辑重构到上游系统中。

    • Bird 支持 BYOIP(自带 IP)对于拥有连续的 /24 块的客户,允许您保留预热 IP 声誉并跳过完整的 IP 预热。

    • 对于非 BYOIP 用户,Bird 提供自动 IP 预热,并建议分阶段迁移——从小量开始,然后逐步增加流量。

    • 适当的域设置(DKIM、SPF、DMARC、退信域、跟踪域)对于在迁移过程中对齐和平稳共存至关重要。

    • Bird 通过 webhooks 或 Events API 提供实时事件数据,支持下游自动化、ETL 流程,并在需要时进行日志样式重构。

Q&A 精华

  • 主要的两个迁移方案是什么?

    要么完全退役所有本地 MTAs(选项 #1),要么保持混合设置,其中一些流量在到达 Bird 之前通过 Momentum/PMTA 路由(选项 #2)。

  • 是什么决定了您选择Option #1还是Option #2?

    您的依赖在Lua脚本、预处理逻辑、消息重写、安全要求或无法通过端口587发送身份验证流量的生成器。

  • Bird 是否接受通过端口 25 的 SMTP 注入?

    不——Bird 需要通过端口 587 或 2525 进行 SMTP 注入,并使用 SMTP_Auth 进行身份验证。

  • 需要 TLS 吗?

    并非严格要求,但强烈建议使用来自生成器或本地MTAs的安全消息注入。

  • 发件人可以使用REST API而不是SMTP吗?

    是——发送方可以通过Transmissions REST API传递JSON有效负载,通常可以简化工作流程,并无需生成原始SMTP消息。

  • 什么是 Bird 的 BYOIP 计划?

    一种允许客户将其现有的连续 /24 块 IP 纳入 Bird 的过程,保持信誉并跳过预热。

  • 如果 BYOIP 不是一个选项怎么办?

    使用新的发送域(例如,sp.yourdomain.com),同时运行两个环境,并依靠Bird的自动IP暖机功能。

  • 您如何在混合设置中仅通过Bird路由选定的流?

    通过配置外发域(Momentum)或汇总配置/VMTAs(PowerMTA),以验证并传送到Bird的SMTP端点。

  • 通过SMTP注入时需要进行哪些元数据更改?

    添加一个X-MSYS-API标头,其中包含以前通过X-Headers处理的ip_poolcampaign和任何自定义元数据等属性。

  • 迁移前需要在 DNS 中配置什么?

    DKIM记录、SPF、DMARC、退信域名和跟踪域名,以确保域名一致性并降低在过渡期间的投递风险。

  • 如何将流量迁移到 Bird?

    逐渐地:从小流量开始,然后10%,再到20%,每天增加,直到所有流量都已转移——类似于IP升温的最佳实践。

  • 发送者在迁移后如何收集交付和互动数据?

    通过使用Bird的实时webhook系统或Events API;webhook采集器可以快速构建并为下游存储或ETL系统提供数据。

很多次,我们会听到这样的问题,“您是否有某种剧本可以说明从内部安装迁移到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实施指南提供了加密电子邮件传输的详细设置说明。

很多次,我们会听到这样的问题,“您是否有某种剧本可以说明从内部安装迁移到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实施指南提供了加密电子邮件传输的详细设置说明。

很多次,我们会听到这样的问题,“您是否有某种剧本可以说明从内部安装迁移到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,请考虑以下因素:

选项

最适合的情况

关键要求

权衡

选项#1:完全云迁移

可以移除所有本地MTA

587/2525端口上的SMTP Auth或REST API

需要重构任何高级的本地逻辑

选项#2:混合路由

需要预处理或遗留支持

Momentum或PowerMTA保持在线

增加操作复杂性


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

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

    • 如果您使用Lua进行更复杂的操作,如正文过滤、Mail_From重写或消息节奏计算,且无法将该逻辑移动到注入应用中,那么您可能需要考虑转向选项#2。

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

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

  • 您是否正在使用PowerMTA替换语法或其他内联消息修改?

    • 如果您能将此功能移至生成器或使用Bird Template Language,则仍可选择选项1,但否则,您可能需要考虑在发给Bird进行交付前保持一个PMTA节点在线以进行消息修改。

  • 您是否需要在注入前进行任何入站AV/AS扫描?虽然在Momentum和PowerMTA中可以这样做,但eBird假设您已经完成了所有检查。您可能需要考虑在注入前执行此操作。

无论您选择哪种方式,这都肯定会影响您的商业关系。如您所想,这不是我们的第一次经历。一定要让您的商业客户经理和客户成功经理参与,以便我们帮助您了解细节,并确保您获得最佳的投资回报。

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

选项

最适合的情况

关键要求

权衡

选项#1:完全云迁移

可以移除所有本地MTA

587/2525端口上的SMTP Auth或REST API

需要重构任何高级的本地逻辑

选项#2:混合路由

需要预处理或遗留支持

Momentum或PowerMTA保持在线

增加操作复杂性


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

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

    • 如果您使用Lua进行更复杂的操作,如正文过滤、Mail_From重写或消息节奏计算,且无法将该逻辑移动到注入应用中,那么您可能需要考虑转向选项#2。

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

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

  • 您是否正在使用PowerMTA替换语法或其他内联消息修改?

    • 如果您能将此功能移至生成器或使用Bird Template Language,则仍可选择选项1,但否则,您可能需要考虑在发给Bird进行交付前保持一个PMTA节点在线以进行消息修改。

  • 您是否需要在注入前进行任何入站AV/AS扫描?虽然在Momentum和PowerMTA中可以这样做,但eBird假设您已经完成了所有检查。您可能需要考虑在注入前执行此操作。

无论您选择哪种方式,这都肯定会影响您的商业关系。如您所想,这不是我们的第一次经历。一定要让您的商业客户经理和客户成功经理参与,以便我们帮助您了解细节,并确保您获得最佳的投资回报。

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

选项

最适合的情况

关键要求

权衡

选项#1:完全云迁移

可以移除所有本地MTA

587/2525端口上的SMTP Auth或REST API

需要重构任何高级的本地逻辑

选项#2:混合路由

需要预处理或遗留支持

Momentum或PowerMTA保持在线

增加操作复杂性


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

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

    • 如果您使用Lua进行更复杂的操作,如正文过滤、Mail_From重写或消息节奏计算,且无法将该逻辑移动到注入应用中,那么您可能需要考虑转向选项#2。

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

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

  • 您是否正在使用PowerMTA替换语法或其他内联消息修改?

    • 如果您能将此功能移至生成器或使用Bird Template Language,则仍可选择选项1,但否则,您可能需要考虑在发给Bird进行交付前保持一个PMTA节点在线以进行消息修改。

  • 您是否需要在注入前进行任何入站AV/AS扫描?虽然在Momentum和PowerMTA中可以这样做,但eBird假设您已经完成了所有检查。您可能需要考虑在注入前执行此操作。

无论您选择哪种方式,这都肯定会影响您的商业关系。如您所想,这不是我们的第一次经历。一定要让您的商业客户经理和客户成功经理参与,以便我们帮助您了解细节,并确保您获得最佳的投资回报。

对于选项 #1 Camp(直接停止冷火鸡方式):

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

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

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

大多数大型ESPs在迁移时最大的担忧之一是IP预热。通常,他们已经花费多年精心管理其IP地址的库存,因此放弃所有这些工作的想法是痛苦的。Bird已经制定了一个Bring Your Own IP (BYOIP)流程,以解决这个问题。如果您至少有一个连续的/24 CIDR块,Bird可以使用这些现有的IP进行交付,这样可以免去再次预热的麻烦。如果您能利用这一选项,您可以跳过此处关于IP预热的部分。

如果您觉得准备好了,可以直接跳到“Making it happen”

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

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

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

大多数大型ESPs在迁移时最大的担忧之一是IP预热。通常,他们已经花费多年精心管理其IP地址的库存,因此放弃所有这些工作的想法是痛苦的。Bird已经制定了一个Bring Your Own IP (BYOIP)流程,以解决这个问题。如果您至少有一个连续的/24 CIDR块,Bird可以使用这些现有的IP进行交付,这样可以免去再次预热的麻烦。如果您能利用这一选项,您可以跳过此处关于IP预热的部分。

如果您觉得准备好了,可以直接跳到“Making it happen”

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

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

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

大多数大型ESPs在迁移时最大的担忧之一是IP预热。通常,他们已经花费多年精心管理其IP地址的库存,因此放弃所有这些工作的想法是痛苦的。Bird已经制定了一个Bring Your Own IP (BYOIP)流程,以解决这个问题。如果您至少有一个连续的/24 CIDR块,Bird可以使用这些现有的IP进行交付,这样可以免去再次预热的麻烦。如果您能利用这一选项,您可以跳过此处关于IP预热的部分。

如果您觉得准备好了,可以直接跳到“Making it happen”

利用 Option #2 (on-prem pre-processing):

如果您属于选项#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,那么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进行传送。

如果您属于选项#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,那么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进行传送。

如果您属于选项#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,那么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账户,并使用开发子账户进行全面测试,以便您以后能够过滤掉这些流量。无论选择哪个选项,都需要这样做,因为无论如何,您都需要SMTP_Auth密码的API密钥。

  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调用实现自动化。

当你开始走上这条道路时,不要犯下以为这是一个一夜之间就能完成的操作的错误。正确地做到这一点需要一些时间和耐心。

  1. 设置您的Bird账户,并使用开发子账户进行全面测试,以便您以后能够过滤掉这些流量。无论选择哪个选项,都需要这样做,因为无论如何,您都需要SMTP_Auth密码的API密钥。

  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调用实现自动化。

当你开始走上这条道路时,不要犯下以为这是一个一夜之间就能完成的操作的错误。正确地做到这一点需要一些时间和耐心。

  1. 设置您的Bird账户,并使用开发子账户进行全面测试,以便您以后能够过滤掉这些流量。无论选择哪个选项,都需要这样做,因为无论如何,您都需要SMTP_Auth密码的API密钥。

  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。

如果您需要 PULL 数据而不能接受 PUSH 数据,那么在 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 日志的形式返回,也可以通过添加一些条件代码来实现。好消息是已经有一些示例可供借鉴。

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。

如果您需要 PULL 数据而不能接受 PUSH 数据,那么在 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 日志的形式返回,也可以通过添加一些条件代码来实现。好消息是已经有一些示例可供借鉴。

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。

如果您需要 PULL 数据而不能接受 PUSH 数据,那么在 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 (能够完全从本地迁移) 还是营地 #2 (仍需一些本地 MTA)。

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

  3. 选择SMTPREST API注入方法。

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

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

  6. 如果需要,请使用新域更新您的 DNS。

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

  8. 增加流量直到所有流量都被迁移。

  9. 如果您适合营地 #1,所有流量迁移后,您终于可以关闭您的本地 MTA。

在为高流量邮件系统规划 DNS 更改时,注意可能影响大规模邮件传递性能的AWS DNS 扩展挑战

确保您与您的销售和成功管理团队进行沟通。我们之前做过这件事,可以帮助您快速且成本效益地完成。

  1. 确定您是属于营地 #1 (能够完全从本地迁移) 还是营地 #2 (仍需一些本地 MTA)。

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

  3. 选择SMTPREST API注入方法。

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

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

  6. 如果需要,请使用新域更新您的 DNS。

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

  8. 增加流量直到所有流量都被迁移。

  9. 如果您适合营地 #1,所有流量迁移后,您终于可以关闭您的本地 MTA。

在为高流量邮件系统规划 DNS 更改时,注意可能影响大规模邮件传递性能的AWS DNS 扩展挑战

确保您与您的销售和成功管理团队进行沟通。我们之前做过这件事,可以帮助您快速且成本效益地完成。

  1. 确定您是属于营地 #1 (能够完全从本地迁移) 还是营地 #2 (仍需一些本地 MTA)。

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

  3. 选择SMTPREST API注入方法。

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

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

  6. 如果需要,请使用新域更新您的 DNS。

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

  8. 增加流量直到所有流量都被迁移。

  9. 如果您适合营地 #1,所有流量迁移后,您终于可以关闭您的本地 MTA。

在为高流量邮件系统规划 DNS 更改时,注意可能影响大规模邮件传递性能的AWS DNS 扩展挑战

其他新闻

阅读更多来自此类别的内容

A person is standing at a desk while typing on a laptop.

完整的AI原生平台,可与您的业务一起扩展。

© 2025 Bird

A person is standing at a desk while typing on a laptop.

完整的AI原生平台,可与您的业务一起扩展。

© 2025 Bird