Sendmail

僅對非系統使用者使用 sendmail

  • December 19, 2013

我需要在沒有任何系統使用者的情況下使用 sendmail。

我的配置中仍然存在的唯一問題是,FEATURE(virtusertable)在我的 virtusertable 中需要 RHS 上的最終系統使用者,如下所示:

@domain.tld           user@domain.tld
user@domain.tld       systemuser

問題是,沒有這樣的系統使用者,我希望所有到@domain.tld 的郵件都發送到我的 lda(procmail,然後是 dovecot-lda),它能夠以使用者身份處理完整的電子郵件地址。

我已經嘗試過類似的東西

define(`_VIRTUSER_STOP_ONE_LEVEL_RECURSION_', `true')dnl
define(`_NEED_MACRO_MAP_',`1')dnl

但這也無濟於事。

我們已經有了一個使用 procmail 腳本的醜陋解決方法,它正在讀取 virtusertable,但我們希望讓 sendmail 處理這個問題,以便退回任何在 lda 中沒有 RHS 和/或使用者的已發送電子郵件。此外,在 sendmail 中使用 dovecot-lda 是直接的 lda 在我們的設置中也沒有選項。:(

歡迎任何幫助!

我最終通過兩種方式解決了這個問題:

a) 修補libsm/mbdb.csendmail/recipient.c額外查找 dovecot 使用者表。為了使這項工作正常進行,需要對 LOCAL_RULE_0 進行微調。

b) Andrzej 在 stackoverflow 上向我指出了一個類似的問題,即使用 mailertable 和訪問文件的解決方案。按照這個想法,我找到了一個更簡單的解決方案來擁有我們需要的一切:

虛擬使用者表:

@domain.tld              user_domain_tld
info@domain.tld          user_another_tld

別名:

user_domain_tld: "|/bin/procmail -a user@domain.tld"
user_another_tld: "|/bin/procmail -a user@another.tld"

解決方案 a) 很好,因為它改變了 virtusertable 中接受的語法,並且必須隨著時間的推移只檢查一個文件,其中解決方案 b) 獲勝是因為實現它的簡單方法,此外它更兼容sendmail 的未來版本。完成所有工作後,我使用解決方案 a),但我將在聖誕節後將其更改為解決方案 b) ;)

查看Sendmail 常見問題解答 3.29 -“當虛擬域中的多個使用者訪問單個郵箱時,如何添加指定實際收件人的標頭?”

恕我直言,它可能很容易適應提供您想要的東西 - 它提供了所有需要的鉤子。

順便說一句,您可以使用“@domain.tld”virtusertable 條目來選擇error郵件程序。它將允許您拒絕發送給未在 virtusertable 中列出的虛擬使用者的消息。

@domain.tld           error:nouser No such user here
adam@domain.tld       systemuser+%1
eve@domain.tld        systemuser+%1

您也可以諮詢https://www.sendmail.com/sm/open_source/tips/virtual_hosting/

引用自:https://serverfault.com/questions/562178