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!";
Ответы
Ответ 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 решило проблему.