在maildir上运行筛

对于我的邮件服务器,我有一个dovecot,postfix和sieve安装程序。

我在我的maildir中有几百封邮件,最近又创build了一些筛选规则。 不幸的是筛选规则在devise上只适用于传入的消息。 所以我的问题是:

如何在已存在的maildir中针对邮件运行筛选?

谢谢

—编辑:

感谢larsks

有了你提供的链接我最终使用:

mkdir todo mkdir done mv cur/* todo for i in todo/*; do echo "Delivering message $i ..." /usr/lib/dovecot/deliver -d [email protected] < $i && mv $i done/ done 

这就像我的魅力。 我可以重新运行这个脚本为我创build的每个新的filter。

我也搜查了很多 – 很less有文件。

同时有一个命令

 sieve-filter 

为此,在这个博客上findhttps://mebsd.com/configure-freebsd-servers/dovecot-pigeonhole-sieve-filter-refilter-delivered-email.html一个howto

有没有一个简单的方法来做到这一点,但根据这个消息,你可以编写一个shell脚本,使用Dovecot的deliver程序重新传递消息…所以这样的事情:

 produce_message_list | while read msg; do /usr/libexec/dovecot/deliver -d user < $msg && rm -f $msg done 

您必须将produce_message_listreplace为产生要处理的消息列表的东西; 可能会find会做你所需要的。

新版本的鸽舍和稻田现在有一个筛选命令。 因此,您可以编写一个脚本来扫描所有邮箱中的“INBOX.Refilter”文件夹,然后针对该文件夹运行sieve-filter。

此脚本假定您已将邮件文件夹构build为/ var / vmail / domain / user。

 #!/bin/bash FIND=/usr/bin/find GREP=/bin/grep RM=/bin/rm SED=/bin/sed SORT=/bin/sort # BASE should point at /var/vmail/ and should have trailing slash BASE="/var/vmail/" RESORTFOLDER="INBOX.Refilter" SEARCHFILE="dovecot-uidlist" echo "" echo "Search for messages to resort under ${BASE}" echo "Started at: " `date` echo "Looking for mailboxes with ${RESORTFOLDER}" echo "" # since RHEL5/CentOS5 don't have "sort -R" option to randomize, use the following example # echo -e "2\n1\n3\n5\n4" | perl -MList::Util -e 'print List::Util::shuffle <>' DIRS=`$FIND ${BASE} -maxdepth 3 -name ${SEARCHFILE} | \ $SED -n "s:^${BASE}::p" | $SED "s:/${SEARCHFILE}$:/:" | \ perl -MList::Util -e 'print List::Util::shuffle <>'` # keep track of directories processed so far DCNT=0 for DIR in ${DIRS} do UD="${BASE}${DIR}.${RESORTFOLDER}" D=`echo "$DIR" | tr '/' ' ' | awk '{print $1}'` U=`echo "$DIR" | tr '/' ' ' | awk '{print $2}'` if [ -d "$UD/cur" ] then echo "`date` - $DIR" echo " domain: $D" echo " user: $U" FILES=`find $UD/cur/ $UD/new/ -type f -name '*' | wc -l` echo " files: $FILES" if [[ $FILES -ge 1 ]]; then echo "Run $FILES messages back through the sieve filter." # -c2 means run at best-effort, -n7 is least priority possible ionice -c2 -n7 sieve-filter -e -W -C -u "${U}@${D}" "${BASE}${DIR}.dovecot.sieve" "${RESORTFOLDER}" fi echo "" fi # the following is debug code, to stop the script after N directories #DCNT=$(($DCNT+1)) #echo "DCNT: $DCNT" #if [[ $DCNT -ge 5 ]]; then exit 0; fi done echo "" echo "Finished at:" `date` echo ""