S/MIME 第 3 部分:本地安全电子邮件的即插即用

2019年12月1日

电子邮件

1 min read

S/MIME 第 3 部分:本地安全电子邮件的即插即用

关键要点

    • 适合本地邮件传输代理(MTA)的S/MIME集成:了解如何在保留现有DKIM和合规设置的情况下,将签名和加密的电子邮件流注入PowerMTAMomentumSparkPost SMTP

    • 混合安全模型:结合S/MIME加密 + DKIM签名以确保在受监管的环境中,邮件的真实性和内容隐私。

    • 部署流程:配置环境变量(SMTP_HOST,凭据,密钥),运行--sign --encrypt --send_smtp工作流程,并验证投递报告。

    • 性能见解:测试显示SMTP和API注入的速度几乎相同(每条消息约60毫秒,较大文件为200–280毫秒)。

    • 安全最佳实践:在受限文件(chmod 0700)中存储私钥和API密码,使用STARTTLS和认证过的SMTP会话。

    • 使用案例:现代化企业的旧邮件系统可以在不放弃现有基础设施的情况下扩展端到端加密。

Q&A 精华

  • 为什么为内置服务器适配 S/MIME 而不是云 API?

    许多受监管行业(银行和医疗保健行业)必须在现场保留邮件。这种方法在添加现代加密保护的同时保持了对消息流的控制。

  • SMTP injection 如何与 PowerMTA 或 Momentum 配合工作?

    您将完全形成的S/MIME消息注入到本地侦听器(端口25或私人VLAN)。这些MTA然后照常处理DKIM签名和交付。

  • S/MIME 是否与 DKIM 兼容?

    是的 — DKIM在S/MIME加密后签署消息,因此身份验证和完整性检查保持不变。

  • 如何保护我的SMTP凭证和密钥?

    仅在封闭脚本中导出环境变量,并使用文件权限限制对自己的访问(chmod 0700 my_envs.sh)。

  • 设置后我应该监控什么?

    传输延迟(API vs SMTP)、TLS 握手成功率、DKIM/S-MIME 验证结果,以及“拒绝中继”或缺少身份验证的错误日志。

  • 谁能最从这种配置中受益?

    运行业务的组织需要合规级别的加密,但又希望不重写邮件管道的情况下使用即插即用的工具。

第1部分中,我们快速浏览了S/MIME,查看在一系列邮件客户端中对消息流进行签名和加密。对于实施S/MIME加密的组织,了解如何高效收集收件人公钥对于可扩展的安全电子邮件操作至关重要。第2部分带我们了解了一个简单的命令行工具,用于签署和加密电子邮件,然后通过SparkPost发送。

在这部分中,我们将看看如何调整该工具以将邮件流注入到本地平台,如Port25 PowerMTAMomentum

好 – 我们开始吧!

第1部分中,我们快速浏览了S/MIME,查看在一系列邮件客户端中对消息流进行签名和加密。对于实施S/MIME加密的组织,了解如何高效收集收件人公钥对于可扩展的安全电子邮件操作至关重要。第2部分带我们了解了一个简单的命令行工具,用于签署和加密电子邮件,然后通过SparkPost发送。

在这部分中,我们将看看如何调整该工具以将邮件流注入到本地平台,如Port25 PowerMTAMomentum

好 – 我们开始吧!

第1部分中,我们快速浏览了S/MIME,查看在一系列邮件客户端中对消息流进行签名和加密。对于实施S/MIME加密的组织,了解如何高效收集收件人公钥对于可扩展的安全电子邮件操作至关重要。第2部分带我们了解了一个简单的命令行工具,用于签署和加密电子邮件,然后通过SparkPost发送。

在这部分中,我们将看看如何调整该工具以将邮件流注入到本地平台,如Port25 PowerMTAMomentum

好 – 我们开始吧!

1. 入门指南

安装工具、获取密钥等,与之前完全相同。当您使用诸如PowerMTAMomentum之类的本地电子邮件系统时,您已经负责设置发送域、DKIM密钥等。运行本地系统的组织通常还需要应对电子邮件归档系统挑战以满足法规合规和数据保留要求。我们现在需要做的是提供一种将完全形成的S/MIME消息注入您的服务器的方法。

安装工具、获取密钥等,与之前完全相同。当您使用诸如PowerMTAMomentum之类的本地电子邮件系统时,您已经负责设置发送域、DKIM密钥等。运行本地系统的组织通常还需要应对电子邮件归档系统挑战以满足法规合规和数据保留要求。我们现在需要做的是提供一种将完全形成的S/MIME消息注入您的服务器的方法。

