僅與非系統使用者一起使用 sendmail

僅與非系統使用者一起使用 sendmail

我需要在沒有任何系統使用者的情況下使用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.cdovecot 使用者表進行額外查找。為了使其正常運作,需要對 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) ;)

相關內容