我需要在沒有任何系統使用者的情況下使用sendmail。
我的配置中仍然存在的唯一問題是FEATURE(virtusertable)
需要在我的 virtusertable 中的 RHS 上有一個最終系統用戶,如下所示:
@domain.tld [email protected]
[email protected] systemuser
問題是,沒有這樣的系統用戶,我希望所有發送到@domain.tld的郵件都傳遞到我的lda(procmail,然後是dovecot-lda),它能夠作為用戶處理完整的電子郵件地址。
我已經嘗試過類似的事情
define(`_VIRTUSER_STOP_ONE_LEVEL_RECURSION_', `true')dnl
define(`_NEED_MACRO_MAP_',`1')dnl
但這也無濟於事。
我們已經有了一個醜陋的解決方法,使用 procmail 腳本來讀取 virtusertable,但我們希望由 sendmail 處理這個問題,以便任何發送的沒有 RHS 和/或 lda 中的用戶的電子郵件都會被退回。另外,sendmail使用dovecot-lda是直接lda,在我們的設定中也沒有選項。 :(
歡迎任何幫助!
答案1
看一眼Sendmail 常見問題 3.29- “當虛擬網域中的多個使用者轉到單一郵箱時,如何新增指定實際收件者的標頭?”
恕我直言,它可以輕鬆適應提供你想要的東西 - 它提供了所有需要的鉤子。
順便說一句,您可以使用“@domain.tld”virtusertable 條目來選擇error
郵件程式。它將允許您拒絕傳送給未在 virtusertable 中列出的虛擬使用者的訊息。
@domain.tld error:nouser No such user here
[email protected] systemuser+%1
[email protected] systemuser+%1
您也可以諮詢https://www.sendmail.com/sm/open_source/tips/virtual_hosting/
答案2
我最終透過兩種方式解決了這個問題:
a) 修補libsm/mbdb.c
並對sendmail/recipient.c
dovecot 使用者表進行額外查找。為了使其正常運作,需要對 LOCAL_RULE_0 進行細微調整。
b) Andrzej 在 stackoverflow 上的類似問題中向我指出如何使用 mailertable 和存取檔案解決方案。按照這個想法,我找到了一個更簡單的解決方案來滿足我們所需的一切:
虛擬用戶表:
@domain.tld user_domain_tld
[email protected] user_another_tld
別名:
user_domain_tld: "|/bin/procmail -a [email protected]"
user_another_tld: "|/bin/procmail -a [email protected]"
解決方案 a) 很好,因為它改變了 virtusertable 中可接受的語法,並且在一段時間內只需檢查一個文件,其中解決方案 b) 勝出,因為實現它的方法很簡單,此外,它與sendmail 的未來版本。完成所有工作後,我使用解決方案 a),但聖誕節後我會將其更改為解決方案 b) ;)