WordPress не отправляет почту — Решено
Заметил что перестали приходить письма от WordPress блога.
Решил разобраться в чем же дело.
И то что я увидел меня немного расстроило.
Ранее я всегда считал что WordPress разрабатывает команда профессионалов, периодически выходят разные обновления, после установки которых рассказывается как же много багов найдено и пофиксено.
Однако судя по проблеме с отправкой почты из Вордпресса этот баг старый и корректно устранить разработчики WordPress не хотят, возможно просто не обращают на него внимания (и так сойдет, так как проблему частично решают плагины).
Суть проблемы проста — если у вас в настройках установлено отправлять на почту новые комментарии (например на модерацию), то WordPress пытается отправить письмо от почты wordpress@вашдомен — это действие получается не на всех хостингах. В моем случае apache писал в лог ошибку, вот ее часть
PHP Fatal error: Uncaught exception ‘phpmailerException’ with message ‘Invalid address: wordpress@nemcd.com’ in /site/www/wp-includes/class-phpmailer.php:946\nStack trace:\n#0 /site/www/wp-includes/pluggable.php(352): PHPMailer->setFrom(‘wordpress@nemcd. ‘, ‘WordPress’)\n#1
Т.е. что-то сообщало что почта wordpress@вашдомен неправильная, ее как бы нет, поэтому ошибка и в таком духе. Естественно в админке этой ошибки нигде видно не было и если не искать, то и не заметишь что что-то не так.
Я нашел три решения проблемы с не отправкой почты из WordPress, одно из них мне помогло.
Решения
1. Самое простое — нужно создать на хостинге почту вида wordpress@вашдомен, некоторым такое помогает, это решение в несколько кликов, но у него есть небольшие недостатки. Расскажу подробнее.
Сейчас почтовые гиганты (например Google с GMail, MailRU, Яндекс) применяют различные способы борьбы со спамом, например SPF и DKIM. И с этими технологиями вам нужно разобраться и правильно настроить, чтобы письма от вашего блога быстро и четко доставлялись, не попадали в спам да и вообще чтобы не пропадали в никуда.
Чтобы избежать этого всего головняка, проще и возможно правильнее завести отдельный почтовый ящик для блога и отправлять письма используя его.
Плавно подходим к другим вариантам — отправка писем через сторонний SMTP сервер (на примере smtp.gmail.com)
—
Добавлено: 13.11.2016
Жаль сразу не дописал статью, сейчас многие детали уже подзабыл, но главную идею помню как сделал. Постараюсь дописать, возможно кому-то поможет
—
2. Правка исходного кода сайта.
Люди добавляют в PHPMailer (wp-includes/class-[phpmailer|smtp|pop].php) поддержку SSL/TLS соединений и прописывают туда данный почты, например, GMail
Я пробовал, у меня не получилось, да и этот метод не очень, ведь при обновлении версии WordPress файл может перезаписаться и придется делать изменения снова.
3. Установка и настройка специального плагина для отправки почты.
Таких плагинов много, я попробовал штуки 4, но корректно заработал только один!
Я уже было потерял веру, надоело пробовать, настраивать плагины, читать описания и получать одно и тоже, однако я не сдался и нашел работающий способ
Точно не помню названия плагинов с которыми не получилось, но это были топовые плагины из рейтинга и из обзоров. Кстати там были комментарии от других пользователей, что не получается отправка, возможно плагины не работали с новой версией Вордпресса.
Я даже создавал в почте GMail API с доступом, но тоже все было напрасно, оказалось можно сделать проще.
SMTP: Failed to connect socket: Unable to find the socket transport “ssl”
Решаем проблему — при отправке почты WordPress выдает ошибку и письма не доходят.
Мне помог плагин XPertMailer.
Самое интересное, что плагин старинный, версия 0.1beta от 2007 года, но он реально работает! В отличии от многих навороченных плагинов, которые я пробовал.
Вы можете подумать, что я не смог правильно настроить другие плагины, очень вряд ли, так как там нужны были базовые настройки почты — smtp сервер, порт, логин, пароль к почте, ничего хитрого эти параметры у меня есть и вводил я их правильно и не один раз.
С плагином XPertMailer у меня отправка почты получилась с первого раза.
Пришлось немного повозиться с исправлением кодировки, однако все быстро решилось.
Устанавливаем XPertMailer обычным способом — Плагины — Добавить новый — Поиск плагинов — XPertMailer.
Настраиваем и активируем почтовый плагин.
Мой пример для почты Gmail
Можно попробовать отправить себе тестовое письмо.
Немного позже вы столкнетесь, с тем, что письма приходят с неправильной кодировкой русских букв, т.е. в письме кракозябра.
Я начал читать хелпы и мануалы, чтобы найти как исправить кракозябру.
Я заменил одну строку в XPM4\PHP5\MIME5.php и русский тест в теле письма стал приходить правильно.
const MCHARSET = ‘utf-8’;
Исправляем xpertmailer-advanced-php-mail-engine bad codepage
После этих не сложных действий блог обрел былую способность рассылать письма с комментариями. Ура!
Источник
Что делать, если не приходит почта с сайта на WordPress?
Я уже писал о рабочем методе в посте под названием «Сайт на WordPress’е не отправляет почту. Что делать?». Однако, этот метод рекомендую использовать в крайнем случае, а сначала проверьте вот что.
Что лежит в папке Спам?
Если вы используете почтовый клиент, и в папке Спам нужных писем не нашлось, попробуйте зайти на почтовик (поставщик услуг электронной почты) через веб-интерфейс. Под веб-интерфейсом почтовика я имею в виду сайты mail.yandex.ru, mail.ru, gmail.com и т.п. В последнее время многие подключили почту для доменов именно к этим почтовикам, так что проверяйте папку Спам там, где хранится ваша почта. Если она хранится на вашем сервере, проверьте есть ли веб-интерфейс там.
Работает-ли функция mail()?
Итак, в папке Спам нужных писем нет. Тогда тест посложнее, проверим работает ли функция mail(). Для этого, заходим на сайт по FTP и закидываем в корень сайта этот файл (перед закачкой на сервер не забудьте его распаковать!).
Теперь:
- Пройдите по ссылка типа http://ваш-сайт/mail.php
- Введите в поле «E-Mail» почту, на которую должно придти письмо,
- Нажмите кнопку «Отправить»,
- Увидев надпись «Тестовое письмо отправлено», проверяем почту
Если письмо с темой «Тестирование функции mail()», пришло, значит нужно искать проблему в чем-нибудь другом. Например, на сайте вирус, какой-нибудь плагин конфликтует с почтовой формой. Снова копайте в сторону почтовика, папки Спам, настроек обработчика почты (там может стоять какое-нибудь правило на удаление этой почты), антивируса и т.п. Как вариант, попробуйте перенастроить сайт на отправку почты на другой ящик. Или обратитесь к специалисту, если вы понимаете о ком я говорю))
Если НЕ пришло, значит попробуйте настроить отправку почты через SMTP, как это описано по ссылке.
И да, после проверки не забудьте удалить файл mail.php, на котором тестировали функцию mail(). На всякий случай.
Как проверить функцию mail(), если у вас нет доступа к FTP?
Хочется сказать «никак», но это неправда. Проверить функцию mail() можно, но тут вы рискуете тем, что если что-нибудь сделаете неверно, то сайт просто перестанет работать, а починить его без доступа к FTP, скорее всего, не получится.
Напугал? Отлично, потому что это все правда. Но допустим, вы все-таки хотите проверить. Ладно.
Тогда делаем вот что.
1. Заходим в админку, в правом меню нажимаем «Внешний вид», затем «Редактор».
2. В редакторе в правой колонке находим и кликаем по footer.php
3. В окне редактирования пролистываем содержимое файла до самого конца.
В самом конце (где нибудь после тэгов ), вставляем этот код:
Чтобы избежать ошибки и как следствие, поломки сайта, убедитесь, что все зоны PHP-кода в файле footer.php закрыты с помощью «?>».
Если обнаружите, что в файле последний открытый тэг « Помогло? Зашли Админу на чай.
А с вами был Доктор Лексиум. До новых постов)
Если помогло, можете отблагодарить меня, заслав немного монет на чаи.
Источник
Решение проблемы отправки почты в wordpress
Чаще всего люди жалуются на то, что им на почту не приходят уведомления о новых комментариях, бекапы базы данных, или не приходит письмо с логином и паролем при регистрации.
За отправку почты в WordPress отвечает php функция mail(), с работой которой на некоторых хостингах возникают проблемы. Для начала опишу несколько простейших решений проблемы:
- Во первых, поинтересуйтесь у вашего хостера, включена ли у вас такая функция mail().
- Во-вторых, убедитесь, что в вашем профиле администратора указан e-mail адрес
- И в-третьих, попробуйте создать на хостинге почту вида wordpress@ваш_домен (например wordpress@seostage.ru). Во всех письмах, отправляемых из worpress, в строке отправителя стоит именно этот адрес, но некоторые хостинги не дают отправить письмо с таким мылом, если фактически на сервере его нет.
Если после вышеперечисленных действий почта все еще не отправляется, тогда нужно заставить wordpress отправлять ее через smtp сервер. Для этого можно пойти двумя путями: с помощью плагина, и с помощью внесения изменений в код.
В первом случае я советую использовать плагин Configure smtp, так как он легкий и имеет мало настроек, а если вы используете гуглопочу, то вам вообще нужно ввести только адрес почты и пароль к ней, а плагин сам подставит все настройки.
Как я сказал выше, если вы используете почту Google, то вам необходимо поставить галку Send e-mail via Gmail и заполнить поля SMTP username и SMTP password. Далее сохраняете настройки и нажимаете кнопку “Отправить тестовое письмо” и ждете, пока письмо придет вам на почту. Причем придти оно должно по адресу, указанному в вашем профиле администратора, а ящик, который вы указали в плагине, является как-бы транзитным, то есть используется только для реализации отправки писем через smtp.
Если вы используете почту на другом сервисе, отличном от Google, то вам, помимо логина и пароля необходимо указать и другие настройки (галку Send e-mail via Gmail уже ставить не нужно)
В полях SMTP host и SMTP port указываете соответственно сервер и порт вашего почтового сервиса. Далее по желанию можно указать следующие настройки. Wordwrap length — количество символов в письме до переноса строки. Sender e-mail и Sender name это адрес отправителя, который будет показываться в строке «От» и имя отправителя. Если же не указывать эти параметры, то они по-умолчанию будут браться из настроек вашего блога.
Если же вы не хотите нагружать свой движок дополнительными плагинами, тогда можно решить проблему, добавив изменения в код. Для этого необходимо открыть файл wp-includes/class-phpmailer.php и внести следующие изменения. (ниже представлены куски кода, в которые внесены изменения; — обозначает пропуск кода) Данный способ представил Lecactus
После всех вышеперечисленных действий проблемы с отправкой почты в wordpress, должны исчезнуть. Не забывайте подписываться на обновления моего блога. Желаю удачи! 🙂
Источник
WordPress.org
Русский
PHP 8 не работает WP_mail
Добрый день, на сайте при переходе на PHP 8 перестала отправляться почтовая форма, если обратно откатываем к 7.2, все нормально отправляет.
код в function.php
В дебаге следующие
Быть может кто-то сталкивался с подобной проблемой?
- Тема изменена 4 месяца, 4 недели назад пользователем conscience5 . Причина: Не верно определена тема
- Тема изменена 4 месяца, 4 недели назад пользователем Yui . Причина: redundant link(s) deleted
Страница, с которой нужна помощь: [войдите, чтобы увидеть ссылку]
Попробуйте запустить такой код:
У вас в тексте ошибки написано, что вы пытаетесь вызвать функцию которая еще не определена.
На php 7 это работает потому, что там генерируется Warning, а не Error. Но set_html_content_type и там естественно не вызывается.
Функцию set_html_content_type нужно вынести из функции true_add_ajaxform .
- Ответ изменён 4 месяца, 4 недели назад пользователем pluginfactory .
- Ответ изменён 4 месяца, 4 недели назад пользователем pluginfactory .
- Ответ изменён 4 месяца, 4 недели назад пользователем pluginfactory .
Это же function.php она (функция) в таком случае будет всегда отрабатывать
Да, если бы вы set_html_content_type на верхнем уровне определили, а вы её засунули внутрь true_add_ajaxform . Её нужно оттуда высунуть.
она (функция) в таком случае будет всегда отрабатывать
Не всегда, а только если её вызвать, что и делает add_filter() (точнее, apply_filters() в нужный момент).
Как верно заметили выше, определение функции нужно вынести из true_add_ajaxform() .
да, вы правы, спасибо за наводку
вынесли функцию и все заработало, спасибо вам
- Ответ изменён 4 месяца, 4 недели назад пользователем conscience5 .
Источник