Я недавно создал область комментариев на своем веб-сайте и попытался заставить работать уведомление по электронной почте. Кажется, он не хочет отправлять уведомления по электронной почте, когда появляются новые комментарии.
Просто чтобы посмотреть, может ли PHP отправлять электронные письма, я попытался сбросить пароль (потому что вы получите новый пароль по почте), и я получил сообщение:
Электронное письмо не может быть отправлено. Возможная причина: ваш хост может отключить функцию mail ()
Я установил флажки в настройках -> Обсуждение, и адрес электронной почты действителен, поэтому это не проблема с настройками. Я попытался создать файл PHP и отправить с помощью mail()
, и он успешно отправлен. Так что должно быть что-то странное с WordPress.
Любые идеи?
Ответы:
Шаг за шагом: сначала найдите файл, в котором появляется сообщение об ошибке. Я использую Notepad ++ и команду CTRL+ Fдля поиска в файлах. Рекомендуется искать только первые несколько слов сообщения об ошибке, поскольку некоторые сообщения об ошибках объединяются из разных сообщений.
Ваше сообщение об ошибке появляется в
wp-login.php
и святая удача, только там. Итак, давайте посмотрим, почему эта ошибка может возникнуть.Есть два условия.
$message
должно быть истинным (не пустой строкой, не ложным, не нулевым и т. д.). Иwp_mail()
не должен возвращать false.На одну строку выше есть фильтр
$message = apply_filters('retrieve_password_message', $message, $key);
, поэтому возможно, что плагин (или тема) использует этот фильтр и возвращает значение, которое не является истиной (пустая строка, ложь, ноль и т. Д.).Но гораздо проще проверить,
wp_mail()
работает или нет. Напишите небольшой плагин для отправки тестового письма себе:(Это код PHP5.3. Если вы используете PHP5.2, удалите вещи из пространства имен)
Плагин должен отправить тестовое письмо сразу после активации. Если нет, то вызов некоторых внутренних страниц (например, приборной панели) должен сделать это.
Если тестовое письмо не приходит, возможно, у вас проблема с
wp_mail()
. Итак, включите отладку:Вставьте этот код в свой
wp-config.php
и попробуйте отправить себе тестовое сообщение. Теперь вы должны получить некоторые сообщения об ошибках, и они также должны быть зарегистрированыwp-content/debug.log
(журнал отладки может стать очень большим, если есть больше ошибок, вызванных плагинами и / или темами).На этом этапе вы получили хорошую информацию, если
wp_mail()
не удалось, и если да, то почему. Если всеwp_mail()
работает правильно и тестовая почта прибыла, вернитесь наверх и выясните, почему$message
это не так.Если у вас есть проблемы с
wp_mail()
, так что имейте в виду, чтоwp_mail()
не используетmail()
функцию PHP . WordPress использует класс PHP ( PHPMailer ). Может быть, вам просто нужен плагин для использования SMTP вместо sendmail. Или проблема находится в другом месте. Мы не знаем Вы должны расследовать.источник
mail()
. По крайней мере, в некоторых случаях (см. Строку 732 дюймаwp-includes/class-phpmailer.php
. У меня нет доступа к атм ftp, но я постараюсь как можно скорее попробовать ваши предложения. Конечно, это должно меня куда-то привести. Спасибо большое!wp_mail()
и, кажется, работает нормально, я получил почту, как и ожидалось. WP по-прежнему не отправлял электронные письма с комментариями / сбросом пароля, и я ничего не получил в файле журнала (он не был создан), поэтому я попытался установить почтовый плагин SMTP и настроить новую учетную запись электронной почты для Wordpress. Это работает сейчас, но я до сих пор не понимаю, почему он не мог отправить раньше. Спасибо!Это очень раздражающее сообщение об ошибке, так как в нем может быть много вещей, и оно не раскрывает фактическую ошибку (которая часто заглушается в других частях кода).
Эта ошибка появляется, когда
wp_mail()
функция возвращает false, что, в свою очередь, может произойти, еслиphpmailer->Send()
возвращает false или вызывает исключение.Как отображать предупреждения от
mail()
функции PHPПо умолчанию они обычно отключены, но, к сожалению, WordPress никогда их не захватывает. Чтобы показать их, просто удалите
@
знаки из@mail(...
вwp-includes/class-phpmailer.php
вmailPassthru()
функции:Как выследить другие возможные причины:
Добавьте одну строку в нижней части
wp_mail()
в/wp-includes/pluggable.php
:Он предоставит полную информацию о том, где возникло исключение. К сожалению, иногда оно включает в себя это бесполезное сообщение об исключении: « Не удалось создать экземпляр почтовой функции ». Да, спасибо WordPress, это действительно полезно.
Посмотрев на исключение, вы можете найти номер строки ошибки и, надеюсь, отследить ее через код, чтобы найти истинную причину.
Удачи. Надеюсь, WordPress улучшит обработку ошибок электронной почты в будущем.
источник
У меня та же проблема с сервером Ubuntu на Amazon EC2.Я получаю проблему при использовании ссылки сброса пароля, а также не работали другие уведомления по электронной почте.
Итак, вот решения, которые работали для меня. Word-press использовал
wp_mail()
функцию для отправки электронной почты, которой нуженPHPMailer
класс, в котором использовался php-мейлер/usr/sbin/sendmail
.Сначала используйте эту простую функцию php для проверки почты php
Если это не работает, вам нужно установить php mailer. Используйте эту команду для установки php mail на сервер Ubuntu.
Затем проверьте функции электронной почты для печати слов.
источник
Если другие отличные ответы здесь не помогают, попробуйте это:
Я столкнулся с этой же проблемой, и ничего из того, что я мог найти в предложениях для WordPress, не решило ее для меня.
Затем я начал исследовать, была ли сама установка PHP отключила функцию mail, но ничего из этого не сработало. Все выглядело так, как будто настроено правильно.
Все эти проблемы начались для меня после того, как я обновил свой сервер до CentOS 7, который использует SELinux (Security Enhanced Linux) и что я узнал за последние пару недель с SELinux, что если что-то не работает, но все выглядит так это должно работать ... это означает, что SELinux молча и тайно блокирует вас в фоновом режиме.
И альт.
Если вы работаете и ОС, которая использует SELinux, просто выполните следующую команду от имени root:
setsebool -P httpd_can_sendmail=1
Существует параметр безопасности, который по своей сути запрещает отправке электронной почты веб-сервером. Когда вы переключаете этот переключатель и говорите SELinux, что веб-сервер может отправлять электронную почту, все работает внезапно.
источник
Я столкнулся с этим сегодня; в моем случае ситуация произошла потому, что файл hosts на сервере имеет то же доменное имя, что и адрес электронной почты, указывая на localhost. Запись mx указывает на другой сервер, но файл hosts переопределяет DNS, а WP пытается доставить почту локально. Удаление домена из файла hosts и перезапуск sendmail решили эту проблему.
источник
Я не знаю, относится ли это к вам по-прежнему или нет, но поскольку ответа не было, я подумал, что стоит попробовать один раз.
На самом деле, я столкнулся с точно такой же проблемой, поскольку мой хост openshift внезапно уступил сегодня и перестал отправлять письма. Покопавшись в коде и кодексе, я узнал о функции wp_mail () и, наконец, Google привел меня сюда, и я увидел, как ее можно переопределить.
Основываясь на ответе @ Ralf912, я немного изменил сценарий, чтобы код использовал веб-API sendgrid.com для отправки почты вместо WordPress по умолчанию (который я предполагаю:
И это сработало!
источник
У меня была та же ошибка, обе функции (mail и wp_mail) работали, но у меня все еще была эта досадная ошибка. Исправить было очень легко, но мне потребовалось несколько часов, чтобы найти причину. Поэтому я поделюсь здесь своим решением по проблеме, которая может (или не может) совпадать с вашей.
Я попробовал функцию mail (), и она сработала, но когда вы тестируете ее, вы не указываете последний параметр с именем 'parameters' в функции mail (). И WP использует это.
Итак, в основном, этот параметр ("-fexample@exmaple.com") с флагом "-f" заставляет функцию mail () проверять, указан ли адрес электронной почты "example@exmaple.com" в списке "доверенных писем".
Поэтому, если это не так, он возвращает false, что делает wp_mail () возвращает false и приводит к сообщению об ошибке.
Итак, решение - попросить хостера сделать это за вас, или, если вы используете cPanel, просто добавьте учетную запись электронной почты для этого адреса, и он автоматически добавит ее в «список доверенных».
источник
он называется -Manage зарегистрированных адресов электронной почты для отправки писем с помощью скриптов, т. е. (Wordpress)
источник
Я имел эту ошибку целую вечность и пробовал так много решений, которые не работали. У меня есть пользовательская установка Wordpress на AWS EC2. Прежде всего, убедитесь, что ваша почта AWS SES включена через службу поддержки, они должны находиться в одном (или близком) регионе в SES и EC2. Я использовал Google Suite (gsuite) для электронной почты для получения / отправки почты.
Убедитесь, что тестовое электронное письмо отправлено в AWS SES и Gsuite.
Установите плагин Wordpress для WP Mail SMTP, используйте опцию «Другой SMTP», возьмите свои учетные данные SMTP из AWS SES, вот где я застрял.
Вы должны включить флажок «SSL» для шифрования, это меняет порт на 465 для меня. Наконец мой тест электронной почты успешно отправлен с Worpdress.
источник