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

Mail() не работает, но возвращает true

Я пытаюсь использовать функцию php mail() на моем сервере. По правде говоря, он возвращает true, но я ничего не получаю в своем почтовом ящике.

Однако отправитель электронной почты cpanel работает нормально.

Неужели это не настройка, поскольку экспедитор отправляет мне письма?

Я попробовал добавить:

ini_set("sendmail_from", "[email protected]");

Но это не сработало.

Здесь мой код:

$subject = "My Subject";
$body = "Email Body ";
$headers = 'From: [email protected]' . "\r\n" . 
    'Reply-To: [email protected]' . "\r\n" . 
    'X-Mailer: PHP/' . phpversion(); 

if (mail($email,$subject,$body,$headers))
    echo "Sent!";
else
    echo "Fail!";
4b9b3361

Ответ 1

Существует множество причин, которые могут вызвать эту проблему. Вот несколько:

  • Почта была получена, но помечена как спам.
  • Неправильный адрес получателя.
  • На отправляющем почтовом сервере существует очередь медленной почты.
  • На получающем почтовом сервере существует медленная очередь почты.

mail() возвращает значение true, если сервер исходящей почты принимает сообщение для доставки. Вам нужно будет устранить другие возможности, чтобы найти точку отказа.

Ответ 2

Функция mail() очень редко возвращает ничего, кроме true. Он заботится только о том, что он успешно отправил электронное письмо в MTA (агент передачи почты - то есть программа, которая действительно отправляет его).

MTA немедленно отклонит письмо, если оно плохо сформировано. В этом случае вы получите ошибку в PHP. Но он также может отклонить письмо или не отправить его после того, как он принял его с PHP, по целому ряду причин, не о котором PHP будет иметь представление, потому что он уже получил ответ true.

В вашем MTA будет журнал ошибок, который вы можете проверить для получения дополнительной информации, если ошибка происходит локально.

Ответ 3

У меня была эта проблема с script, который я использовал, который отправлял и получал в том же домене. Вы пытались отправить электронное письмо на адрес электронной почты, находящийся в другом домене? Это может помочь ограничить возможные проблемы.

Ответ 4

Мы столкнулись с одной и той же проблемой. Решение было в php.ini установить соответствующий путь sendmail_.

sendmail_path = "/usr/sbin/sendmail -t -i"

Настройка выше решена.

Ответ 5

Проверьте почтовый ящик после отправки тестового сообщения:

sudo tail -f /var/log/mail.log

Затем вы можете увидеть идентификатор, присвоенный последнему электронному письму, которое вы пытались отправить. Например. Я вижу:

Jan 11 23:03:14 vagrant-ubuntu-trusty-64 postfix/pickup[17228]: 69F3441529: uid=33 from=<www-data>

69F3441529 - уникальный идентификатор, назначенный этому письму. Затем вы можете grep log для всех строк, имеющих этот идентификатор...

sudo grep 69F3441529 /var/log/mail.log

Затем вы можете обнаружить любое сообщение об ошибке, которое может присутствовать, а затем Google:)

Ответ 6

В моем случае изменение настроек сервера с адресов IPv6 на адреса IPv4 решило проблему.