批量邮件无重复

假设一名成员选择了他感兴趣的群组和子类别。

我想向选择这些群组和子类别的人发送公告。

例如:在一个由全球主城市、多个区域和事项组成的城市中。

用户可以选择:

  • 特定事项(作为一般群组),
  • 其所在区域中该事项的一个群组,
  • 另外两个区域中该事项的一个群组,
  • 第二个特定事项(作为一般群组),
  • 该事项所有区域中的所有群组,
  • 主城市的主群组;

如果我想向这些群组中的一个或多个群组或子类别发送电子邮件,某些用户可能会收到同一公告的多封电子邮件,特别是如果该人选择了主城市群组,该群组会转发所有区域的信息,再加上一些子群组等。

问题:我如何准备一个涉及多个目标群组和子类别列表的邮件,无重复,并发送该消息?

  1. 我需要使用外部脚本吗?

  2. 我需要外部邮件处理器吗?

谢谢

Marc

如果您需要跨任意组和类别保证无重复的发送,您必须:

  • 从目标组或类别导出用户列表。
  • 手动或使用脚本合并和去重这些列表。
  • 使用外部邮件处理器将消息发送到去重后的列表。

这是确保用户不会多次收到相同公告的最稳健的方法。

谢谢,您知道我们可以自动化这一点吗?例如,请求 API 以便为每个新成员注册/退出或组/类别选择接收消息,并且只接收新的更改,或者(不太理想)接收包含其组/类别的整个列表,这些都可以由 Python 程序请求?(我可以管理 Python 代码)。问题更多是关于 Discourse 和 Python 之间的自动通信,以及 Python 和邮件处理器之间的通信。

Discourse 提供了一个强大的 REST API,允许您:

  • 列出所有用户、群组和用户-群组关系
  • 监控新用户注册和群组加入/离开操作(通过轮询或 Webhook)
  • 检索类别成员资格配置

您可以查询完整列表或尝试跟踪近期更改。要实现完整的增量更改检测,您可能需要实现基于时间的检查并在本地管理差异。身份验证通过 HTTP 标头(Api-KeyApi-Username)处理。

但是,为了更高效和集成化的控制,我建议创建一个自定义 Discourse 插件。插件在 Discourse 服务器环境中运行,并提供对 Discourse 内部的直接访问,例如:

  • 用户、群组和类别成员资格更新
  • 注册和群组更改的生命周期事件钩子
  • 直接访问 Discourse 的内部 API 和数据库

这种方法为您提供了实时功能和更大的灵活性,可用于实现诸如邮件处理或用户分段等自动化工作流。

我们可以创建一个插件,即使它由 Discourse 托管,也能在我们的实例上运行,还是我们需要托管它?

如果是非官方插件,我认为只能安装在企业版上,否则您将不得不自行托管。

  • 生成动态列表(用户/组/类别数据)并在 Discourse 中显示或存储它们。
  • 将数据导出到文件,或创建可下载的管理报告。
  • 向另一个服务器发出 HTTP(S) 请求(例如,将用户列表更新推送到您的 Python/电子邮件工具)。
  • 触发 Webhook、计划任务或直接与外部 API 集成——所有这些都可以在 Discourse 内部完成,无需轮询。

@EMHmark7 你最终弄清楚要如何实现这个功能了吗?

在 Discourse 中,实现你想要的功能的一种方法是创建分类,并让社区成员通过选择“监视”通知级别来“订阅”这些分类。默认监视分类默认监视首帖 对于在你的站点上设置一个公告分类非常方便,可以触达你站点上的所有人。

我相信有方法可以根据组成员身份或其他标准来管理上述内容,但我有一段时间没做过了——也许其他人有可以分享的经验。

另一种方法是直接向群组发送私信——如果你向几个群组发送私信,并且同一成员在多个群组中,就不会有重复。

但听起来你可能在寻找一个不同的工具,如果你想要的是一个人们登录参与讨论的论坛或社区,而不是一组发送邮件的邮件列表。

所有这些都可以写在 Discourse 之外的代码中,所以你不需要安装它。如果你正在使用 WordPress,那么你可以使用 GitHub - discourse/wp-discourse: WordPress plugin that lets you use Discourse as the community engine for a WordPress blog 免费获得其中很多功能,然后使用另一个 WordPress 插件来处理邮件列表部分。