PHP mail () не работает

Я хочу, чтобы сценарий простая форма регистрации с активации почты и так далее. Но по какой-то причине почта () не отправляет электронные письма, или мои 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).

Solutions Collecting From Web of "PHP mail () не работает"

См. Эту статью Джеффа Этвуда .

Вкратце: только потому, что ваш код передал электронное письмо агенту передачи почты, это не значит, что он будет доставлен. Да, 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/

Надеюсь, это сработает и для вас.