在 sendmail 中使用端口 587

在 sendmail 中使用端口 587

我一直在使用 sendmail 使用内部可用的邮件服务器发送邮件。但目前出于安全原因,25 端口被封锁。

我想知道是否有一种方法可以在 sendmail 实用程序中指定端口号。我正在尝试使用安全 SMTP-MSA 端口 587 作为替代方案,假设我可以打开该端口。

我在 sendmail 的手册页中找不到任何内容。有没有任何替代实用程序可以做到这一点?

答案1

除非明确配置,否则邮件将通过端口 25 传输。

您可以使用其他端口甚至 SMTP 之外的其他协议来路由邮件,但这通常只能在您自己的网络中工作。来自预期收件人的邮件服务器很可能只接受通过端口 25 上的 SMTP 传入的电子邮件。

例如,当我将 sendmail 配置为侦听端口 587 时,它通常仅在用户经过身份验证后才接受通过该端口传入的电子邮件。

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

大多数限制传入和/或传出 SMTP 流量的网络(对于消费者 ISP 和企业网络来说,这是防止开放邮件中继、垃圾邮件和其他滥用的良好且常见的做法)提供中继服务器,允许您发送邮件,但并非不受限制。中继服务器可以检查内容(病毒、垃圾邮件)或执行策略(添加标准免责声明、存档邮件以确保合规性、限制收件人)等。

如果您配备了中继服务器;在 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 端口,并将其他域的邮件路由到另一个远程 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。

答案2

sendmail.mc 文件条目:

dnl   Modify relay mailer to make it connect to port 587 instead of 25
define(`RELAY_MAILER_ARGS', `TCP $h 587')dnl
dnl   Define relay for non local email
dnl   Use [] to disable looking up for MX records
define(`SMART_HOST', `relay:[name.of.smart.host]')dnl

Sendmail 常见问题解答 3.39:如何使用备用端口发送?

PS 您可以使用 FEATURE(mailertable) 为特定的非本地电子邮件域指定不同的中继。

相关内容