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