Dovecot:有没有办法从一个域的所有邮箱中删除特定的电子邮件?

Dovecot:有没有办法从一个域的所有邮箱中删除特定的电子邮件?

我希望能够从一个域的所有邮箱中删除特定的电子邮件,Dovecot 是否具有此类功能,或者是否有任何已知的好的解决方案?Maildir格式和域表示为/var/vmail/domain.tld/

问题

许多一次性的批量电子邮件,通常带有数兆字节的附件。

我尝试过什么

我已经研究过 doveadm Batch、Altmove、Expunge 命令,但似乎都不能完成(这种类型的)工作?

如果可能的话我想避免什么

最后的手段:grep通过Message-ID标题或ESMTP id多个标题之一的一部分进行递归Received标题之一的一部分进行递归。

编辑:感谢迄今为止的评论和回答,通过阅读它们,我意识到我未能提出一个观点:这不是垃圾邮件问题 - 那些批量电子邮件完全合法,但过了一段时间后就完全没有必要了,而且由于它们重达数 MB,因此需要防止存储问题。

答案1

Doveadm 可以移动或删除邮件,提供此任务所需的几乎所有过滤器。

第一的,尝试使用只读命令(例如)检查过滤器,fetch这样您就不会移动或删除超出预期的邮件:

doveadm fetch -u [email protected] 'hdr.from hdr.subject' FROM spammer.example HEADER message-id '[email protected]'

搜索的语法已记录在 中man doveadm-search-query,但精确的查询仍然取决于您 - 什么是适合您的良好选择?

请注意,仅通过消息 ID 删除会导致不良副作用以丢失邮件的形式,因为垃圾邮件发送者和/或软件错误偶尔会回收本应唯一的 ID。

在选择基本相同邮件的副本或变体时,您可能希望使用日期、中继服务器和标头值的某种组合。如果您只关心大小,按时间和大小进行选择应该可以解决问题。

如何将您的命令限制在单个域内?

如果您的邮件帐户名称类似于[email protected],请传递通配符:

doveadm move -u *@example.org spamfolder FROM spammer.example HEADER unique value

如果您的邮件帐户名称不太可预测,请提供一个固定列表:

psql -c 'COPY (SELECT mailname FROM users WHERE ..) TO stdout (format csv);' > userlist_example.org
doveadm move -F userlist_example.org spamfolder FROM spammer.example HEADER unique value

相关内容