使用 cron 任务清理邮件文件夹

使用 cron 任务清理邮件文件夹

垃圾邮件刺客具有“学习”垃圾邮件的功能。每个用户的邮件文件夹中都有一个 .spam 文件夹,系统将指示他们将所有垃圾邮件移至该文件夹中。 (用户正在使用 IMAP。)我已经设置了一个 cron 作业,将每个帐户的 .spam 文件夹的内容输入到萨学习

02 02 * * * sa-learn -p ~/.spamassassin/user_prefs --spam ~/mail/*/*/.spam/{cur,new} 

根据 cron 确认电子邮件,这按预期工作。

我现在希望在成功完成 sa-learn 命令后自动删除 .spam 文件夹的内容。我是否正确地认为我可以将以下内容添加到上述 cron 任务的末尾?

&& rm ~/mail/*/*/.spam/{cur,new}

这看起来正确吗?

注意:正在测试是否可以在多个 cPanel 经销商托管帐户上使用。我没有 shell 访问权限。


更新1在 Celada 的回答和评论如下:

您需要执行此操作的方法是将每条消息自动移动到您控制且 IMAP 服务器不接触的不同目录,然后从该位置处理并删除它。幸运的是,您正在使用 Maildir,它允许这种原子移动。

怎么样

mkdir -p /tmp/sa_tmp 
  && mv ~/mail/*/*/.spam/{cur,new} /tmp/sa_tmp
  && sa-learn -p ~/.spamassassin/user_prefs --spam /tmp/sa_tmp
  && rm -rf /tmp/sa_tmp

我故意不使用,mktemp这样如果目录被遗忘,它将在下次运行时被删除。


更新2xhienne 发表评论后:

不确定移动目录 cur 和 new 是个好主意 => 移动它们的内容。此外,由于您将许多名为 new 和 cur 的目录移动到同一目的地,因此会出现名称冲突。

我不确定如何避免文件名冲突。

最后,移动到 /tmp 可能意味着移动到另一个分区,这会产生额外的 I/O 并可能缺少磁盘空间(/tmp 有时是一个小的独立分区)=> 最好移动到像 ~/ 这样的特殊文件夹mail/.sa-了解最后可以删除

mkdir -p ~/mail/.sa-learn 
  && mv ~/mail/*/*/.spam/{cur,new}/* ~/mail/.sa-learn
  && sa-learn -p ~/.spamassassin/user_prefs --spam ~/mail/.sa-learn
  && rm -rf ~/mail/.sa-learn

更新3

new我认为如果该文件夹不存在,这将不起作用。我收到错误:

mv: cannot stat `/home/username/mail/*/*/.spam/new/*': No such file or directory

似乎没有任何“忽略”开关mv。有任何想法吗?

答案1

您提出的解决方案很有趣。因为您无法保证在运行期间或sa-learn运行期间不会添加新邮件(或者删除或更改),因此可能会发生许多令人兴奋和不幸的事情,其中​​最明显的是您可能会删除邮件而不喂它们。sa-learnrmsa-learn

您需要执行此操作的方法是将每条消息自动移动到您控制且 IMAP 服务器不接触的不同目录,然后从该位置处理并删除它。幸运的是,您正在使用 Maildir,它允许这种原子移动。

相关内容