常见问题解答提示http://www.sendmail.org/faq/section3#3.29似乎依赖于 virtusertable 中的以下条目:
@domain.com user+%1
将导致 .procmailrc 配置中出现 $1,例如:
ENV_TO=$1
如果收到的电子邮件是[电子邮件保护]和“abc”[电子邮件保护](查看 procmail 日志似乎可以证实这一点。)
但是,我希望 $1 的值是“[电子邮件保护]“这样我就可以处理同一用户下的多个域名。
以下 virtusertable/.procmailrc 配置似乎可以达到此目的:
虚拟用户表:
@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 中出现双反斜杠。删除 virtusertable 中的引号反斜杠失败,例如:
@domain1.com userA+%[email protected]
@domain2.com userA+%[email protected]
似乎会导致“过度递归错误”。
我的问题是:
如何正确引用 virtusertable 中的 at 符号,以便到达 .procmailrc 的 $1 仅包含“[电子邮件保护]“而不是“abc\@domain1.com”?
或者,如果这不可能,我们如何在 .procmailrc 处理本身中删除反斜杠,以便 ENV_TO (最终)被分配“[电子邮件保护]“而不是“abc\@domain1.com”?
答案1
您让 virtusertable 看起来像这样:@domain.com user+%1-domain.com
然后您编写一个脚本,该脚本读取X-Envelope-To:
准备好的标头,formail
并将其替换为正确的值。换句话说,您需要自己的版本formail
才能实现此目的。即使在当前设置下,您也可以这样做,您将让脚本解析X-Envelope-To:
标头并删除反斜杠。