Подтвердить что ты не робот

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).

4b9b3361

Ответ 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.