我可以自动清理邮箱中的文件夹吗?假设我想自动删除超过 3 个月的邮件。dovecot/sieve 有这个选项吗?
答案1
对超过 x 天的邮件应用筛选过滤器
为了实现此目标,您可以使用命令doveadm move
和sieve-filter
。您也可以使用,doveadm expunge
但使用此方法,您可以删除或移动超过 X 天的邮件。
首先将所有超过 7 天的文件移动到临时文件夹,在本例中该文件夹名为 sieve-tmp:
doveadm move -u [email protected] INBOX.sieve-tmp user [email protected] mailbox INBOX BEFORE $(date -d "$now -7 days" +%Y-%m-%d)
该命令采用以下参数:
-u [email protected]
源用户邮箱
INBOX.sieve-tmp
将邮件复制到的文件夹 (INBOX/tmp)
user [email protected]
目标用户的邮箱,在我的情况下与源邮箱相同
mailbox
必需关键字
INBOX
源文件夹,在本例中为 INBOX
BEFORE $(date -d "$now -7 days" +%Y-%m-%d)
搜索过滤器。此过滤器返回在 YYYY-MM-DD 日期之前创建的邮件。date 命令提供从现在起 7 天后的日期。您可以将 7 替换为任何所需的数字。
创建了一个筛选脚本,用于处理超过 7 天的邮件。我使用 roundcube 创建了它,并在界面中将其停用,这样它就不会应用于收到的邮件。我把它称为7d
。
sieve-filter -e -W -C -u [email protected] /var/mail/example.com/test1/sieve/7d.sieve INBOX.sieve-tmp
-e
启用执行模式
-W
启用写入模式
-C
强制编译。脚本被编译为二进制文件。
-u [email protected]
为该用户运行脚本。
/var/mail/example.com/test1/sieve/7d.sieve
要执行的筛选脚本的路径。
INBOX.sieve-tmp
执行脚本的文件夹。
此后,所有需要的邮件都会被处理,其余的邮件可以移回收件箱:
doveadm move -u [email protected] INBOX user [email protected] mailbox INBOX.sieve-tmp ALL
最终脚本
#!/bin/bash
doveadm move -u [email protected] INBOX.sieve-tmp user [email protected] mailbox INBOX BEFORE $(date -d "$now -7 days" +%Y-%m-%d)
sieve-filter -e -W -C -u [email protected] /var/mail/example.com/test1/sieve/7d.sieve INBOX.sieve-tmp
doveadm move -u [email protected] INBOX user [email protected] mailbox INBOX.sieve-tmp ALL
如果您想要另一个脚本处理超过 X 天的邮件,只需复制此块并替换时间参考。
该脚本可以通过 cron 作业每天调用一次:
crontab -e
0 0 * * * /opt/filter-my-mails.sh