procmail配方过滤电子邮件到多个文件夹

目前我的procmail食谱如下:

FROM_=`formail -c -x"From "| awk '{ print $1 }'` SUBJ_=`formail -c -x"Subject:" | sed -e 's/^[ ]*//g' -e 's/[ ]*$//g'` :0 *^Subject:.*(60) { :0 fwh | formail | (echo "$FROM_"; echo "$SUBJ_";) :0 fwb | formail -I "" :0 myemail/ } 

我的procmail配方只会筛选出主题中编号为“60”的电子邮件。 之后,formail将执行取出发件人的电子邮件地址及其主题,然后将其内容转发到“myemail”目录。

有人可以帮助我构build一个procmail配方,以过滤收到的邮件到不同的目录,如果有多个“60”的科目逗号分隔?

(例如,主题为6010,6011,6012的电子邮件,6010将进入6010文件夹,6011将进入6011等等。)

主题中的数字是电话号码,可以有大量的不同的,所以列举所有可能的比赛是不是一个真正的select。

如果您的邮箱是目录,则可以在单个传递操作中列出所有邮件。 那么这一切就变得如此简单

 :0 * ^Subject:.*60 `formail -zxSubject: | egrep -o 60[0-9]+ | sed 's%$%/%'` 

在反引号中的脚本将输出像60123456789/ (换行) 609876543210/ (换行符) – 多less有电话号码; 每一个被视为文件夹名称,并将邮件传递到所有这些文件夹。

(我确定egrep | sed可以被重构为一个单独的sed脚本,在每个文件夹名后面添加一个斜杠是Procmail将交付操作视为目录交付的必要条件,不能同时交付多个mbox文件夹。)

我原来的答案如下所示。


你在Procmail中所要求的相当棘手。 没有设施可以循环播放一组比赛。 一个有点绝望的解决方法是将匹配收集到一个variables,然后INCLUDERC=到一个不同的配方文件,这将从variables的开始处理一个值,然后SWITCHRC=自己再次,而在variables中剩下的值。 它不一定非常复杂,但是这确实是一件非常棘手的事情,至于你要问Procmail是否真的是这个工作的正确工具。

当然,也有powershell的select, 创build一系列食谱来处理每个可能的60xx模式。

 :0c * ^Subject:.*6000 myinbox/6000/ 

6001,6002等。这假设你有这些数量有限,或者如果你需要处理每个从00到99的情况下,也许用一个简单的脚本生成食谱。

 perl -e 'printf ("%02i\n", $_) for 0..99' | while read i; do cat <<____HERE :0c * ^Subject:.*60$i myinbox/$i/ ____HERE done >60xx.rc