我现在有一个包含超过 1000 封电子邮件的 Exim 队列,我想运行该队列并删除所有无效电子邮件(不再存在的电子邮件)
答案1
exiqgrep -i -f [luser]@domain | xargs exim -Mrm
答案2
如果邮件在队列中并且被冻结,下面的方法应该可以工作——但是我还没有测试过,如果它变得有意识并吞噬了你的邮件服务器,我也不承担任何责任
for i in `mailq | grep "\*\*\* frozen \*\*\*" | cut -f 3 -d " "` ; do exim -Mrm $i ; done
如果需要命中非冻结消息,请根据需要更改 grep 模式(如果您有信心可以删除,这是最简单的方法一切在队列中,并确保以可以运行 exim -Mrm 和 mailq 的用户身份运行 - 您可能需要在sudo
之前插入...mailq
exim -Mrm
此外,几乎可以肯定,使用 xargs 而不是内置和反引号可以更简洁地完成此操作for
。希望有人能尽快解决这个问题 :-)
答案3
扫描文件中/var/spool/exim4/msglog
是否存在无效地址。
您可以使用类似 (使用无效地址) 的命令将地址标记为已送达
cd /var/spool/exim4/msglog; for msg in $(grep -l address); do exim4 -Mmd $msg address
。
您可以使用命令清除消息cd /var/spool/exim4/msglog; exim4 -M *
。这将尝试传递队列中的所有消息。
您可以使用别名阻止传入到旧地址的邮件,/etc/aliases
例如:
address : :fail: No longer here
请参阅man exim4
和man aliases
以了解更多信息。