
在这一部分,我们将探讨如何将该工具调整为将邮件流注入本地平台,例如PowerMTA和Momentum。
1. 入门指南
安装工具、获取密钥等与之前完全相同。当您使用类似PowerMTA或Momentum的本地电子邮件系统时,您已经负责设置发送域名、DKIM密钥等。运行本地系统的组织通常还需要解决电子邮件归档系统挑战以满足法规遵从性和数据保留要求。我们现在需要做的是提供一种方法,将完全形成的S/MIME消息注入到您的服务器中。
2. SMTP 注入向 Port25 PowerMTA
3. SMTP 注入倾向于势头
Momentum 支持多种消息注入方式,包括 API 和 SMTP。这里使用的 SMTP 方法是朝着已经运行 Momentum 的主机进行的。我们将保持它的配置不变,因为它已经具备接受其他已批准主机的传入注入的能力。
这是生产设置的一个较小版本,其中“generation”节点和 MTA 节点是分开的,但通过私有 VLAN 和负载均衡器紧密耦合,承载内部 SMTP 注入流量。

S/MIME 工具与以前一样安装,我们将向 SMTP 主机(MTA)的地址注入消息:
export SMTP_HOST=xx.xx.xx.xx # 在此处设置您自己的 MTA / VIP 地址
与以前一样,我们已经在“generation”节点上拥有发件人的私钥 (steve@thetucks.com.pem) 和收件人的公钥 (steve.tuck@sparkpost.com.crt)。消息文件的前几行与这些地址匹配。
我们从“generation”节点完全使用以前相同的命令发送消息,消息显示在收件箱中。
./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp
正如您所预料的,S/MIME 也可以愉快地与 Momentum 的 DKIM signing 共存。
4. SMTP injection towards SparkPost
在第2部分中,我们使用了SparkPost传输REST API来注入消息。当然,也可以使用SMTP将消息注入到SparkPost中。我们这样设置环境变量:
export SMTP_PASSWORD=<<YOUR API KEY HERE>> export SMTP_HOST=smtp.sparkpostmail.com export SMTP_USER=SMTP_Injection export SMTP_PORT=587
如果您使用SparkPostEU托管服务,那么将SMTP_HOST设置为smtp.eu.sparkpostmail.com。
(见此处了解更多选项——例如您可以使用端口2525而不是587注入。)
下面的输出显示使用了STARTTLS,以及用户名和密码。
./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp
您将看到:
打开的SMTP连接 (STARTTLS) 至smtp.sparkpostmail.com,端口587,用户="SMTP_Injection",密码="****************************************" 发送tests/fancy-HTML-to-smt.eml 发件人: Steve <steve@thetucks.com> 收件人: SteveT <steve.tuck@sparkpost.com> OK - 在0.057秒内
密码以替代的***字符打印,因此如果有人在您肩上看,您不会泄露密钥隐私。
保护您的凭证
请注意,环境变量可以在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?
坦白说,S/MIME 不太可能成为高频使用案例,但拥有相同工具的两个输出选项实在是让我们想进行一场比赛!
这里使用的“Avocado”邮箱测试文件大约为19KB。通过bash循环重复测试10次,显示SMTP和API的平均时间相似,大约每条消息为60毫秒,这相当快。在这种情况下,我们从与SparkPost.com同一托管区域内的中型EC2实例注入,这是一种保持网络往返时间较低的好方法。
使用更大的测试文件(577KB)重复此测试,API大约用了200毫秒,而SMTP每条消息用了280毫秒——对于一个大小大30倍的文件来说仍然令人印象深刻。当然,结果可能因位置、网络拥堵等因素而异,但性能不太可能成为问题。
如果您真的需要最大性能,一个好的起点是根据我们的传输最佳实践建议启动一组并发注入进程/会话——例如,从一个supervisor任务中。