以虚拟的方式将at-sign字符传递给procmail

http://www.sendmail.org/faq/section3#3.29的常见问题解答提示似乎依赖于以下事实:virtusertable:

@domain.com user+%1 

将在.procmailrcconfiguration中导致$ 1,例如:

 ENV_TO=$1 

如果收到的电子邮件地址为[email protected],则为“xyz”,[email protected]为“abc”。 (查看procmail日志似乎证实了这一点。)

但是,我希望$ 1的值为“[email protected]”。 这是我可以在同一个用户下处理多个域名的。

以下virtusertable / .procmailrcconfiguration似乎适用于此目的:

的virtusertable:

 @domain1.com userA+%1\@domain1.com @domain2.com userA+%1\@domain2.com 

.procmailrc文件:

 ENV_TO=$1 :0f * ENV_TO ?? . | formail -i "X-Envelope-To: $ENV_TO" :0fE | formail -i "X-Envelope-To: UNKNOWN" :0: * ^X-Envelope-To: xyz\\@domain1.com $HOME/userA/domain1.com/mail/xyz :0: * ^X-Envelope-To: abc\\@domain2.com $HOME/userA/domain2.com/mail/abc 

但是,我想避免在X-Envelope-To中出现双反斜杠。 删除虚拟引用中引用的反斜杠似乎失败了,例如:

 @domain1.com userA+%[email protected] @domain2.com userA+%[email protected] 

似乎会导致“过度的recursion错误”。

我的问题是:

如何正确引用virtusertable中的at-sign,这样在$ procmailrc中的$ 1将只包含“[email protected]”而不是“abc \ @ domain1.com”?

或者,如果这是不可能的,我们如何去除.procmailrc中的反斜杠,使ENV_TO(最终)被赋值为“[email protected]”而不是“abc \ @ domain1.com”?

你把你的virtusertable读为: @domain.com user+%1-domain.com然后你创build一个脚本来读取从formail准备的X-Envelope-To:头文件,用正确的值replace它。 换句话说,你需要自己的版本的formail只是为了这个目的。 即使使用当前的设置,您也可以在该脚本中parsingX-Envelope-To:标题并删除反斜杠。