我有一个带有 php 和 sendmail 的 Ubuntu 服务器。
当我使用 PHP 通过 sendmail 发送电子邮件时,邮件只是永远位于 sendmail 队列中,永远不会被发送。即使我强制刷新它,它仍然位于队列中。
这可能是什么原因,我该如何解决?
谢谢。
编辑:“cat /var/spool/mqueue/qfn82FuSu3009905”的输出是:
V8
T1251906988
K1251927546
N6
P570369
I8/1/121795
MDeferred: Connection timed out with alt4.gmail-smtp-in.l.google.com.
Fwbs
$_localhost [127.0.0.1]
$rESMTP
$sworld0.com
${daemon_flags}
${if_addr}127.0.0.1
S<[email protected]>
A<>
MDeferred: Connection timed out with alt4.gmail-smtp-in.l.google.com.
rRFC822; [email protected]
RPFD:<[email protected]>
H?P?Return-Path: <g>
H??Received: from world0.com (localhost [127.0.0.1])
by world0.com (8.14.3/8.14.3/Debian-6) with ESMTP id n82FuSu3009905
for <[email protected]>; Wed, 2 Sep 2009 08:56:28 -0700
H?x?Full-Name: www-data
H??Received: (from www-data@localhost)
by world0.com (8.14.3/8.14.3/Submit) id n82FuR5T009904;
Wed, 2 Sep 2009 08:56:27 -0700
H??Date: Wed, 2 Sep 2009 08:56:27 -0700
H??Message-Id: <[email protected]>
H??To: [email protected]
H??Subject: Website feedback form
H??MIME=Version: 1.0
H??Content-type: text/html; charset=iso-8859-1
H??From: [email protected]
.
我看不出哪里出了问题。
编辑2:
好吧,我可以 ping 服务器,但不能通过 telnet 与它交谈,这怎么可能?我没有运行防火墙。
root@world0:~# telnet alt4.gmail-smtp-in.l.google.com 25
Trying 72.14.221.114...
telnet: Unable to connect to remote host: Connection timed out
root@world0:~# ping 72.14.221.114
PING 72.14.221.114 (72.14.221.114) 56(84) bytes of data.
64 bytes from 72.14.221.114: icmp_seq=1 ttl=241 time=167 ms
64 bytes from 72.14.221.114: icmp_seq=2 ttl=241 time=171 ms
64 bytes from 72.14.221.114: icmp_seq=3 ttl=241 time=169 ms
64 bytes from 72.14.221.114: icmp_seq=4 ttl=241 time=222 ms
^C
--- 72.14.221.114 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3015ms
rtt min/avg/max/mdev = 167.840/182.722/222.589/23.055 ms
要了解有关消息处置的更多信息,请尝试以下操作:
你会看到很多这样的行:
其中n82FR6a3019167是消息 ID
尝试查看这些文件(它们只是文本文件),特别是名为qn82FR6a3019167的文件(或任何您的消息 ID 号。 注意:消息 ID 之前的“ q ”。您应该能够确定消息的状态,这将有望帮助确定哪些工作不正常。
如果这没有帮助,您可能需要查看 sendmail.cf 中的智能中继设置。您的 PHP 服务器可能需要通过Smart Relay 主机中继邮件。
接下来,我将尝试从您的 PHP 服务器到 Google 邮件服务器的手动 SMTP 会话。
这有望告诉您您的 IP 地址是否被阻止,或者是否存在某些 SPF(发件人策略框架)问题,或者您的 DNS 名称是否不匹配可能导致您的电子邮件被拒绝或延迟。
我认为您在回复中截断了详细信息列表。您的系统确实应该有一个有效的主机名,并带有该主机名的反向 DNS 条目。
此外,检查您的 /etc/hosts 文件以确保您的 IP 地址在此处正确列出。在将电子邮件中继到 Internet 时,主机名不匹配是很常见的问题(至少,根据我的经验)。
就像是:
我找到了解决方案。
默认情况下,我的 ISP 开始阻止端口 25 以阻止垃圾邮件发送者。快速呼叫他们打开了端口备份,所有邮件开始流动。
谢谢乔的帮助。
看看那些说的行
Deferred: Connection timed out with alt4.gmail-smtp-in.l.google.com
。他们告诉您,您的服务器能够解析 gmail.com 的 MX 记录,但无法连接到远程服务器。当您从邮件服务器远程登录到该主机上的端口 25 时会发生什么?你应该会看到类似这样的内容(注意我输入了“quit”):您是否有任何防火墙规则可以阻止端口 25 上的出站连接?
首先检查队列中的消息和错误日志(/var/log/mail.err)然后为了强制删除,你可以这样做(即使它是在它真的卡住的情况下)