目前我的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