对超过 x 天的邮件应用筛选过滤器

对超过 x 天的邮件应用筛选过滤器

我可以自动清理邮箱中的文件夹吗?假设我想自动删除超过 3 个月的邮件。dovecot/sieve 有这个选项吗?

答案1

对超过 x 天的邮件应用筛选过滤器

为了实现此目标,您可以使用命令doveadm movesieve-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

相关内容