我最近设置了一个新的 Debian 服务器,
首次安装并设置 sendmail 后,我无法发送电子邮件。
Reason : Connection timeout.
/var/log/mail.log 的输出:
> May 6 02:42:53 k***** sm-mta[15070]: q465gjxF013677:
> to=<*****@gmail.com>, ctladdr=<*****@*****.ca> (1001/1001),
> delay=01:00:08, xdelay=00:00:00, mailer=esmtp, pri=300329,
> relay=alt4.gmail-smtp-in.l.google.com., dsn=4.0.0, stat=Deferred:
> Connection timed out with alt4.gmail-smtp-in.l.google.com.
netstat 的输出:
tcp 0 0 0.0.0.0:587 0.0.0.0:* LISTEN 15069/sendmail: MTA
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 15069/sendmail: MTA
从另一台计算机(telnet theserver.imworkingon.com 25)运行 Telnet on 25 时也会成功,但如果我尝试从我工作的服务器运行它,则不会成功。这告诉我,不知何故,出站端口 25 似乎被阻止了...
有人有主意吗?
答案1
标准邮件故障排除步骤适用于此处...从日志中,我们看到您能够解析要发送到的 gmail.com 目的地的 MX/DNS 记录。因此这不是 DNS 或路由问题。
由于这是一个基本的 SMTP 传递,请尝试使用 telnet 到端口 25 以确保您能够连接到目标主机...
我会遵循这个顺序:
dig mx gmail.com
# Look for the mail destination IP in the output - "209.85.225.27" in this case
telnet 209.85.225.27 25
# This is an attempt to telnet to port 25 (smtp) on the recipient's server...
您应该会看到类似以下内容的内容:
Trying 209.85.225.27...
Connected to iy-in-f27.1e100.net (209.85.225.27).
Escape character is '^]'.
220 ***************************************
如果您没有看到上述内容,则表示您的出站端口 25 smtp 流量在机器级别(检查 iptables 等)或网络级别(检查网络防火墙或 ISP 策略)被阻止。
如果你做看到类似的消息,那么您就可以传递邮件并且不会收到超时错误。
答案2
与知名服务的连接超时通常意味着以下两种情况之一:
1- 您无法连接到任何 SMTP 服务器的端口 25,因为您的 ISP 阻止了该端口。请咨询您的 ISP,您的机器是否被允许直接发送电子邮件或通过中继发送电子邮件。如果您的 ISP/托管服务提供商提供中继,请在您的中间某处添加以下行/etc/mail/sendmail.mc文件:
define(`SMART_HOST', `[relay.your.isp.provides]')dnl
接下来以 root 身份运行sendmailconfig
并检查是否有效。
2- 您可能需要解决 TCP 窗口缩放问题。这可能是电缆、以太网卡驱动程序、卡本身、电缆、交换机以及介于两者之间的任何路由器,并且作为 heisenbug,它只能出现在您的特定配置中。您可以尝试通过将以下行添加到/etc/sysctl.conf:
net.ipv4.tcp_rmem = 4096 87380 174760
net.ipv4.tcp_wmem = 4096 16384 131072
net.ipv4.tcp_window_scaling = 0
接下来以 root 身份运行sysctl -p
并再次检查这是否解决了问题。
答案3
此外,您还需要检查您的客户端选项是否禁止通过定义的接口发送邮件:
O 客户端端口选项=地址=1.2.3.4,名称=XXX
如果您的收件人位于错误的网络中,则无法接通。