我希望能够从一个域的所有邮箱中删除特定的电子邮件,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