我是 Amazon SES 的新手,我发现有两种以编程方式发送电子邮件的方法:
每种方法的优缺点是什么?对我来说它们似乎可以互换,但我想听听有 SES 经验的人的意见。
根据我自己的要求,我将在用户交互时向他们发送交易电子邮件(即收据、帐户确认等)和通知电子邮件(即“您有新消息”、状态更改等)使用我的网络和移动应用程序。如果可能的话,我想保留所有这些外发电子邮件的历史记录。
SES API 将您与 AWS、SMTP 接口联系起来……好吧,这就是 SMTP。
您是否预见到将来需要脱离 AWS?您的应用程序是否已经通过 SMTP 与另一个电子邮件服务器进行通信?
根据您当前的应用程序,使用 SMTP 可能会更容易。
如果您是从头开始并且预计不需要离开 AWS,那么您可能应该使用 SES API。
从亚马逊关于提高吞吐量的文档中可以看出,该 API 的优势之一是可以选择使用持久 HTTP 连接来提高吞吐量。这对于 SMTP 选项不可用。
除此之外,我还没有发现 API 和 SMTP 之间有任何其他主要区别。
通过使用SES API,您正在使用SDK,因此您可以在实例上使用角色:您不必处理和存储配置的密码,因此您不会经历更改密码的痛苦.
我发布了一个小项目https://github.com/loopingz/aws-smtp-relay 从本地主机 SMTP 中继到 SES API,这样您就可以将仅处理 SMTP 的旧应用程序连接到更普通的 SES API
它们对我来说似乎可以互换
这是一个公平的分析。 我对新代码使用 API,对已经知道如何使用 SMTP 的现有代码使用 SMTP。 我还没有找到强有力的案例。
这两个界面都不会保留历史记录——您必须自己做。 我正在开发的一种与某些遗留代码一起使用的机制是 SMTP 代理,它捕获应用程序和 SES 之间的交互,使用 SES 消息 ID 作为 S3 密钥将整个事务保存到 S3,以便以后在需要时进行检索(仍然是工作正在进行中,还有更紧迫的项目要做)。
您至少需要保留 SES 返回的消息 ID,并配置退回邮件、送达和投诉通知,以便您获得反馈...这对于任一界面也同样有效。
根据我的经验,发送批量电子邮件时经常会出现延迟。我可以使用 API 每秒发送 20-30 封电子邮件,但使用 SMTP 每秒只能发送 5-10 封电子邮件。因此,我更喜欢使用 API 而不是 SMTP。
根据故障排除文档文档,通过 SMTP 使用 API 有 4 个好处:
多个网络请求:使用 Amazon SES 查询 API 允许您通过单个网络调用提交电子邮件发送请求。相反,与 SMTP 端点的接口涉及多个网络请求(例如,EHLO、MAIL FROM、RCPT TO、DATA、QUIT)。有关 Amazon SES 查询 API 的更多信息,请参阅使用 Amazon SES API 发送电子邮件。
多线程:当应用程序使用单线程时,应用程序代码调用 Amazon SES API,然后同步等待 API 响应。发送电子邮件通常是 I/O 密集型操作,从多个线程执行工作可提供更好的吞吐量。您可以使用任意数量的执行线程同时发送。
持久 HTTP 连接:通过 API,您可以使用持久 HTTP 连接来减少开销。您可以为多个请求重复使用同一个连接,而不是为每个 API 请求建立新的 HTTP 连接。
SMTP 特定问题:如果您通过 Amazon SES 的 SMTP 接口使用 Amazon SES,请参阅 Amazon SES SMTP 问题,了解可能影响吞吐量的特定 SMTP 相关问题。