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