【问题标题】:How to Manage Email Groups in AWS?如何在 AWS 中管理电子邮件组?
【发布时间】:2019-02-21 16:28:44
【问题描述】:

我正在使用 Lambda + SES 向用户列表发送每日电子邮件。我正在使用 boto3 api client.list_verified_email_addresses() 命令生成经过验证的电子邮件列表。

但是,我需要向经过验证的电子邮件子集发送另一封电子邮件。创建和维护此电子邮件组的最佳方式是什么?

我更愿意在 AWS 中维护组并让 Lambda 代码引用 AWS 服务。我曾想过为用户订阅一个 SNS 主题并从该主题中获取列表,或者存储在 S3 中的电子邮件列表。有没有更好的解决方案或最佳实践我应该注意?

【问题讨论】:

  • 您是否真的要求名单上的每个人都通过 SES 验证他们的电子邮件?听起来您在沙盒模式下使用 SES,这远非理想。听起来您也正在尝试将 SES 用作类似于 Mailchimp 的海量电子邮件服务,但 SES 实际上是一种较低级别的服务,您可以使用它来构建类似 Mailchimp 的东西。
  • @MarkB 目前它被用于向公司内部用户发送从数据库生成的报告,因此格式化电子邮件非常简单。我们仍在使用沙盒模式,因为电子邮件是内部的……但需要一种方法来对内部收件人进行分组
  • 无论电子邮件格式如何,我认为您仍在尝试将 SES 用于超出其设计目的的用途。而且您现在肯定是在对收件人进行分组时,您需要在您的电子邮件服务器之上进行比 SES 提供的更高级别的抽象。如果您想要在 SES 之上进行电子邮件群组之类的操作,而无需自己重新发明,您可能会考虑建立一个 Sendy 服务器 sendy.co

标签: amazon-web-services aws-lambda amazon-sns amazon-ses


【解决方案1】:

最灵活的方法是创建一个 RDS 数据库并在其中以适合您用例的任何方式为您的电子邮件组建模,然后从数据库中提取电子邮件。您也可以在紧要关头使用 DynamoDB。

对此的最小(关系)数据库结构类似于:

Table: EmailRecipient
Columns:
    - emailAddress
    - name

Table: MailingList
Columns:
    - listId
    - listName

Table: MailingListEmailRecipient
Columns:
    - listId
    - emailAddress

“MailingListEmailRecipient”表用作邮件列表和收件人之间的多对多映射,您可以灵活地添加任意数量的列表,并且可以扩展表以包含其他相关信息,您可以添加一个表格来跟踪发送的电子邮件爆炸等。

如果您想使用 DynamoDB,那也可以;它在数据建模方面有点限制,以后可能会遇到一些问题,但作为一种快速而肮脏的解决方案,它可以工作,如果数据很小且不经常访问,成本可能会显着降低。在 DynamoDB 上,您可以执行以下操作:

Table: EmailRecipient
Partition Key: mailingListName
Sort Key: emailAddress
Optional fields:
    - recipientName

这将允许您将邮件列表的收件人存储在邮件列表分区键下。您也可以采用其他方式(emailAddress 作为分区键),这对于 DynamoDB 更优化(避免“热”分区),但如果您为此使用 DynamoDB,那么您可能正在构建一些快速而肮脏的东西(无论如何,更好的方法是 RDBMS)。

【讨论】:

    猜你喜欢
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    • 2019-12-06
    • 2012-04-10
    • 1970-01-01
    • 2012-07-27
    • 2012-02-26
    相关资源
    最近更新 更多