Функция PHP mail () возвращает true, но не отправляет почту

Я знаю, что этот вопрос был задан раньше.

когда я вызываю функцию PHP mail (), она возвращает true.

Я проверил свой php.ini (i'V running CentOS):

SMTP = localhost
smtp_port = 25
sendmail_path = /usr/sbin/sendmail -t -i
mail.add_x_header = On

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

есть идеи?

4 ответов


для отправки электронной почты вам нужен SMTP-сервер (локальный или удаленный). На самом деле ваша почтовая функция просто передает почту на ваш SMTP-сервер и это тот, который действительно отправляет вашу электронную почту.

в вашем php.ini появляется в этой строке

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

вы должны знать, если вы используете этот параметр конфигурации (с руководство):

если set, smtp, smtp_port и sendmail_from игнорируются и указанная команда выполненный.

но самое главное, здесь вы просто удалить sendmail таким образом, вы можете ожидать, что ваша почта никуда не денется. Я знаю sendmail давал вам некоторые проблемы, возможно, проблемы с конфигурацией, но теперь ваш php.неверная конфигурация ini.

как ее решить?

  • начать удаление sendmail_path


у меня была аналогичная проблема с этим; оба mail() и wp_mail() функции возврат TRUE, но никакого письма не было отправлено на мой xyz@yahoo.com учетная запись электронной почты.

получается, что Yahoo блокирует эти письма как спам. У меня не было captcha, реализованной в моей форме, и поэтому многие спам-письма отправлялись в yahoo, поэтому они заблокировали электронные письма. Письма были отправлены успешно, но Yahoo отмечала их как спам.

убедитесь, что в вашем случае это не проблема.


пожалуйста, проверьте DNS, Я получаю ту же проблему при тестировании на localhost, но работаю на реальном хосте. Проблема в поддельном DNS, ваша электронная почта была заблокирована google. Если вы тестируете с другим почтовым сервисом (например: Yahoo mail), вы получите спам-почту. Я нашел его после проверки почтового журнала


У меня были проблемы с настройкой smtp, поэтому я использовал gmail. Вы можете отправить почту с PEAR MAIL, как указано здесь:

$from = "NoReply <noreply@random.com>";
$to = "someone <someone@somemail.com>";
$subject = "my subject";
$body = "my body";
$host = "ssl://smtp.gmail.com";
$port = "465";
$username = "gmailaccount@gmail.com";
$password = "gmailpass";

$headers = array ('From' => $from,
'To' => $to,
'Subject' => $subject);
$smtp = Mail::factory('smtp',
array ('host' => $host,
'port' => $port,
'auth' => true,
'username' => $username,
'password' => $password));
$mail = $smtp->send($to, $headers, $body);

Если вы используете gmail, ваш $from будет заменен на адрес электронной почты, используемый для его отправки.