У меня есть сервер Ubuntu с php и sendmail.
Когда я использую 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<www-data@world0.com>
A<>
MDeferred: Connection timed out with alt4.gmail-smtp-in.l.google.com.
rRFC822; user@gmail.com
RPFD:<user@gmail.com>
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 <user@gmail.com>; 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: <200909021556.n82FuR5T009904@world0.com>
H??To: user@gmail.com
H??Subject: Website feedback form
H??MIME=Version: 1.0
H??Content-type: text/html; charset=iso-8859-1
H??From: dude@domain.com
.
Я не вижу, где что-то не так.
РЕДАКТИРОВАТЬ 2:
Ну, я могу пинговать сервер, но не разговаривать с ним по 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
Я нашел решение.
Мой интернет-провайдер начал блокировать порт 25 по умолчанию, чтобы остановить спамеров. Быстрый звонок им открыл порт, и вся почта начала течь.
Спасибо, Джо, за помощь.
Чтобы узнать больше о расположении сообщения, попробуйте следующее:
mailq
Вы увидите много таких строк:
n812uLGQ001861 12089700 Mon Aug 31 19:56 <******@*****.org>
(Deferred: Connection timed out with c.mx.mail.yahoo.com.)
<******@yahoo.com>
n82FR6a3019167 22388400 Wed Sep 2 08:27 <******@*****.net>
(reply: read error from g.mx.mail.yahoo.com.)
<******@yahoo.com>
где n82FR6a3019167 это идентификатор сообщения
ls -al /var/spool/mqueue/*<message ID>
Попробуйте посмотреть эти файлы (это просто текстовые файлы), особенно тот, который называется qn82FR6a3019167 (или любой другой номер вашего сообщения. Обратите внимание 'q'перед идентификатором сообщения. Вы сможете определить статус сообщения, что, надеюсь, поможет определить, что работает неправильно.
cat /var/spool/mqueue/qn82FR6a3019167
Если это не поможет, вам может потребоваться посмотреть настройки интеллектуального реле в sendmail.cf. Вашему серверу PHP может потребоваться ретрансляция почты через Хост Smart Relay.
Далее я бы попробовал ручной сеанс SMTP с вашего PHP-сервера на почтовый сервер Google.
telnet alt4.gmail-smtp-in.l.google.com 25
Trying 209.85.129.114...
Connected to alt4.gmail-smtp-in.l.google.com.
Escape character is '^]'.
220 mx.google.com ESMTP p9si790839fkb.7
helo <yourhostname>
250 mx.google.com at your service
mail from:<youremail@youraddress.com>
250 2.1.0 OK p9si740839fkb.7
rcpt to:<whoever@gmail.com>
250 2.1.5 OK p9si740839fkb.7
data
354 Go ahead h2si759562fkh.29
Subject: This is a test
Testing!
.
250 2.0.0 OK 1251933071 h2si759562fkh.29
quit
221 2.0.0 closing connection h2si759562fkh.29
Connection closed by foreign host.
Мы надеемся, что это сообщит вам, блокируется ли ваш IP-адрес, существует ли какая-то проблема SPF (Sender Policy Framework), или если у вас есть несоответствия DNS-имен, которые могут вызывать отклонение или задержку вашей электронной почты.
Я предполагаю, что вы усекли перечень деталей в своем ответе. Ваша система действительно должна иметь действительное имя хоста с обратными записями DNS для этого имени хоста.
Также проверьте файл / etc / hosts, чтобы убедиться, что ваш IP-адрес указан правильно. Несоответствие имен хостов довольно часто бывает проблемой при ретрансляции электронной почты в Интернет (по крайней мере, по моему опыту).
Что-то вроде:
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
xxx.xxx.xxx.xxx yourhostname.yourdomain.com yourhostname
Посмотрите на строки, в которых говорится Deferred: Connection timed out with alt4.gmail-smtp-in.l.google.com
. Они сообщают вам, что ваш сервер смог разрешить запись MX для gmail.com, но не смог подключиться к удаленному серверу. Что произойдет, когда вы подключитесь к порту 25 на этом хосте с почтового сервера? Вы должны увидеть что-то вроде этого (обратите внимание, что я набрал «выйти»):
crunch:/Users/gerald$ telnet alt4.gmail-smtp-in.l.google.com 25
Trying 72.14.221.114...
Connected to alt4.gmail-smtp-in.l.google.com.
Escape character is '^]'.
220 mx.google.com ESMTP d4si791296fga.25
quit
221 2.0.0 closing connection d4si791296fga.25
Connection closed by foreign host.
Есть ли у вас какие-либо правила брандмауэра, которые блокируют исходящие соединения на порту 25?
Сначала проверьте сообщение в очереди и журнал ошибок (/var/log/mail.err). Затем, чтобы принудительно удалить, вы можете сделать это (даже если оно действительно застряло)
rm -rf /var/spool/mqueue/*