安装工具、获取密钥等,与之前完全相同。当您使用诸如PowerMTAMomentum之类的本地电子邮件系统时,您已经负责设置发送域、DKIM密钥等。运行本地系统的组织通常还需要应对电子邮件归档系统挑战以满足法规合规和数据保留要求。我们现在需要做的是提供一种将完全形成的S/MIME消息注入您的服务器的方法。

2. SMTP 注入至 Port25 PowerMTA

PowerMTA 支持多种消息注入方式,包括文件 “pickup” 目录、SMTP 和 API。这里使用的是 SMTP 方法。

为了展示最简单的设置,我们将在与 PowerMTA 相同的服务器上安装 S/MIME 工具。我们将消息注入到监听程序中,默认情况下监听 TCP 端口 25,仅接受本地流量。

export SMTP_HOST=localhost

(如果您忘记了这一步,尝试运行时将看到:“Environment var SMTP_HOST not set – stopping”) 


我们已经有发件人的私钥 (steve@thetucks.com.pem) 和收件人的公钥 (steve.tuck@sparkpost.com.crt)。消息文件的前几行是:

To: SteveT <steve.tuck@sparkpost.com>
From: Steve <steve@thetucks.com>
Subject: This is a message created using HEML
MIME-Version: 1.0
Content-Type: text/html; charset=utf-8
Content-Language: en-GB
Content-Transfer-Encoding: 7bit


我们用以下命令发送消息:

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp


我们看到:

Opened SMTP connection (plain)  
Host: localhost  
Port: 25  
User: ""  
Password: ""  
Sending: tests/fancy-HTML-to-smt.eml  
From: Steve <steve@thetucks.com>  
To: SteveT <steve.tuck@sparkpost.com>  
OK - in 0.028 seconds


消息迅速到达 inbox,并在 Mac Mail 中报告为已签名和加密。

Email from Avocado showing a marketing message with security features enabled, displayed in Mac Mail as signed and encrypted.


额外功能:PowerMTA 的 DKIM

DKIM 的配置相当简单,并且与 S/MIME 可愉快地共存。步骤如下:

  • 使用 PowerMTA DKIM Wizard 网站创建发送域的私钥(在我的情况下为 mypmta.thetucks.com.pem)和公有 DNS TXT 记录内容。

  • 设置 DNS TXT 记录,并选择一个选择器。例如,我使用了选择器 pmta201811。有效选择器字符请见此处

  • 将 mypmta.thetucks.com.pem 文件放置在服务器目录 /etc/pmta 中。

  • 将以下内容添加到我的 /etc/pmta/config 中,并重启 pmta 服务。(在此,这些指令被写在全局范围内;在生产系统中,您可能更喜欢将其添加在虚拟 mta 下。)


host-name thetucks.com
domain-key pmta201811,*,/etc/pmta/mypmta.thetucks.com.pem
<domain *>
  dkim-sign yes
</domain>


通过 MX Toolbox 检查 DNS 记录没有问题,DKIM 现在已激活。

MX Toolbox interface showing successful DKIM record verification with all tests passing for email authentication security.

PowerMTA 支持多种消息注入方式,包括文件 “pickup” 目录、SMTP 和 API。这里使用的是 SMTP 方法。

为了展示最简单的设置,我们将在与 PowerMTA 相同的服务器上安装 S/MIME 工具。我们将消息注入到监听程序中,默认情况下监听 TCP 端口 25,仅接受本地流量。

export SMTP_HOST=localhost

(如果您忘记了这一步,尝试运行时将看到:“Environment var SMTP_HOST not set – stopping”) 


我们已经有发件人的私钥 (steve@thetucks.com.pem) 和收件人的公钥 (steve.tuck@sparkpost.com.crt)。消息文件的前几行是:

To: SteveT <steve.tuck@sparkpost.com>
From: Steve <steve@thetucks.com>
Subject: This is a message created using HEML
MIME-Version: 1.0
Content-Type: text/html; charset=utf-8
Content-Language: en-GB
Content-Transfer-Encoding: 7bit


我们用以下命令发送消息:

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp


我们看到:

Opened SMTP connection (plain)  
Host: localhost  
Port: 25  
User: ""  
Password: ""  
Sending: tests/fancy-HTML-to-smt.eml  
From: Steve <steve@thetucks.com>  
To: SteveT <steve.tuck@sparkpost.com>  
OK - in 0.028 seconds


