如何設定 sendmail 透過特定伺服器進行中繼

如何設定 sendmail 透過特定伺服器進行中繼

我在電纜調變解調器(bresnan communications)後面設定了一個小型家庭伺服器。我希望能夠讓這個盒子發送電子郵件(而不是接收)通知之類的。

我已經做了什麼:

  • 我已經安裝並設定了sendmail。
  • 我已添加mail.bresnan.net為我的SMART_HOST指令。

我相信問題是

當我嘗試發送電子郵件時,我的郵件日誌中顯示以下內容:

Dec 22 10:24:17 batcave sendmail[1530]: oBMHOHrs001530: from=aburns, 
  size=140, class=0, nrcpts=1, 
  msgid=<[email protected]>, 
  relay=aburns@localhost
Dec 22 10:24:17 batcave sm-mta[1531]: oBMHOHWZ001531: from=<[email protected]>, 
  size=397, class=0, nrcpts=1,
  msgid=<[email protected]>,
  proto=ESMTP, daemon=MTA-v4, relay=localhost [127.0.0.1]
Dec 22 10:24:17 batcave sendmail[1530]: oBMHOHrs001530:
  to=<[email protected]>, ctladdr=aburns (1000/1000),
  delay=00:00:00, xdelay=00:00:00, mailer=relay,
  pri=30140, relay=[127.0.0.1] [127.0.0.1],
  dsn=2.0.0, stat=Sent (oBMHOHWZ001531 Message accepted for delivery)
Dec 22 10:24:18 batcave sm-mta[1517]: oBMH9mVv001357:
  to=<[email protected]>, ctladdr=<[email protected]>
  (1000/1000), delay=00:14:30, xdelay=00:00:42, mailer=relay,
  pri=300339, relay=pmx0.bresnan.net. [69.145.248.1],
  dsn=4.0.0, stat=Deferred: Connection timed out with pmx0.bresnan.net.

您可以看到我的 sendmail 伺服器在何處接受郵件傳送,然後在何處嘗試將其移交給 Bresnan 的伺服器並逾時。

這就是我的問題所在。精明的讀者會注意到,這pmx0.bresnan.net不是我SMART_HOST設定的指令。這是MXbresnan.com/net 網域的(外部?)伺服器。顯然,布雷斯南已經配置了他們的網絡,因此您無法從他們自己的網絡內訪問該伺服器,而必須使用該mail.bresnan.net伺服器(我可以連接到該伺服器)。問題是我不知道如何告訴 sendmail 使用這個伺服器而不是領域

我嘗試過的

  • 設定主機條目,以便 pmx0 伺服器指向郵件 IP 位址。這是行不通的,這是有道理的,因為 sendmail 顯然正在執行 MX 查詢來查找返回 IP 的伺服器,因此不需要執行「正常」DNS 解析,因此主機檔案永遠不會參與其中。

修復(對於所有外發郵件):

再次,props 轉到 webmin(請參閱下面的註釋)來幫助我學習這一點。如果您輸入帶有方括號的智慧型主機,指示 sendmail 不進行 MX 查找,那麼:(define('SMART_HOST','[69.145.248.18]')修復引號 -> 反引號)實際上無需郵件程式表即可運作。

修復(針對特定域):

如下圖所示,mailertable需要設定 a。然而,正如在手冊頁,還需要在您的sendmail.mc文件中啟用此功能。

另請注意,郵件程式路由不會強制 sendmail 使用指定的伺服器進行所有操作,它基於收件者的位址。這實際上對我來說沒問題,因為我只需要發送到幾個網域(gmail、google 託管和我的工作)。

概括:

  • 添加FEATURE('mailertable')到您的sendmail.mc文件。 (請注意,第一個引號應該是反引號。
  • 建立您的/etc/mail/mailertable文件(參見手冊頁
  • 建立一個地圖檔案:sudo makemap hash /etc/mail/mailertable.db < /etc/mail/mailertable
  • 重建你的配置make -C /etc/mail
  • 重新啟動發送郵件:service sendmail restart

筆記:高度建議使用 WebMin 編輯/重建這些文件。如果沒有它,我會瘋狂地試圖找出為什麼我的 mailertable 檔案被忽略。

答案1

您可以透過在 sendmail 檔案中新增一個簡短的條目來繞過 MX 查找/etc/mail/mailertable

文件的內容可能應該只有一行,例如:

bresnan.net       esmtp:[69.145.248.18]

儲存檔案並重新啟動 sendmail(如果必須手動完成,則重建 sendmail.cf)。

相關內容