将多封电子邮件合并为一封?

将多封电子邮件合并为一封?

我们正在运行 SGE 作业调度系统。用户可以让 SGE 在作业被取消时发送电子邮件。如果用户有大量作业(例如 100'000k 个条目)并一次性终止所有作业(使用 非常容易qkill -u USER),则用户的邮件帐户将被电子邮件淹没。

所有电子邮件似乎都是从 发送的[email protected],并且主题为"Job <numeric job id> (<name of script>) Killed"

所有电子邮件都通过配置为邮件代理的 Postfix 实例运行,它从所有节点收集作业,然后将它们转发到组织的实际邮件主机。

我想实现以下目标:

  • 将所有电子邮件保留 30 秒,直到转发。
  • 考虑过去 30 秒的电子邮件并检查是否有任何重复(相同To:,主题仅在数字职位 ID 上有所不同)。
  • 如果收到超过 10 封类似的电子邮件,则:
    • 创建一封“折叠”电子邮件,主题为“许多工作的折叠电子邮件()已删除”
    • 显示前 5 封电子邮件的正文
    • 然后显示"And <number> similar emails were dropped"
    • 将电子邮件时间设置为当前时间并放入队列。
  • 如果这种情况多次发生,<number>则应相应增加上述数字。
  • 然后应发送超过 30 秒的电子邮件。

我猜我没有找到正确的关键字,但我找不到合适的位置来挂载这样的脚本。这样的脚本的最佳位置在哪里?

我对编写这样的脚本没有任何问题,但如果有人知道现有的脚本,我会很感兴趣了解。

答案1

好吧,最后我通过编写一个解决了这个问题邮件过滤器其工作原理如下:

  • 如果消息符合From:/Subject:模式,则进一步处理。否则,直接接受。
  • 在处理的情况下,将其与时间戳和字段一起放入sqlite数据库中To:
  • 如果在过去 Y 秒内有==X 条消息,则发送一条警告消息,告知收件人他们的电子邮件已被过滤/丢弃。
  • <如果在过去 Y 秒内有X 条消息,则中继电子邮件。
  • >如果在过去 Y 秒内有X 条消息,则删除电子邮件。

当正确使用交易时,可以保证(1)在 Y 秒内发送的电子邮件不超过 X 封,并且(2)在达到阈值时可以发送一次“未来的电子邮件将被丢弃”的警告消息。

到目前为止,一切运行良好。

请注意,这也可以扩展为在爆发结束后将电子邮件合并为一个摘要,但最终我不愿意花时间来实现这一点。

相关内容