消息迅速到达 inbox,并在 Mac Mail 中报告为已签名和加密。

Email from Avocado showing a marketing message with security features enabled, displayed in Mac Mail as signed and encrypted.


额外功能:PowerMTA 的 DKIM

DKIM 的配置相当简单,并且与 S/MIME 可愉快地共存。步骤如下:

  • 使用 PowerMTA DKIM Wizard 网站创建发送域的私钥(在我的情况下为 mypmta.thetucks.com.pem)和公有 DNS TXT 记录内容。

  • 设置 DNS TXT 记录,并选择一个选择器。例如,我使用了选择器 pmta201811。有效选择器字符请见此处

  • 将 mypmta.thetucks.com.pem 文件放置在服务器目录 /etc/pmta 中。

  • 将以下内容添加到我的 /etc/pmta/config 中,并重启 pmta 服务。(在此,这些指令被写在全局范围内;在生产系统中,您可能更喜欢将其添加在虚拟 mta 下。)


host-name thetucks.com
domain-key pmta201811,*,/etc/pmta/mypmta.thetucks.com.pem
<domain *>
  dkim-sign yes
</domain>


通过 MX Toolbox 检查 DNS 记录没有问题,DKIM 现在已激活。

MX Toolbox interface showing successful DKIM record verification with all tests passing for email authentication security.

PowerMTA 支持多种消息注入方式,包括文件 “pickup” 目录、SMTP 和 API。这里使用的是 SMTP 方法。

为了展示最简单的设置,我们将在与 PowerMTA 相同的服务器上安装 S/MIME 工具。我们将消息注入到监听程序中,默认情况下监听 TCP 端口 25,仅接受本地流量。

export SMTP_HOST=localhost

(如果您忘记了这一步,尝试运行时将看到:“Environment var SMTP_HOST not set – stopping”) 


我们已经有发件人的私钥 (steve@thetucks.com.pem) 和收件人的公钥 (steve.tuck@sparkpost.com.crt)。消息文件的前几行是:

To: SteveT <steve.tuck@sparkpost.com>
From: Steve <steve@thetucks.com>
Subject: This is a message created using HEML
MIME-Version: 1.0
Content-Type: text/html; charset=utf-8
Content-Language: en-GB
Content-Transfer-Encoding: 7bit


我们用以下命令发送消息:

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp


我们看到:

Opened SMTP connection (plain)  
Host: localhost  
Port: 25  
User: ""  
Password: ""  
Sending: tests/fancy-HTML-to-smt.eml  
From: Steve <steve@thetucks.com>  
To: SteveT <steve.tuck@sparkpost.com>  
OK - in 0.028 seconds


消息迅速到达 inbox,并在 Mac Mail 中报告为已签名和加密。

Email from Avocado showing a marketing message with security features enabled, displayed in Mac Mail as signed and encrypted.


额外功能:PowerMTA 的 DKIM

DKIM 的配置相当简单,并且与 S/MIME 可愉快地共存。步骤如下:

  • 使用 PowerMTA DKIM Wizard 网站创建发送域的私钥(在我的情况下为 mypmta.thetucks.com.pem)和公有 DNS TXT 记录内容。

  • 设置 DNS TXT 记录,并选择一个选择器。例如,我使用了选择器 pmta201811。有效选择器字符请见此处

  • 将 mypmta.thetucks.com.pem 文件放置在服务器目录 /etc/pmta 中。

  • 将以下内容添加到我的 /etc/pmta/config 中,并重启 pmta 服务。(在此,这些指令被写在全局范围内;在生产系统中,您可能更喜欢将其添加在虚拟 mta 下。)


host-name thetucks.com
domain-key pmta201811,*,/etc/pmta/mypmta.thetucks.com.pem
<domain *>
  dkim-sign yes
</domain>


通过 MX Toolbox 检查 DNS 记录没有问题,DKIM 现在已激活。

MX Toolbox interface showing successful DKIM record verification with all tests passing for email authentication security.

3. SMTP 注入向动量

Momentum 支持多种消息注入方式,包括 API 和 SMTP。SMTP 是此处使用的方法,用于已经运行 Momentum 的主机。我们将保持其配置不变,因为它已经具备接受其他批准主机传入注入的能力。

这是生产设置的小型版本,其中的“generation”节点和 MTA 节点是分开的,但通过私有 VLAN 和负载均衡器密切耦合,承载内部 SMTP 注入流量。


