我一直在使用 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) 为特定的非本地电子邮件域指定不同的中继。