如何让 sendmail 尊重虚拟用户的 +-notation?

如何让 sendmail 尊重虚拟用户的 +-notation?

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

[email protected]   [email protected]
[email protected]   [email protected]
@example.com        mylocalaccount

这一切都有效...然而,其中一些用户希望使用 + 符号为不同的供应商提供不同的地址,例如user1+小贩@example.com. 而这部分不起作用——所有此类电子邮件最终都被送到了收件箱,mylocalaccount而不是被正确转发。

我如何才能[email protected]将其转发到与相同的目的地[email protected]

我尝试添加类似条目

user1+*@example.com    foo+%[email protected]

但这并没有解决问题......

以下是调试跟踪:

没有详细信息:

% sendmail -d60.5 -bv [email protected]
map_lookup(dequote, me, %0=me) => NOT FOUND (0)
map_lookup(dequote, g, %0=g) => NOT FOUND (0)
map_lookup(virtuser, [email protected], %[email protected], %1=g) => [email protected] (0)

... 工作。

详细信息:

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

... 不起作用——来到了万能的本地帐户“我”。

答案1

您的 中似乎+缺少了。它使中的行看到一个标记而不是三个标记。OperatorCharssendmail.cfRsedmail.cfuser+detailuser + detail

sendmail.cf生成自sendmail.mc 应该.:%@!^/[]+默认将 OperatorChars 设置为蝙蝠书. 可以通过定义在 mc 文件中进行更改confOPERATORS

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

答案2

如果你想让 virtusertable 重定向保留+细节然后尝试:

# use %2 if you want to strip EMPTY +detail ([email protected])
[email protected]   foo%[email protected]

调试过程
以 root 身份执行。 它应该跟踪包括 virtusertable 映射查找在内的映射查找。 尝试在 virtusertable 查找之前删除 +detail。sendmail -d60.5 -bv [email protected]

sendmail -d21.12 -d60.5 -bv [email protected]

[email protected]默认情况下应该使 sendmail 查找以下 virtusertable 条目:

  1. [电子邮件保护]
  2. [电子邮件保护]
  3. 用户+*@example.com
  4. [电子邮件保护]
  5. [电子邮件保护]
  6. +*@example.com
  7. @example.com

[电子邮件保护](加上存在但详细信息为空)进行查找 1+3+4+6+7
[电子邮件保护](没有 +detail)condutcs 查找 4+7

相关内容