У меня возникают проблемы с тем, чтобы функция PHP mail () работала на моем портативном компьютере с локальным хостом. Я использую Ubuntu 9.04 и подключаюсь к домашней беспроводной сети для выхода в Интернет. Я выполнил следующую команду в терминале:
sudo apt-get install postfix
Все выглядело нормально. Ошибок не увидел. Когда я запустил
mail('john@mydomain.com', 'Subject', 'Message', 'From: localhost <no-reply@mydomain.com>')
в PHP функция вернула true. Но даже несмотря на то, что это вернулось правдой, я так и не получил электронные письма на свой аккаунт Hotmail.
Я пропустил шаг?
Я заглянул в свой mail.log, и там написано, что мое соединение истекло:
Nov 7 00:36:30 john-laptop postfix/pickup[28698]: BB7E14F00AD: uid=33 from=<www-data>
Nov 7 00:36:30 john-laptop postfix/cleanup[29131]: BB7E14F00AD: message-id=<20091107053630.BB7E14F00AD@john-laptop>
Nov 7 00:36:30 john-laptop postfix/qmgr[4088]: BB7E14F00AD: from=<www-data@john-laptop>, size=316, nrcpt=1 (queue active)
Nov 7 00:37:03 john-laptop postfix/smtp[29133]: connect to mx01.1and1.com[74.208.5.4]:25: Connection timed out
Nov 7 00:37:33 john-laptop postfix/smtp[29133]: connect to mx00.1and1.com[74.208.5.3]:25: Connection timed out
Nov 7 00:37:33 john-laptop postfix/smtp[29133]: BB7E14F00AD: to=<john@mydomain.com>, relay=none, delay=63, delays=0.02/0.01/63/0, dsn=4.4.1, status=deferred (connect to mx00.1and1.com[74.208.5.3]:25: Connection timed out)
хм ...
Хорошо, люди здесь предполагают, я думаю, что я бы предпочел пройти путь устранения неполадок и диагностики, прежде чем на самом деле дать вам ответ. Их ответы очень верны, но, тем не менее, мы даже не знаем, ретранслируется ли ваша почта вашим местным MTA.
Хорошо, во-первых, вы установили Postfix ... он работает?
$ sudo /etc/init.d/postfix status
$ telnet localhost 25
telnetting к localhost на порту 25 должен дать вам баннер, указывающий, что Postfix установлен, например:
220 gromit.brassy.net ESMTP Postfix (Ubuntu)
Итак, вы подтвердили, что Postfix запущен и работает. Затем выполните поиск в вашем mail.log:
$ sudo grep john@hotmail.com /var/log/mail.log
(Похоже, вы работаете в Ubuntu / Debian, ваш почтовый журнал обычно находится в /var/log/mail.log, в других системах это может быть / var / log / maillog. Во-вторых, если вы используете Ubuntu, много время, когда ваша учетная запись пользователя будет иметь доступ для чтения mail.log напрямую без sudo'ing, поскольку вы находитесь в соответствующей группе)
Вы должны увидеть такие строки:
Nov 8 08:37:24 hostname postfix/smtp[7164]: E97DE56A31: to=<john@hotmail.com>, relay=mx.hotmail.com[1.2.3.4]:25, delay=4.2, delays=0.21/0.11/3.8/0.1, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 1D7BF761F3)
Итак, в этой строке много информации, но вам нужен идентификатор очереди postfix, чтобы увидеть все, что произошло.
Начало этой строки содержит время и дату, а также постфикс и PID процесса, который зарегистрировал строку. Следующая часть - это идентификатор очереди: E97DE56A31
Теперь эта строка обычно сообщает вам, было ли отправлено ваше письмо, но в любом случае рекомендуется выполнить эту процедуру:
$ sudo grep E97DE56A31 /var/log/mail.log
Это должно дать вам полную стенограмму вашего письма.
Если в приведенном выше сценарии вы не смогли найти ничего интересного в файле mail.log, похоже, ваша почта не была отправлена в Postfix. На этом этапе вам нужно начать проверять настройки почты php.ini.
Хотя вы можете установить SMTP-сервер на свою рабочую станцию, весьма вероятно, что ваше сообщение будет заблокировано в разных местах.
Многие интернет-провайдеры блокируют исходящий SMTP от домашних учетных записей для борьбы со спамом.
Многие поставщики услуг электронной почты хранят списки IP-адресов, связанных с домашним широкополосным доступом, и блокируют входящую почту или немедленно перемещают ее в папку нежелательной почты / спама.
Похоже, сообщения принимаются postfix, поэтому вы, вероятно, можете посмотреть журналы postfix и увидеть сообщения об ошибках, если сообщение не может быть доставлено. Эти сообщения об ошибках помогут вам выяснить, где вас блокируют.
Но, как я уже упоминал выше, вы, вероятно, не сможете исправить то, что вас блокирует. Вам, вероятно, следует найти почтового провайдера с SMTP-сервером, к которому вы можете подключиться и использовать для отправки своих сообщений.
См. Эти связанные вопросы:
Причин может быть сколько угодно, как указано на других плакатах. Первым делом я бы запустил приложение командной строки mailq, чтобы проверить, не ждут ли ваши тестовые сообщения доставки. Я бы также посмотрел в /var/log/mail.log, чтобы узнать, что случилось с электронными письмами (как и сказал Зоредак).
Вполне возможно, что Hotmail (или где-то еще) просто сбросил вашу электронную почту. Возможно, он не прошел несколько основных тестов на защиту от спама (например, имя хоста может быть не полностью определено, вероятно, не будет соответствовать PTR).
Ура, jmi
Если вы хотите использовать свой локальный хост в качестве почтового сервера (поскольку вы хотите тестировать сценарии и т. Д.), Вам необходимо указать почтовому серверу, чтобы он использовал почтовый сервер вашего провайдера в качестве «умного хоста». Теперь "smarthost" - это термин sendmail (я не использую postfix), но я уверен, что есть эквивалент postfix.
Что это в основном означает для каждого отправляемого вами электронного письма (любыми способами), а ваш локальный хост - это почтовый ретранслятор, который будет использовать почтовый сервер вашего интернет-провайдера для выполнения работы, путем постфикса, подключающегося к почтовому серверу вашего интернет-провайдера, а не напрямую, например, Hotmail.
Блокирует порт 25 провайдера (в вашем соединении), который является почтовым портом, для борьбы со спамом, поэтому вы не можете отправлять напрямую, но можете отправлять косвенно, используя почтовый сервер вашего провайдера.
HTH.