Diagram showing email flow from a generation server to on-premises MTA (Mail Transfer Agent) via SMTP protocol.


S/MIME 工具如前所述已安装完毕,我们将把消息注入 SMTP 主机(MTA)的地址:

export SMTP_HOST=xx.xx.xx.xx # set your own MTA / VIP address here

如前所述,我们已在“generation”节点上拥有发件人的私钥 (steve@thetucks.com.pem) 和收件人的公钥 (steve.tuck@sparkpost.com.crt)。消息文件的前几行与这些地址匹配。

我们从“generation”节点发送消息,使用与之前完全相同的命令,消息显示在 Inbox 中。

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp

正如您所期望的,S/MIME 还可以与 Momentum 的 DKIM 签名 幸福共存。

Momentum 支持多种消息注入方式,包括 API 和 SMTP。SMTP 是此处使用的方法,用于已经运行 Momentum 的主机。我们将保持其配置不变,因为它已经具备接受其他批准主机传入注入的能力。

这是生产设置的小型版本,其中的“generation”节点和 MTA 节点是分开的,但通过私有 VLAN 和负载均衡器密切耦合,承载内部 SMTP 注入流量。


Diagram showing email flow from a generation server to on-premises MTA (Mail Transfer Agent) via SMTP protocol.


S/MIME 工具如前所述已安装完毕,我们将把消息注入 SMTP 主机(MTA)的地址:

export SMTP_HOST=xx.xx.xx.xx # set your own MTA / VIP address here

如前所述,我们已在“generation”节点上拥有发件人的私钥 (steve@thetucks.com.pem) 和收件人的公钥 (steve.tuck@sparkpost.com.crt)。消息文件的前几行与这些地址匹配。

我们从“generation”节点发送消息,使用与之前完全相同的命令,消息显示在 Inbox 中。

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp

正如您所期望的,S/MIME 还可以与 Momentum 的 DKIM 签名 幸福共存。

Momentum 支持多种消息注入方式,包括 API 和 SMTP。SMTP 是此处使用的方法,用于已经运行 Momentum 的主机。我们将保持其配置不变,因为它已经具备接受其他批准主机传入注入的能力。

这是生产设置的小型版本,其中的“generation”节点和 MTA 节点是分开的,但通过私有 VLAN 和负载均衡器密切耦合,承载内部 SMTP 注入流量。


Diagram showing email flow from a generation server to on-premises MTA (Mail Transfer Agent) via SMTP protocol.


S/MIME 工具如前所述已安装完毕,我们将把消息注入 SMTP 主机(MTA)的地址:

export SMTP_HOST=xx.xx.xx.xx # set your own MTA / VIP address here

如前所述,我们已在“generation”节点上拥有发件人的私钥 (steve@thetucks.com.pem) 和收件人的公钥 (steve.tuck@sparkpost.com.crt)。消息文件的前几行与这些地址匹配。

我们从“generation”节点发送消息,使用与之前完全相同的命令,消息显示在 Inbox 中。

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp

正如您所期望的,S/MIME 还可以与 Momentum 的 DKIM 签名 幸福共存。

4. SMTP 注入到 SparkPost

第2部分中,我们使用SparkPost传输REST API来注入消息。当然,也可以使用SMTP将消息注入到SparkPost中。我们这样设置环境变量:

export SMTP_PASSWORD=<<YOUR_API_KEY_HERE>

如果您使用的是SparkPost欧盟托管服务,那么将SMTP_HOST设置为smtp.eu.sparkpostmail.com。
参见此处以获取更多选项 —— 例如,您可以在端口2525而不是587上注入。)

下面的输出显示使用了STARTTLS,以及用户名和密码。

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp


您将看到:

Opened SMTP connection (STARTTLS)  
Host: smtp.sparkpostmail.com  
Port: 587  
User: "SMTP_Injection"  
Password: "****************************************"  
Sending: tests/fancy-HTML-to-smt.eml  
From: Steve <steve@thetucks.com>  
To: SteveT <steve.tuck@sparkpost.com>  
OK - in 0.057 seconds

密码用替代的***字符打印,因此即使有人在旁边查看,您的密钥隐私也不会受到影响。

保护您的凭据

请注意,可以在一个shell脚本文件或类似文件中设置环境变量,以保存重打字。如果这样做,请通过限制文件的访问权限来保护您的密码/API密钥。例如,如果您的凭据设置文件名为my_envs.sh,则运行:

