在 virtusertable 中将 at-sign 字符传递给 procmail

在 virtusertable 中将 at-sign 字符传递给 procmail

常见问题解答提示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:标头并删除反斜杠。

相关内容