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