chmod 0700 my_envs.sh


您可能看到的与SMTP相关的警告

SparkPost的SMTP注入相当严格,也符合公共服务的预期。如果您未设置SMTP端口号,您将看到以下警告:

{
  'bob.lumreeker@gmail.com': (550, b'5.7.1 relaying denied')
}


如果您未设置SMTP用户名或者未设置密码,您将看到:

(530, b'5.7.1 Authorization required. 
Ref. https://developers.sparkpost.com/api/index#header-smtp-relay-endpoints', 
'steve@thetucks.com')

这些错误信息只是从Python SMTP库原样报告,因此有这样的格式。

第2部分中,我们使用SparkPost传输REST API来注入消息。当然,也可以使用SMTP将消息注入到SparkPost中。我们这样设置环境变量:

export SMTP_PASSWORD=<<YOUR_API_KEY_HERE>

如果您使用的是SparkPost欧盟托管服务,那么将SMTP_HOST设置为smtp.eu.sparkpostmail.com。
参见此处以获取更多选项 —— 例如,您可以在端口2525而不是587上注入。)

下面的输出显示使用了STARTTLS,以及用户名和密码。

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp


您将看到:

Opened SMTP connection (STARTTLS)  
Host: smtp.sparkpostmail.com  
Port: 587  
User: "SMTP_Injection"  
Password: "****************************************"  
Sending: tests/fancy-HTML-to-smt.eml  
From: Steve <steve@thetucks.com>  
To: SteveT <steve.tuck@sparkpost.com>  
OK - in 0.057 seconds

密码用替代的***字符打印,因此即使有人在旁边查看,您的密钥隐私也不会受到影响。

保护您的凭据

请注意,可以在一个shell脚本文件或类似文件中设置环境变量,以保存重打字。如果这样做,请通过限制文件的访问权限来保护您的密码/API密钥。例如,如果您的凭据设置文件名为my_envs.sh,则运行:

chmod 0700 my_envs.sh


您可能看到的与SMTP相关的警告

SparkPost的SMTP注入相当严格,也符合公共服务的预期。如果您未设置SMTP端口号,您将看到以下警告:

{
  'bob.lumreeker@gmail.com': (550, b'5.7.1 relaying denied')
}


如果您未设置SMTP用户名或者未设置密码,您将看到:

(530, b'5.7.1 Authorization required. 
Ref. https://developers.sparkpost.com/api/index#header-smtp-relay-endpoints', 
'steve@thetucks.com')

这些错误信息只是从Python SMTP库原样报告,因此有这样的格式。

第2部分中,我们使用SparkPost传输REST API来注入消息。当然,也可以使用SMTP将消息注入到SparkPost中。我们这样设置环境变量:

export SMTP_PASSWORD=<<YOUR_API_KEY_HERE>

如果您使用的是SparkPost欧盟托管服务,那么将SMTP_HOST设置为smtp.eu.sparkpostmail.com。
参见此处以获取更多选项 —— 例如,您可以在端口2525而不是587上注入。)

下面的输出显示使用了STARTTLS,以及用户名和密码。

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp


您将看到:

Opened SMTP connection (STARTTLS)  
Host: smtp.sparkpostmail.com  
Port: 587  
User: "SMTP_Injection"  
Password: "****************************************"  
Sending: tests/fancy-HTML-to-smt.eml  
From: Steve <steve@thetucks.com>  
To: SteveT <steve.tuck@sparkpost.com>  
OK - in 0.057 seconds

密码用替代的***字符打印,因此即使有人在旁边查看,您的密钥隐私也不会受到影响。

保护您的凭据

请注意,可以在一个shell脚本文件或类似文件中设置环境变量,以保存重打字。如果这样做,请通过限制文件的访问权限来保护您的密码/API密钥。例如,如果您的凭据设置文件名为my_envs.sh,则运行:

chmod 0700 my_envs.sh


您可能看到的与SMTP相关的警告

SparkPost的SMTP注入相当严格,也符合公共服务的预期。如果您未设置SMTP端口号,您将看到以下警告:

{
  'bob.lumreeker@gmail.com': (550, b'5.7.1 relaying denied')
}


如果您未设置SMTP用户名或者未设置密码,您将看到:

(530, b'5.7.1 Authorization required. 
Ref. https://developers.sparkpost.com/api/index#header-smtp-relay-endpoints', 
'steve@thetucks.com')

这些错误信息只是从Python SMTP库原样报告,因此有这样的格式。

