Exim

Exim4 將經過身份驗證的出站電子郵件複製到特定地址

  • February 24, 2014

我為朋友和客戶執行一個 Exim 4 郵件伺服器。我們剛剛給了我們 8 歲的兒子一個支持電子郵件的設備,他使用該伺服器處理出站和入站電子郵件。所有出站電子郵件均經過身份驗證發送。

我有一個名為的文件/etc/exim4/authenticated.users,其中包含username:password對。我的配置中有這樣的行:

 accept
   authenticated = *

 myserver_cram:
   driver = cram_md5
   public_name = CRAM-MD5
   server_secret = ${lookup{$1}lsearch{/etc/exim4/authenticated.users}{$value}fail}
   server_set_id = $1

我想要的是有一個這樣的文件:

/etc/exim4/outgoing.copies littlejohnny:daddy@parent.somewhere

因此,當有人通過身份驗證以發送外發電子郵件時,會將littlejohnny副本發送到daddy@parent.somewhere.

有誰知道如何實現這一目標?

在您的身份驗證器中,您應該有一行像server_set_id =. 該行右側的任何內容都將儲存在一個變數$authenticated_id中。然後可以在您的路由器中使用該變數來有條件地複制您兒子經過身份驗證的使用者名發送的消息。

在我看來,您使用的是 Debian,或者像 Ubuntu 這樣的 Debian 衍生產品。請注意,Debian 以特定於其發行版的方式打包 Exim 配置文件。因此,接收通用 exim 系統的建議並嘗試將其應用於 Debian 系統可能會令人困惑。也就是說,如果你真的想讓它工作並且你閱讀了關於他們的打包系統如何工作的 debian 文件,你可以讓它工作。

如果不是很明顯,我不是 Debian-Exim 人,所以我的建議是通用的,你必須將它翻譯成 Debian 的打包標準。

首先,您需要找到身份驗證器並確保他們正在使用該server_set_id選項。這是一個範例驗證器:

auth_plain:
 driver = plaintext
 public_name = PLAIN
 server_condition = ${if eq {$3}{AUTH_STR}{yes}{no}}
 server_advertise_condition = ${if eq{$tls_cipher}{}{no}{yes}}
 server_set_id = $auth2

由於不同 auth 類型的變幻莫測,有時$auth1會持有使用者名,有時會是$auth2. 如果您的系統有一段時間沒有更新,您可能還會看到$1and $2,它們是在添加特定於身份驗證的變數之前使用的。

現在您已將經過身份驗證的使用者的使用者名保存到$authenticated_id中,您需要添加一個路由器,僅當$authenticated_id與您兒子的使用者名匹配時才會將郵件副本發送到您的地址。因為路由器的順序很重要,所以您需要在路由器中添加相當高的位置以確保獲得所有內容,但您必須通過自己的配置來判斷確切的放置位置。

這是一個範例路由器,可以滿足您的需求:

copy_jrs_mail:
 driver = redirect
 data = daddy@parent.somewhere
 condition = ${if eq{$authenticated_id}{littlejohnny}{yes}{no}}
 unseen

要執行相同的操作但從文件中查找資訊,您實際上可以刪除條件(因為$authenticated_id在文件中將起到相同的作用)並更改data =部分以使用文件:

copy_auth_mail:
 driver = redirect
 data = ${if exists{/etc/exim4/outgoing.copies}{\
        ${lookup{${lc:$authenticated_id}}lsearch{/etc/exim4/outgoing.copies}}}}
 unseen

希望這能讓你朝著正確的方向前進,祝你好運。

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