PHP mail() не работает
Я хочу script простую регистрационную форму с почтой активации и так далее. Но по какой-то причине почта() не отправляет электронные письма, или мои 3 разных учетных записи электронной почты (hotmail, gmail, yahoo) не получают их и поэтому даже не помещают их в папку со спамом.
код:
<?php
$mailto = '[email protected]';
$subject = 'the subject';
$message = 'the message';
$from = '[email protected]';
$header = 'From:'.$from;
if(mail($mailto,$subject,$message,$header)) {
echo 'Email on the way';
}
?>
Каждый раз, когда он выдает "Email на пути", поэтому mail() возвращает true, правильно? Я действительно не понимаю, я даже пытался отключить мой маленький снитч (хотя я не блокировал SMTP).
Ответы
Ответ 1
См. в этой статье Джеффа Этвуда.
Вкратце: только потому, что ваш код передал электронное письмо агенту передачи почты, это не значит, что он будет доставлен. Да, mail()
возврат истины означает "принятый для доставки" - что означает "Похоже на электронную почту, я постараюсь выполнить это", а не "Он доставлен". Даже руководство для mail()
говорит:
Важно отметить, что только потому, что почта была принята для доставки, это НЕ означает, что почта действительно достигнет назначенного адресата.
Soooo: проверьте свой MTA (это электронное письмо, отправленное с вашего локального компьютера?), попробуйте отправить на локальный адрес (если адрес локальный, он доставлен?), попробуйте отправить электронное письмо от вашего почтового клиента, используя те же настройки, что и ваш PHP script, попробуйте отправить на более мелкий почтовый хост, который позволяет отключить антиспам (поставляется ли он вне вашей сети?). Также прочитайте эту статью и проверьте указанные там пункты.
Ответ 2
Возможно, ваш сервер не настроен на обработку mail()
.
<?php
print phpinfo();
?>
и посмотрите sendmail_path
Ответ 3
Вам может потребоваться добавить правильные символы конца строки в заголовки. Это может быть \n
или \r\n
Ответ 4
Проверьте свои phpinfo и/или php.ini для своих настроек почты и убедитесь, что вы можете отправлять почту с помощью любой программы php. Функция будет успешной, если команда будет выполнена, но не знает, действительно ли почта вышла.
Ответ 5
Проверьте почтовый журнал почтового сервера. В Unix-ish системах это обычно /var/log/maillog. В Windows, кто знает, но где-то должен быть журнал. Если почта возвращает TRUE, то любой почтовый сервер, к которому он подключается, принял почту для возможной доставки. После этого mail()
больше не задействован, и для SMTP-серверов он фактически выполняет доставку.
В реальных условиях mail()
вы прогуливаете письмо по блоку и отбрасываете его в почтовый ящик. Все после этого полностью выходит за рамки и контроль PHP.
Ответ 6
Если это сервер linux, он, вероятно, настроен для отправки в локальную почтовую очередь. Когда у меня возникла эта проблема, я получил ее работу, добавив запись MX
на DNS-сервере, используемом серверами Linux, которые указали на наш почтовый сервер ISP.
Ответ 7
У меня была та же проблема на Ubuntu, и я решил ее после следующего учебника:
http://www.nixtutor.com/linux/send-mail-with-gmail-and-ssmtp/
Я надеюсь, что это сработает и для вас.