用户垃圾信息——自动删除账户与域名黑名单

我发现我的 Discourse 论坛每天都会被创建少量但数量稳定的垃圾账户。许多账户似乎使用了虚假或无效的电子邮件地址。

我正在寻找一种自动化以下流程的方法:

  1. 新用户创建账户,Discourse 发送激活/验证电子邮件。
  2. 如果激活电子邮件导致确认的硬退信(hard bounce),则自动删除未激活的用户账户。
  3. 系统记录退信电子邮件地址的域名。
  4. 如果在规定的时间内,多个使用相同域名的新账户导致硬退信,则该域名会自动添加到被阻止的电子邮件域名列表中。
  5. 常见的合法电子邮件提供商(如 Gmail、Outlook、Yahoo 等)需要排除在自动域名阻止之外。

例如,如果在几天内创建了多个使用不同电子邮件地址但来自 suspicious-domain.example 的账户,且所有这些账户的激活电子邮件都发生硬退信,那么该域名最终将被阻止创建更多账户。

目标是利用退信数据作为识别自动化垃圾注册的另一个信号,同时自动清理使用不存在的电子邮件地址创建的未激活账户。

Discourse 目前是否有插件或现有功能可以实现这一点?如果没有,Discourse 的退信处理流程中是否有可用的钩子(hooks),可用于构建插件来实现此功能?

你好 @LotusJeff

你是否查看过这些设置?我认为它们能帮你解决部分问题:

/admin/settings/ 中配置这些设置

设置项 建议值 效果
purge_unactivated_users_grace_period_days 1 在 1 天内删除未激活的账户,而不是 14 天。虽然不像 #2 中要求的那样即时生效,但效果相同,只是延迟更短。
blocked_email_domains 手动添加已知的垃圾邮件顶级域名/域名 阻止已知违规者的注册

对于真正自动化的解决方案,我认为需要开发一个插件(据我所知目前可能没有),或者你可以看看 新的工作流功能。我不确定你是否能实现想要的功能,但该功能几乎每天都在更新,所以谁知道呢 :slight_smile:

如果选择插件路线,你可以挂钩 DiscourseEvent.on(:email_bounce) 事件。

另外,也值得看看 Configure VERP to handle bouncing e-mails