如何使sendmail尊重+虚拟用户的说明?

我对不同的域有不同的转发需求,这些都指向我的邮件服务器:

user1@example.com foo@example.org user2@example.com bar@example.net @example.com mylocalaccount 

这一切都有效…但是,其中一些用户希望使用+ -notation来为不同的供应商提供不同的地址,例如user1 + vendor @example.com 。 而这个部分不起作用 – 所有这样的电子邮件最终被传送到了所有的mylocalaccount而不是被正确地转发。

如何将user+foo@example.com转发到user@example.com目的地?

我尝试添加类似的条目

 user1+*@example.com foo+%2@example.org 

但是这并没有解决问题…

这里是debugging跟踪:

没有细节:

 % sendmail -d60.5 -bv g@example.com map_lookup(dequote, me, %0=me) => NOT FOUND (0) map_lookup(dequote, g, %0=g) => NOT FOUND (0) map_lookup(virtuser, g@example.com, %0=g@example.com, %1=g) => gexample@example.net (0) 

…工作。

细节:

 % sendmail -d60.5 -bv g+meow@example.com map_lookup(dequote, me, %0=me) => NOT FOUND (0) map_lookup(dequote, g+meow, %0=g+meow) => NOT FOUND (0) map_lookup(virtuser, g+meow@example.com, %0=g+meow@example.com, %1=g+meow) => NOT FOUND (0) map_lookup(virtuser, @example.com, %0=@example.com, %1=g+meow) => me (0) map_lookup(dequote, me, %0=me) => NOT FOUND (0) map_lookup(user, me, %0=me) => me<> (0) g+meow@example.com... deliverable: mailer local, user me 

…不起作用 – 来到全面的本地帐户“我”。

sendmail.cf中的OperatorChars中似乎没有+ 。 它使sedmail.cf R行看到一个令牌user+detail而不是三个令牌user + detail

sendmail.cf生成的sendmail.mc 应该默认根据蝙蝠本书将OperatorChars设置为.:%@!^/[]+ 。 通过定义confOPERATORS可以在mc文件中改变它。

检查grep OperatorChars /etc/mail/sendmail.cf报告的内容

如果你想virtusertableredirect与+保留的细节,然后尝试:

 # use %2 if you want to strip EMPTY +detail (user+@example.net) user1@example.com foo%3@example.org 

debugging程序
以root sendmail -d60.5 -bv user1+x@example.net执行sendmail -d60.5 -bv user1+x@example.net
它应该跟踪地图查找,包括虚拟地图查找。
尝试sendmail -d21.12 -d60.5 -bv user1+x@example.net如果在精确查找之前删除了+ detail。

user1+detail@example.com默认情况下应该让sendmail寻找下面的virtusertable enries:

  1. user+detail@example.com
  2. user++@example.com
  3. user+*@example.com
  4. user@example.com
  5. ++@example.com
  6. +*@example.com
  7. @ example.com

user+@example.com(加上存在但是详细为空)进行查找1 + 3 + 4 + 6 + 7
user@example.com(不提供+详细信息)condutcs lookup 4 + 7