尝试基于正则expression式匹配来引导电子邮件。
我知道我可以做到这一点:
echo | mail -s test1 me-route2
用这个食谱:
* ^To:.*me-route2\@ :0: /home/me/folder-route2/afile
我想要做的是这样的:
* ^To:.*me-(route\d)\@ :0: /home/me/folder-$MATCH/afile
但我得到:
procmail: Lock failure on "/home/me/folder-/afile.lock"
你有序号和顺序错误的条件。 但是另外,Procmail不能识别Perlism \d 。 (请参阅这里有一些正则expression式的历史和奥秘。)试试这个:
:0: * ^To:.*me-\/route[0-9] /home/me/folder-$MATCH/afile
或者,如果您确实想validation匹配的expression式是否紧跟@符号,
:0: * ^To:.*me-\/route[0-9]@ * MATCH ?? ^\/route[0-9] /home/me/folder-$MATCH/afile
从inputTo: [email protected] ,第一个条件捕获route2@ ,第二个条件通过route2匹配,以便从MATCH删除尾部@ 。
我的怀疑是没有锁文件是必要的,所以第二个冒号应该被删除,但这取决于什么afile 。 如果它是一个普通的Berkely mbox文件,你应该使用locking。 如果这是一个Maildir文件夹,你不应该。
您可能还想考虑用^TO_mereplace^To:.*me – 它会匹配Cc:和其他相关的头文件以及To:头文件,并避免匹配reallynotme 。
Procmail不像正常的正则expression式那样使用捕获组,至less对于MATCH来说。 从手册页:
当被告知从匹配的正则expression式中提取文本时,这个variables被procmail分配给它。 它将包含与通过`/'标记的正则expression式匹配的所有文本。
所以下面应该工作(未经testing):
* ^To:.*me-\/route\d
然后, MATCH将包含与\/之后的正则expression式匹配的所有内容,如“route \ d”。
不幸的是,这可能会做一些像[email protected]这样的地址, MATCH是“route2”。 但这可能是你可以接受的。