Linux

將埠 587 與 sendmail 一起使用

  • July 23, 2015

我一直在使用 sendmail 使用內部可用的郵件伺服器發送郵件。但目前出於安全原因,埠 25 已被阻止。

我想知道是否有辦法在 sendmail 實用程序中指定埠號。我正在嘗試使用安全的 SMTP-MSA 埠 587 作為替代方案,假設我可以打開該埠。

我無法在 sendmail 的手冊頁中找到任何內容。是否有任何替代實用程序可以做到這一點?

除非另有明確配置,否則郵件將通過埠 25 傳輸。

您可以使用其他埠,甚至是除 SMTP 之外的其他協議來路由郵件,但這通常只能在您自己的網路中使用。來自您的預期收件人的郵件伺服器很可能只接受通過埠 25 上的 SMTP 傳入的電子郵件。

例如,當我將 sendmail 配置為偵聽埠 587 時,它通常只會在使用者經過身份驗證後才接受通過該埠傳入的電子郵件。

DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')

大多數限制傳入和/或傳出 SMTP 流量的網路(對於消費者 ISP 和公司網路來說,防止開放的郵件中繼、垃圾郵件和其他濫用行為的良好和常見做法)都提供中繼伺服器,允許您發送郵件,但並非不受限制。中繼伺服器可以檢查內容(病毒、垃圾郵件)或執行策略(添加標準免責聲明、歸檔消息以確保合規性、限制收件人)等。

如果為您提供中繼伺服器;在稱為 smarthost 並配置在 sendmail 中

# sendmail.mc
define(`SMART_HOST',`relay.example.com`)dnl

如果您的中繼伺服器正在偵聽埠 587,則變為:

# sendmail.mc
define(`SMART_HOST',`relay.example.com`)dnl
define(`RELAY_MAILER',`esmtp')dnl
define(`RELAY_MAILER_ARGS', `TCP $h 587')dnl

假設 sendmail 將您的所有電子郵件流量轉發到中繼,中繼將消息傳輸到預期的收件人和不需要身份驗證的中繼伺服器。

您可以使用 mailertable 微調您的電子郵件路由。


要將某些電子郵件域路由到一個遠端 TCP 埠並將其他域的郵件路由到另一個域,需要在 sendmail.cf 中進行一些編輯以設置新的郵件程序。從現有的 esmtp 郵件程序中複製設置並添加埠號:

 # sendmail.cf
 # <snip>
 Mesmtp587,         P=[IPC], F=mDFMuXa, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r\n, L=990,
                 T=DNS/RFC822/SMTP,
                 A=TCP $h 587
 Mesmtp2525,         P=[IPC], F=mDFMuXa, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r\n, L=990,
                 T=DNS/RFC822/SMTP,
                 A=TCP $h 2525

傳輸通道esmtp587現在將傳送到埠 587 而不是預設的 25 或類似於 2525 或您指定的任何替代埠。

然後在您的郵件表中:

example.com    esmtp587:example.com
example2.com   esmtp2525:example2.com

上面的行將允許 sendmail 查找 example.com 的 MX 記錄,如果 example.com 只有一個(中繼)smtp 伺服器支持非預設埠,則語法將變為:

example.com   esmtp587:[smtp.example.com]

括號告訴 sendmail 忽略 smtp.example.com 的可能 MX 記錄,並將 @example.com 的所有郵件路由到 smtp.example.com:587。

引用自:https://unix.stackexchange.com/questions/132711