Smtp

exim:遠端 smtp 中繼 smarthost 的不同密碼

  • March 14, 2017

目前我將我的 exim 配置設置為使用外部 SMTP 伺服器發送所有電子郵件。所有使用者使用本地密碼向我的 exim 伺服器進行身份驗證,然後發送的消息通過智能主機中繼到遠端 SMTP 伺服器,與連接到我的 exim 伺服器(執行 cPanel)的使用者直接使用的登錄相比,該伺服器使用不同的登錄名. 這是目前的配置:

remote_route:
 driver = manualroute
 domains = !+local_domains
 transport = remote_transport
 route_list = * remotesmtpserver.com

remote_transport:
 driver = smtp
 port = 587
 hosts_require_auth = <; $host_address
 hosts_require_tls = <; $host_address

remote_login:
 driver = plaintext
 public_name = LOGIN
 hide client_send = : remote_username : remote_password

這一切都運作良好且符合預期。

問題是我想為一組選定的使用者/發件人使用不同的 remote_username 和 remote_password。登錄名(對於我的 exim 伺服器)是完整的電子郵件地址,因此我已將這些電子郵件地址添加到文件 /etc/differentlogin(即,由新行分隔的電子郵件地址列表)。

然後我在 remote_login 部分嘗試了以下設置:

remote_login:
 driver = plaintext
 public_name = LOGIN
 hide client_send = ${lookup{$authenticated_id}lsearch{/etc/differentlogin}{: different_username : different_passsword}{: remote_username : remote_password}

但是,這在嘗試發送電子郵件時給了我以下 EXIM 錯誤:

 == to@address.com R=remote_route T=remote_transport defer (-48): expansion of "${lookup{$authenticated_id}lsearch{/etc/differentlogin}{" failed in mandrill_login authenticator: missing } at end of string

我嘗試使用 $ sender_address instead of $ authenticated_id,但這給了我相同的結果。

我還嘗試用字元串替換要搜尋的變數,即:

remote_login:
 driver = plaintext
 public_name = LOGIN
 hide client_send = ${lookup{email@domain.com}lsearch{/etc/differentlogin}{: different_username : different_passsword}{: remote_username : remote_password}

但我仍然得到同樣的錯誤。

為了檢查我的條件語法,我嘗試將以下內容添加到我的 remote_transport:

headers_add = X-SenderTest: ${lookup{$authenticated_id}lsearch{/etc/differentlogin}{different}{normal}}

這可以按預期工作,並在從 /etc/differentlogin 列表中記錄的地址/登錄名發送電子郵件時添加以下標題

X-SenderTest: different

有小費嗎?

非常感謝

此問題的原因是 client_send 值是冒號分隔列表中的多個值。因此,通過將值格式化如下來解決問題的解決方案:

${lookup{$authenticated_id}lsearch{/etc/differentlogin}{remote_username}{different_username}} : ${lookup{$authenticated_id}lsearch{/etc/differentlogin}{remote_password}{different_passsword}}

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