我需要配置 sendmail,以便接受传递到通配符地址的邮件,然后将其传递给用户、别名或直接传递给脚本。
我可以用多种方式重写信封/标题,但我不知道如何接受在 RCPT TO 中提供的通配符地址:到目前为止,我尝试过的所有方法都以 550 个用户未知错误结束。
这是一个具体的例子:
我希望能够处理由一系列数字、后跟一个点和一个单词组成的任何地址,然后将其传送到脚本。如果标题被重写,那没问题,但我需要信封包含实际的收件地址。
这是我需要的 SMTP 会话类型:
220 blah.foo.com ESMTP server ready; Thu, 22 Apr 2010 20:41:08 -0700 (PDT)
HELO blort.foo.com
250 blah.foo.com Hello blort.foo.com [10.1.2.3], pleased to meet you
MAIL FROM: <[email protected]>
250 2.1.0 <[email protected]>... Sender ok
RCPT TO: <[email protected]>
250 2.1.5 <[email protected]>... Recipient ok
我尝试使用正则表达式映射来做一些事情,但是我从未超过 550 个未知用户。
答案1
您应该在 /etc/mail/virtusertable 中添加一行,如下所示:
@yourdomain.com account_catch_all
然后 makemap 虚拟用户表,所有发往该特定域的邮件都将转发给指定用户。然后您可以实现 procmail 以根据需要进行过滤,或者编写自己的脚本来解析文件...
答案2
我使用 virtusertable 做过类似的事情。不确定这是否正是您所需要的,但例如,如果您想接受整个域的流量并将其重定向到另一个域的单个地址,您可以在 virtusertable 文件中放入类似以下内容:
@somedomain.com [电子邮件保护]
接受某个域中任何地址的流量并将其重定向到其他域中的相同地址:
@somedomain.com %1%[电子邮件保护]
要完成您提到的其余模式匹配,您需要使用正则表达式映射或(我的偏好)事后使用类似 procmail 的东西来处理它。
虚拟域在 O'Reilly 的“sendmail”一书(“蝙蝠书”)的第 4.8.51 节中进行了描述。
我希望这是有帮助的。