哪一个更快——SMTP还是API?

性能比较

以下是性能测试的快速概述:

测量

SMTP

API

备注

小文件 (~19 KB)

~60 毫秒

~60 毫秒

性能几乎相同

大文件 (~577 KB)

~280 毫秒

~200 毫秒

API 在较大负载时略快

坦率地说,S/MIME 可能不太可能是高容量使用场景,但拥有具有两个输出选项的同一工具简直是在催促我们比赛!

这里使用的“Avocado”电子邮件测试文件大约为19KB。通过 bash 循环重复测试10次显示,SMTP 和 API 的平均时间相似,每条消息大约花费60毫秒,非常快。在这种情况下,我们从与 SparkPost.com 同一托管区域的中型 EC2 实例进行注入,这是一种保持网络往返时间低的好方法。

用更大的测试文件(577KB)重复此操作时,API 大约用了 200 毫秒,而 SMTP 每条消息需要 280 毫秒——对于文件大小大30倍的情况来说仍然令人印象深刻。当然,您的使用情况可能会因地点、互联网拥堵等而有所不同,但性能不太可能成为问题。

如果您确实需要获得最高性能,一个好的起点是根据我们的传输最佳实践建议启动一组并发注入进程/会话——例如,从主管任务中开始。

性能比较

以下是性能测试的快速概述:

测量

SMTP

API

备注

小文件 (~19 KB)

~60 毫秒

~60 毫秒

性能几乎相同

大文件 (~577 KB)

~280 毫秒

~200 毫秒

API 在较大负载时略快

坦率地说,S/MIME 可能不太可能是高容量使用场景,但拥有具有两个输出选项的同一工具简直是在催促我们比赛!

这里使用的“Avocado”电子邮件测试文件大约为19KB。通过 bash 循环重复测试10次显示,SMTP 和 API 的平均时间相似,每条消息大约花费60毫秒,非常快。在这种情况下,我们从与 SparkPost.com 同一托管区域的中型 EC2 实例进行注入,这是一种保持网络往返时间低的好方法。

用更大的测试文件(577KB)重复此操作时,API 大约用了 200 毫秒,而 SMTP 每条消息需要 280 毫秒——对于文件大小大30倍的情况来说仍然令人印象深刻。当然,您的使用情况可能会因地点、互联网拥堵等而有所不同,但性能不太可能成为问题。

如果您确实需要获得最高性能,一个好的起点是根据我们的传输最佳实践建议启动一组并发注入进程/会话——例如,从主管任务中开始。

性能比较

以下是性能测试的快速概述:

测量

SMTP

API

备注

小文件 (~19 KB)

~60 毫秒

~60 毫秒

性能几乎相同

大文件 (~577 KB)

~280 毫秒

~200 毫秒

API 在较大负载时略快

坦率地说,S/MIME 可能不太可能是高容量使用场景,但拥有具有两个输出选项的同一工具简直是在催促我们比赛!

这里使用的“Avocado”电子邮件测试文件大约为19KB。通过 bash 循环重复测试10次显示,SMTP 和 API 的平均时间相似,每条消息大约花费60毫秒,非常快。在这种情况下,我们从与 SparkPost.com 同一托管区域的中型 EC2 实例进行注入,这是一种保持网络往返时间低的好方法。

用更大的测试文件(577KB)重复此操作时,API 大约用了 200 毫秒,而 SMTP 每条消息需要 280 毫秒——对于文件大小大30倍的情况来说仍然令人印象深刻。当然,您的使用情况可能会因地点、互联网拥堵等而有所不同,但性能不太可能成为问题。

如果您确实需要获得最高性能,一个好的起点是根据我们的传输最佳实践建议启动一组并发注入进程/会话——例如,从主管任务中开始。

总结 …

我们已经看到,第2部分中使用的基于SparkPost API的工具已更新,以支持SMTP注入,从而支持本地MTAs,例如Port25 PowerMTAMomentum,以及SparkPost的各种配置。

就到这里!发送愉快。

我们已经看到,第2部分中使用的基于SparkPost API的工具已更新,以支持SMTP注入,从而支持本地MTAs,例如Port25 PowerMTAMomentum,以及SparkPost的各种配置。

就到这里!发送愉快。

我们已经看到,第2部分中使用的基于SparkPost API的工具已更新,以支持SMTP注入,从而支持本地MTAs,例如Port25 PowerMTAMomentum,以及SparkPost的各种配置。

就到这里!发送愉快。

其他新闻

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

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