thi*_*ter 7 linux smtp sendmail mail-transport-agent
我一直在使用 sendmail 使用内部可用的邮件服务器发送邮件。但目前出于安全原因,端口 25 被阻止。
我想知道是否有办法在 sendmail 实用程序中指定端口号。我正在尝试使用安全的 SMTP-MSA 端口 587 作为替代方案,假设我可以打开该端口。
我在 sendmail 的手册页中找不到任何内容。是否有任何替代实用程序可以做到这一点?
除非另外明确配置,否则邮件将通过端口 25 传输。
您可以使用其他端口,甚至 SMTP 以外的其他协议来路由邮件,但这通常只能在您自己的网络中使用。来自预期收件人的邮件服务器很可能只接受通过端口 25 上的 SMTP 传入的电子邮件。
例如,当我将 sendmail 配置为侦听端口 587 时,它通常只会在用户通过身份验证后接受通过该端口传入的电子邮件。
DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')
Run Code Online (Sandbox Code Playgroud)
大多数限制传入和/或传出 SMTP 流量的网络(消费者 ISP 和企业网络的良好和常见做法,以防止开放邮件中继、垃圾邮件和其他滥用行为)提供中继服务器,允许您发送邮件,但并非不受限制。中继服务器可能会检查内容(病毒、垃圾邮件)或执行策略(添加标准免责声明、存档消息以确保合规性、限制收件人)等。
如果您有中继服务器;在称为智能主机并配置的 sendmail 中
# sendmail.mc
define(`SMART_HOST',`relay.example.com`)dnl
Run Code Online (Sandbox Code Playgroud)
如果您的中继服务器正在侦听端口 587,该端口变为:
# sendmail.mc
define(`SMART_HOST',`relay.example.com`)dnl
define(`RELAY_MAILER',`esmtp')dnl
define(`RELAY_MAILER_ARGS', `TCP $h 587')dnl
Run Code Online (Sandbox Code Playgroud)
假设是 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
Run Code Online (Sandbox Code Playgroud)
传输通道esmtp587现在将传送到端口 587 而不是默认的 25 或类似于 2525 或您指定的任何替代端口。
然后在您的邮件表中:
example.com esmtp587:example.com
example2.com esmtp2525:example2.com
Run Code Online (Sandbox Code Playgroud)
上面的行将允许 sendmail 查找 example.com 的 MX 记录,如果 example.com 只有一个(中继)smtp 服务器支持非默认端口,则语法将变为:
example.com esmtp587:[smtp.example.com]
Run Code Online (Sandbox Code Playgroud)
括号告诉 sendmail 忽略 smtp.example.com 可能的 MX 记录并将@example.com 的所有邮件路由到 smtp.example.com:587。