如何讓 sendmail 尊重虛擬使用者的 +-notation?
我對不同的域有不同的轉發需求,它們都指向我的郵件伺服器:
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
但這並沒有解決問題…
這是調試跟踪:
沒有細節:
% 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
… 不工作 - 來到包羅萬象的本地帳戶“我”。
您的.
+
_ 它使行中看到一個令牌而不是三個令牌。OperatorChars``sendmail.cf``R``sedmail.cf``user+detail``user
+
detail
sendmail.cf
生成自sendmail.mc
應將OperatorChars 設置為.:%@!^/[]+
預設情況下符合 bat book。它可以通過定義在 mc 文件中進行更改confOPERATORS
。檢查報告的內容
grep OperatorChars /etc/mail/sendmail.cf
如果您想 virtusertable 重定向並保留 +detail ,請嘗試:
# use %2 if you want to strip EMPTY +detail (user+@example.net) user1@example.com foo%3@example.org
調試程序
以 root 身份執行
sendmail -d60.5 -bv user1+x@example.net
。它應該跟踪映射查找,包括 virtusertable 映射查找。
嘗試
sendmail -d21.12 -d60.5 -bv user1+x@example.net
在 virtusertable 查找之前是否刪除了 +detail。
user1+detail@example.com
預設情況下**,應該**讓 sendmail 查找以下 virtusertable enries:
- user+detail@example.com
- user++@example.com
- user+*@example.com
- user@example.com
- ++@example.com
- +*@example.com
- @example.com
user+@example.com(加上存在但詳細資訊為空)進行查找 1+3+4+6+7
user@example.com(不存在+詳細資訊)進行查找 4+7