Функция 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 6

4 ответа:

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

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

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

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

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

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

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

  • Начните удаление параметраsendmail_path из php.ини.

  • Установите простой в настройке SMTP сервер типа postfix.

  • Проверить постфикса слушать порт 22:

Netstat-lnt

  • Попробуйте отправить письмо с помощью функции php mail ()

  • Убедитесь, что ваша почта была отправлена правильно (проверьте ваш / var / log / mail.log или /var/log/mail/mail.log files)

  • Вы также можете проверить, что Почта не находится в очереди postfix:

Postqueue-f

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

Оказалось, что Yahoo блокировала эти письма как спам. У меня не было капчи, реализованной в моей форме, и поэтому многие спам-письма были отправлены в 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 будет заменен на адрес электронной почты, используемый для его отправки.