Обзоры        03.04.2024   

Почтовый клиент wordpress. Решение проблемы отправки почты в wordpress. Бесплатный или платный SMTP сервис для WordPress

Здравствуйте, уважаемые читатели блога сайт. Сегодня будет статья по теме плагины для WordPress. Я стараюсь в этой рубрике касаться только самых полезных и необходимых расширений, но бывают такие ситуации, когда могут понадобиться возможности, позволяющие реализовать в этом движке то, что в нем уже имеется, но по каким-либо причинам не работает или работает не совсем так, как хотелось бы.

Вот сегодня я и хочу рассказать о парочке таких плагинов. Один из них реализует функцию отправки почты (называется Configure SMTP), а второй позволяет расширить возможности имеющегося в Вордпрессе Html редактора (Post Editor Buttons), для случая, если у вас по каким-либо причинам не работает визуальный.

Проблема отправки писем из WordPress и настройка почты

Их я сам использую довольно давно и нареканий по их работе у меня нет, но если у вас нет проблем с отправкой писем и работой визуального редактора, то просто оставьте закладку на эту публикацию, ибо при возможном переезде на новый хостинг или после каких-либо пертурбаций на старом есть вероятность того, что они могут закапризничать.

Нет, я ни в коем случае не желаю вам этих проблем, но они возникают у многих пользователей на совершенно разных хостинга, а значит лучше быть готовым ко всем неожиданностям и уже иметь готовое решение в кармане. Плагины эти просты как в установке, так и в настройке, и думаю, что трудностей с ними у вас не возникнет.

Итак, давайте начнем с решения проблемы отправки почты из WordPress, которая, например, у меня возникла после . До этого письма прекрасно отправлялись при помощи функции Php Mail, с работой которой, к сожалению, и возникли проблемы. Хотя во всем остальном Инфобокс , на котором сейчас базируется сайт, заслуживает только хороших слов.

Причем о проблеме в работе почты я узнал от одного из читателей (отдельное спасибо ему за это), который пожаловался, что к нему не приходят сообщения о появлении нового комментария в теме, на которую он подписался через функционал .

Дело в том, что он реализует подписку на новые комментарии в WordPress и использует для отправки писем именно встроенный в Вордпресс механизм — функцию Php Mail, которая на новом хостинге имела проблемы с работоспособностью.

К тому времени у меня уже был опыт решения подобных , и я предполагал найти сходные настройки и в админке WordPress. Но, к сожалению, решение данной проблемы разработчиками движка было отдано на откуп разработчикам плагинов.

Таковых оказалось довольно много, но попробовав некоторые из них я все же остановил свой выбор на Configure SMTP. Он просто подкупает простотой настройки, а если в качестве транзитного E-mail , то вообще все сводится к тому, чтобы в его настройках указать название почтового ящика и пароль для доступа к нему.

Но обо всем по порядку. Сначала вам нужно будет скачать Configure SMTP, а затем установить его по хорошо отработанной стандартной схеме:

  1. Распаковываете архив
  2. Копируете папку configure-smtp посредством FTP в директорию: /wp-content/plugins
  3. Заходите в админку, выбираете из меню пункт «Плагины», переходите на вкладку «Неактивные», находите строчку с плагином Configure SMTP и щелкаете по кнопке «Активировать»

А памятуя о безопасности основного вашего E-mail и возможных последствиях проникновения в него, лениться с созданием нового ящика не стоит, во избежании проблем, которые возникли, например, у меня после несанкционированного доступа к моей почте, которые я описал в .

В Гмайл в этом плане вообще все шоколадно, ибо имеет место быть двухэтапная верификация (), которая привязывает ваш ящик к номеру мобильника и злоумышленникам будет нечего ловить.

Давайте рассмотрим те настройки, которые нужно сделать, чтобы окончательно и бесповоротно решить проблему с работоспособностью почты в WordPress.

Настройки плагина Configure SMTP

Для этого в админке выберите пункты «Параметры» — «SMTP»:

Если вы используете Гмайл, то вам достаточно будет поставить галочку в поле «Send e-mail via GMail», а затем ввести название ящика в поле «SMTP username» и пароль к нему в поле «SMTP password». Все, сохраняйте настройки и тестируйте работоспособность отправки писем из Вордпресс с помощью расположенной в самом низу кнопки «Send test e-mail».

После щелчка по ней в самом верху окна настройки появится сообщение о том, что вам отправлено тестовое сообщение (Test e-mail sent). Далее вы должны будете проверить наличие тестового письма в почтовом ящике администратора блога, который был вами указан в общих настройках WordPress в поле «Адрес e-mail» («Параметры» — «Общие»).

Кстати, я использую в качестве администраторского емайл вида admin@сайт, который был создан не в панели управления хостинга, а , и работать с этим почтовым ящиком, содержащим в своем названии доменное имя, я могу через интерфейс почты Гугла, что очень удобно, особенно в случае смены хостинга. Кстати, в свое время я описал , что тоже является неплохим решением.

А тот почтовый ящик сервиса Gmail, пароль к которому вы вводили в настройках плагина, является всего лишь транзитным звеном, и там вашего тестового письма не будет. Он нужен лишь для реализации отправки почты с WordPress через SMTP, при возникновении проблем с работой стандартного варианта (функции Php Mail).

Давайте пробежимся по остальным настройкам плагина Configure SMTP, хотя они и не особо важные. Если вы использовали для трансляции почтовый ящик отличный от Гмэйл, то галочку в поле «Send e-mail via GMail» вам ставить не нужно, но зато потребуется кроме указания емайла и пароля к нему, еще указать и другие параметры, присущие этому почтовому сервису в полях со второго по пятое.

Далее в поле «Wordwrap length» можете указать количество символов, которое нужно будет ввести в письме до возникновения переноса строки, а в полях «Sender e-mail» и «Sender name» можете указать, какой Емайл будет указан в качестве обратного в полученном пользователем письме, а так же, что будет отображаться в поле «От кого» в данном письме. Если эти поля не заполнять, то будет взята информация из общих настроек WordPress.

Post Editor Buttons — добавить кнопки в редактор Вордпресса

Вторая проблема в WordPress, которая у меня возникла — это неработоспособность визуального редактора. В свое время пробовал разными хитрыми способами все-таки оживить его, но, к сожалению, безуспешно. Я пытался ставить альтернативные редакторы в виде плагинов, но проблема как была, так и осталась не решенной до сих пор.

Но кроме визуального редактора в админке имеется и обычный Html редактор, обладающий минимальным функционалом, но вполне работоспособный. Ну, а после того, как я узнал о существовании и установил на свой блог плагин Post Editor Buttons, расширяющий его возможности, то потребность в поиске решения проблемы с визуальным редактором исчезла вовсе.

Теперь можно переходить к его настройке («Параметры» — «Post Editor Buttons»), а точнее к добавлению новых кнопок в базовый редактор Вордпресса.

Делается это очень просто. Сначала вам нужно щелкнуть по ссылке «New», расположенной в самом низу окна (почему-то она сделана не очень заметной).

После этого вам представится возможность заполнить три поля формы в столбцах «Caption», «Before» и «After». В первое нужно будет вписать название новой кнопки, а в «Before» и «After» нужно будет добавить открывающий и закрывающий теги, в которые будет заключен выделенный вами в редакторе текст, после того, как щелкните по вновь созданной кнопочке.

На приведенном чуть выше скриншоте в первой строке прописано создание кнопки под названием «H3», которая позволяет мне заключать нужный текст в открывающий и закрывающий . Очень удобно. Выделил нужный текст, щелкнул по «H3» в панели редактора и оформляется нужный заголовок.

Вовсе не обязательно использовать для создания новой кнопки именно Html теги. В третей строке, на приведенном выше скриншоте, вы можете увидеть строку создания кнопки «PHP», в качестве открывающих и закрывающих тегов которой используется специальный оператор , позволяющего выделять и подсвечивать код в тексте поста.

Можно вообще не использовать закрывающий тег при создании кнопочки. Такой пример вы можете видеть в двух нижних строках все того же скриншота. С помощью этих двух кнопок в редакторе я вставляю в тексты статей изображения.

Первая служит для вставки изображений размером в полную ширину страницы (заранее подгоняю картинки под этот размер) и по нажатию на нее, в то место где был расположен курсор мыши, будет вставлен Html тег картинки следующего вида:

Мне останется только загрузить по FTP нужное изображение в папку «image», прописать название графического файла в этом коде (заместо 25.10.png), ну и исправить содержимое атрибутов «alt» и «title» на то, что подходит выводимому изображению по смыслу. Например, все тот же пресловутый скриншот, расположенный выше, выводится по следующему коду:

Вторая кнопка для панели моего редактора позволяет быстро вставлять в текст статей небольшие картинки, которые благодаря прописанному в CSS классу будут выровнены по центру страницы, что мне кажется более органичным, нежели используемое по умолчанию выравнивание по левой стороне.

Удачи вам! До скорых встреч на страницах блога сайт

Вам может быть интересно

Comment Toolbar - добавляем в комментарии WordPress возможность ответа и цитирования
Подсветка кода и кнопки форматирования комментариев в WordPress - SyntaxHighlighter и Comment Form
Simple Counters и Category and Page Icons - красивые счетчики RSS и Twitter, а так же иконки для категорий и страниц в WordPress
Google XML Sitemaps - создание карты сайта для WordPress Как в плагине Yet Another Related Posts убрать прозрачный пиксель http://yarpp.org/pixels и изменить надпись Похожие материалы
WP-PageNavi - постраничная навигация для блога на WordPress — установка, настройка и изменение внешнего вида пагинации
Создание в WordPress карты блога для посетителей (плагины Sitemap Generator и WP DS Blog Map)
Subscribe To Comments для WordPress - подписка на комментарии к статьях в Вордпресс
Галерея для WordPress на основе плагина NextGEN Gallery - создание и вывод фотогалерей и слайдшоу в статьях
Calendarize it! - Календарь мероприятий для WordPress
Better Feed для WordPress - как не отдавать в RSS полные тексты постов и защититься от воровства контента через новостной канал

Привет! Сегодня хочу поговорить об одной очень распространенной проблеме, с которой часто сталкиваются веб-мастера, которые используют . Это проблема с отправкой почты (а точнее ее неотправкой). Когда-то я тоже сталкивался с такой проблемой у себя на блоге (тогда мне не приходили письма с бекапами базы данных). Теперь все чаще меня просят решить эту проблему на других сайтах, поэтому в этой статье я опишу самые распространенные пути решения данной проблемы.

Чаще всего люди жалуются на то, что им на почту не приходят уведомления о новых комментариях , бекапы базы данных, или не приходит письмо с логином и паролем при регистрации.

За отправку почты в WordPress отвечает php функция mail() , с работой которой на некоторых хостингах возникают проблемы. Для начала опишу несколько простейших решений проблемы:

  • Во первых, поинтересуйтесь у вашего хостера, включена ли у вас такая функция mail() .
  • Во-вторых, убедитесь, что в вашем профиле администратора указан e-mail адрес
  • И в-третьих, попробуйте создать на хостинге почту вида wordpress@ваш_домен (например wordpress@сайт ). Во всех письмах, отправляемых из worpress, в строке отправителя стоит именно этот адрес, но некоторые хостинги не дают отправить письмо с таким мылом, если фактически на сервере его нет.

Если после вышеперечисленных действий почта все еще не отправляется, тогда нужно заставить wordpress отправлять ее через smtp сервер . Для этого можно пойти двумя путями: с помощью плагина, и с помощью внесения изменений в код.

В первом случае я советую использовать плагин Configure smtp , так как он легкий и имеет мало настроек, а если вы используете гуглопочу, то вам вообще нужно ввести только адрес почты и пароль к ней, а плагин сам подставит все настройки.

Как я сказал выше, если вы используете , то вам необходимо поставить галку 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

Var $From = "сюда вписываем e-mail"; --- /** * Method to send mail: ("mail", "sendmail", or "smtp"). * @var string */ var $Mailer = "smtp"; --- ///////////////////////////////////////////////// // SMTP VARIABLES ///////////////////////////////////////////////// /** * Sets the SMTP hosts. All hosts must be separated by a * semicolon. You can also specify a different port * for each host by using this format: * (e.g. "smtp1.example.com:25;smtp2.example.com"). * Hosts will be tried in order. * @var string */ var $Host = "smtp.ваш_smtp_сервер.ru"; --- /** * Sets Mailer to send message using SMTP. * @return void */ function IsSMTP() { $this->Mailer = "smtp"; } /** * Sets Mailer to send message using PHP mail() function. * @return void */ function IsMail() { $this->Mailer = "smtp"; } /** * Sets Mailer to send message using the $Sendmail program. * @return void */ function IsSendmail() { $this->Mailer = "smtp"; } /** * Sets Mailer to send message using the qmail MTA. * @return void */ function IsQmail() { $this->Sendmail = "/var/qmail/bin/sendmail"; $this->Mailer = "smtp"; }

После всех вышеперечисленных действий проблемы с отправкой почты в wordpress, должны исчезнуть. Не забывайте подписываться на

Отправляет письмо на почту. Похожа на mail() в PHP.

Имя отправителя по умолчанию: WordPress , а email по умолчанию: [email protected] . Их можно переписать изменив заголовок письма на:

From: Example User

Функция использует фильтры wp_mail_from и wp_mail_from_name , которые влияют на адрес email"a и имя отправителя, соответственно, при этом поле From (от кого) собирается заново. Если только wp_mail_from (email) возвращает значение, то имя указываться не будет вообще: (From: [email protected])

Тип письма по умолчанию text/plain , а значит в теле письма нельзя использовать html теги. Изменить тип письма можно через фильтр wp_mail_content_type или указав заголовок: content-type: text/html .

Кодировка по умолчанию соответствует кодировке блога (обычно utf-8). Кодировка устанавливается через фильтр wp_mail_charset .

Для работы этой функции сервер должен работать с SMTP и должен быть установлен smtp_port в php.ini.

Это pluggable функция - т.е. её можно заменить из плагина. Это значит, что она будет работать (подключается) только после подключения всех плагинов, а до этого момента функция еще не определена... Поэтому нельзя вызывать эту и зависящие от неё функции прямо из кода плагина. Их нужно вызывать через хук plugins_loaded или позднее, например хук init .

Замена функции (переопределение) - в плагине можно создать функцию с таким же названием, тогда она заменит текущую функцию.

Хуки из функции
Возвращает

true, если удалось отправить письмо и false, если нет.

true не означает, что письмо дошло до адресата, а означает только то, что функция проделала всю процедуру отправки письма без ошибок.

Использование

wp_mail($to, $subject, $message, $headers, $attachments); $to(строка/массив) (обязательный) email получателя письма. Несколько получателей указываются в массиве или через запятую в строке.
По умолчанию: нет $subject(строка) (обязательный) Тема письма (заголовок).
По умолчанию: нет $message(строка) (обязательный) Тело письма (содержание, контент).
По умолчанию: нет $headers(строка/массив)

Заголовки письма, указывающие на его атрибуты. Для продвинутого использования. Может быть:

  • from - от кого. Пр. [email protected]
  • content-type - text/html , text/plain
  • cc - [email protected] - точная копия (carbon copy) - вторичные получатели письма, которым направляется копия. Они видят и знают о наличии друг друга.
  • bcc - [email protected] - скрытая точная копия (blind carbon copy) - скрытые получатели письма, чьи адреса не показываются другим получателям.
  • reply-to - [email protected]
  • и любые другие произвольные параметры.

По умолчанию: ""

$attachments(строка/массив) Файлы, которые следует прикрепить к письму. Указываем полный путь до файла (название файла включительно). Если нужно прикрепить несколько файлов указываем их названия в массиве или в строке через перенос строки.
По умолчанию: array()

Примеры

#1. Пример отправки письма

Отправим письмо от My Name с прикрепленным файлом attach.zip:

На некоторых серверах (хостингах) в поле FROM (в части email) обязательно должен фигурировать домен сайта, иначе, например, яндекс почта не получит письмо. Проверял на хостинге Бегет.

Т.е. в этом случае лучше не указывать From: , а изменить только часть этого поля, только имя, через фильтр:

Add_filter("wp_mail_from_name", function($from_name){ return "Мое имя, а не WordPress"; // тут можно указать свою почту: [email protected] });

// удалим фильтры, которые могут изменять заголовок $headers // remove_all_filters("wp_mail_from"); // remove_all_filters("wp_mail_from_name"); $attachments = array(WP_CONTENT_DIR . "/uploads/attach.zip"); $headers = "From: My Name " . "\r\n"; wp_mail("[email protected]", "Тема", "Содержание", $headers, $attachments); // [email protected] - кому отправляем.

#2. Пример использования массива для указания заголовков письма:

// подразумевается что $to, $subject, $message уже определены... // удалим фильтры, которые могут изменять заголовок $headers // remove_all_filters("wp_mail_from"); // remove_all_filters("wp_mail_from_name"); $headers = array("From: Me Myself ", "content-type: text/html", "Cc: John Q Codex ", "Cc: [email protected]", // тут можно использовать только простой email адрес); wp_mail($to, $subject, $message, $headers);

#3. Отправим письмо двум пользователям сразу и зададим формат письма html:

$multiple_to_recipients = array("[email protected]", "[email protected]"); add_filter("wp_mail_content_type", "set_html_content_type"); wp_mail($multiple_to_recipients, "The subject", "

The HTML message

"); // Сбросим content-type, чтобы избежать возможного конфликта remove_filter("wp_mail_content_type", "set_html_content_type"); function set_html_content_type() { return "text/html"; }

#4. Настройка параметров отправки через фильтры

#1 Этот пример показывает как изменить тип письма на html, используя фильтр wp_mail_content_type:
add_filter("wp_mail_content_type", function($content_type){ return "text/html"; }); wp_mail("[email protected]", "The subject", "

The HTML message

");
#2 Укажем свой адрес email в заголовке письма:
add_filter("wp_mail_from", "vortal_wp_mail_from"); function vortal_wp_mail_from($email_address){ return "[email protected]"; } // получим заголовок: WordPress
#3 Укажем имя в заголовке письма:
add_filter("wp_mail_from_name", "vortal_wp_mail_from_name"); function vortal_wp_mail_from_name($email_from){ return "XXX"; } // получим заголовок: XXX

Код wp mail : wp-includes/pluggable.php WP 5.2.1

0) { $from_name = substr($content, 0, $bracket_pos - 1); $from_name = str_replace(""", "", $from_name); $from_name = trim($from_name); } $from_email = substr($content, $bracket_pos + 1); $from_email = str_replace(">", "", $from_email); $from_email = trim($from_email); // Avoid setting an empty $from_email. } elseif ("" !== trim($content)) { $from_email = trim($content); } break; case "content-type": if (strpos($content, ";") !== false) { list($type, $charset_content) = explode(";", $content); $content_type = trim($type); if (false !== stripos($charset_content, "charset=")) { $charset = trim(str_replace(array("charset=", """), "", $charset_content)); } elseif (false !== stripos($charset_content, "boundary=")) { $boundary = trim(str_replace(array("BOUNDARY=", "boundary=", """), "", $charset_content)); $charset = ""; } // Avoid setting an empty $content_type. } elseif ("" !== trim($content)) { $content_type = trim($content); } break; case "cc": $cc = array_merge((array) $cc, explode(",", $content)); break; case "bcc": $bcc = array_merge((array) $bcc, explode(",", $content)); break; case "reply-to": $reply_to = array_merge((array) $reply_to, explode(",", $content)); break; default: // Add it to our grand headers array $headers[ trim($name) ] = trim($content); break; } } } } // Empty out the values that may be set $phpmailer->clearAllRecipients(); $phpmailer->clearAttachments(); $phpmailer->clearCustomHeaders(); $phpmailer->clearReplyTos(); // From email and name // If we don"t have a name from the input headers if (! isset($from_name)) { $from_name = "WordPress"; } /* If we don"t have an email from the input headers default to wordpress@$sitename * Some hosts will block outgoing mail from this address if it doesn"t exist but * there"s no easy alternative. Defaulting to admin_email might appear to be another * option but some hosts may refuse to relay mail from an unknown domain. See * https://core.trac.wordpress.org/ticket/5007. */ if (! isset($from_email)) { // Get the site domain and get rid of www. $sitename = strtolower($_SERVER["SERVER_NAME"]); if (substr($sitename, 0, 4) == "www.") { $sitename = substr($sitename, 4); } $from_email = "wordpress@" . $sitename; } /** * Filters the email address to send from. * * @since 2.2.0 * * @param string $from_email Email address to send from. */ $from_email = apply_filters("wp_mail_from", $from_email); /** * Filters the name to associate with the "from" email address. * * @since 2.3.0 * * @param string $from_name Name associated with the "from" email address. */ $from_name = apply_filters("wp_mail_from_name", $from_name); try { $phpmailer->setFrom($from_email, $from_name, false); } catch (phpmailerException $e) { $mail_error_data = compact("to", "subject", "message", "headers", "attachments"); $mail_error_data["phpmailer_exception_code"] = $e->getCode(); /** This filter is documented in wp-includes/pluggable.php */ do_action("wp_mail_failed", new WP_Error("wp_mail_failed", $e->getMessage(), $mail_error_data)); return false; } // Set mail"s subject and body $phpmailer->Subject = $subject; $phpmailer->Body = $message; // Set destination addresses, using appropriate methods for handling addresses $address_headers = compact("to", "cc", "bcc", "reply_to"); foreach ($address_headers as $address_header => $addresses) { if (empty($addresses)) { continue; } foreach ((array) $addresses as $address) { try { // Break $recipient into name and address parts if in the format "Foo " $recipient_name = ""; if (preg_match("/(.*)<(.+)>/", $address, $matches)) { if (count($matches) == 3) { $recipient_name = $matches; $address = $matches; } } switch ($address_header) { case "to": $phpmailer->addAddress($address, $recipient_name); break; case "cc": $phpmailer->addCc($address, $recipient_name); break; case "bcc": $phpmailer->addBcc($address, $recipient_name); break; case "reply_to": $phpmailer->addReplyTo($address, $recipient_name); break; } } catch (phpmailerException $e) { continue; } } } // Set to use PHP"s mail() $phpmailer->isMail(); // Set Content-Type and charset // If we don"t have a content-type from the input headers if (! isset($content_type)) { $content_type = "text/plain"; } /** * Filters the wp_mail() content type. * * @since 2.3.0 * * @param string $content_type Default wp_mail() content type. */ $content_type = apply_filters("wp_mail_content_type", $content_type); $phpmailer->ContentType = $content_type; // Set whether it"s plaintext, depending on $content_type if ("text/html" == $content_type) { $phpmailer->isHTML(true); } // If we don"t have a charset from the input headers if (! isset($charset)) { $charset = get_bloginfo("charset"); } // Set the content-type and charset /** * Filters the default wp_mail() charset. * * @since 2.3.0 * * @param string $charset Default email charset. */ $phpmailer->CharSet = apply_filters("wp_mail_charset", $charset); // Set custom headers if (! empty($headers)) { foreach ((array) $headers as $name => $content) { $phpmailer->addCustomHeader(sprintf("%1$s: %2$s", $name, $content)); } if (false !== stripos($content_type, "multipart") && ! empty($boundary)) { $phpmailer->addCustomHeader(sprintf("Content-Type: %s;\n\t boundary=\"%s\"", $content_type, $boundary)); } } if (! empty($attachments)) { foreach ($attachments as $attachment) { try { $phpmailer->addAttachment($attachment); } catch (phpmailerException $e) { continue; } } } /** * Fires after PHPMailer is initialized. * * @since 2.2.0 * * @param PHPMailer $phpmailer The PHPMailer instance (passed by reference). */ do_action_ref_array("phpmailer_init", array(&$phpmailer)); // Send! try { return $phpmailer->send(); } catch (phpmailerException $e) { $mail_error_data = compact("to", "subject", "message", "headers", "attachments"); $mail_error_data["phpmailer_exception_code"] = $e->getCode(); /** * Fires after a phpmailerException is caught. * * @since 4.4.0 * * @param WP_Error $error A WP_Error object with the phpmailerException message, and an array * containing the mail recipient, subject, message, headers, and attachments. */ do_action("wp_mail_failed", new WP_Error("wp_mail_failed", $e->getMessage(), $mail_error_data)); return false; } }

Так как про него пишут практически все и много, видимо так действует этот движок на народ, сродни эпидемии. Вот и меня зацепила зараза, и все из за возникшей проблемы с доставкой писем через WP. Как оказалось существует этот неприятный глюк давно и периодически дает о себе знать многим кто работает с . Вообще этот движок не дает расслабиться и постоянно приходится орудовать лопатой разгребая кучу проблем возникающих в процессе ведения блога.

Накатил косяк с не отправкой писем, после переезда на новый хостинг и обновления движка. Тихо-мирно, после обновы, решил проверить форму обратной связи, а так же отправить бекап базы данных к себе на почту. Письма вроде бы и уходили, а в почтовом ящике тишина и спокойствие. Конечно я воспринял все это без истерики, уже привык к выкидонам движка. Перекурив и собравшись с мыслями стал искать решение и способ устранения неполадок.
Первым делом пробил свой хостинг на наличие поддержки функции mail () , все в порядке оказалось. Cтал искать способ для отправки писем через SMTP.
Решений как оказалось предлагают много, например предложил немного подправить код в файле wp-includes/class-phpmailer.php . Вариант по исполнению отличный, но мне не помог.
Тут «понеслась душа в рай», в ход пошли один плагин за другим, ставил разные и много, но по тем или иным причинам отказывался от их использования.
Создание e-mail вида wordpress@имя_домена , по ряду причин тоже не принесло положительных результатов.
Когда стал закипать мозг и сходиться глаза в кучу, натолкнулся на неприметный такой плагинчик . У нас описание этого плагина встретил лишь один раз и то поверхностное, может просто плохо искал. Решительно зашел к автору на сайт, почитал в меру своих знаний буржуинского и решил попробовать до кучи еще и этот способ. Поставил плагин к себе на блог и несмотря на всю невзрачность и легковесность, помог «буржуинский бродяга» измученному Российскому пользователю, пошли письма на почту, и самое главное стали доходить до адресата.

И так давайте подробно рассмотрим работу плагина для настройки SMTP рассылки в WordPress:

Configure SMTP

В свое время, чисто для себя сделал перевод плагина configure-smtp 2.7 , переводить там в принципе особенно и нечего, все интуитивно понятно и так, но хочется все же читать на родном языке о том, что делаешь в плане настроек. Так что кого заинтересует можете скачать и протестировать русскоязычный плагин Configure SMTP версии 2.7:

Скачать русскую версию плагина:

Немедленно после того, как письмо отправлено, в голову приходят свежие мысли. (закон письма)

Стандартная отправка почты в WordPress осуществляется с помощью почтового сервера хостинг провайдера с помощью функции mail. Однако не все хостинг провайдеры включают использование этой функции.

К счастью, есть выход из этой ситуации – использование стороннего SMTP сервера.

Для того чтобы использование стороннего SMTP сервера стало возможным нужно установить соответствующий плагин.

В статьях в интернете обычно советуют использовать Configure SMTP (есть даже подробные инструкции по его использованию), но, на момент написания данной статьи, этот плагин уже 4 года не обновлялся и, следовательно, не тестировался на последней версии WordPress. Поэтому, если нет желания рисковать, тестируя плагин самостоятельно, лучше поискать альтернативу. Например, плагин Postman SMTP Mailer/Email Log

Устанавливается этот плагин самым обычным способом либо через админпанель WordPress либо путём скачивания zip-архива и его последующей распаковки в директорию wp-content/plugins.

После установки плагина появляется удобная панель управления.

Она позволяет:

  • Выполнить настройку плагина, в частности SMTP,
  • Отправить тестовое письмо по email (Send a Test Email);
  • Сбросить настройки плагина («Delete plugin settings»);
  • Проверить возможность соединения с заданным при настройке SMTP сервером («Run a Connectivity Test»);
  • Получить техническую информацию для диагностики проблем (для специалистов)(«Diagnostic info»);
  • Обратиться за поддержкой к разработчикам плагина («Online Support»);
  • Просмотреть список отправленных сообщений, если включена соответствующая опция («View the log»).

Одна из особенностей этого плагина, возможность настройки SMTP в режиме мастера (кнопка «Start the Wizard»). Это будет большим плюсом для тех, кто испытывает трудности с настройкой технической части.

На первом шаге нужно ввести email, с которого будет отправляться почта с сайта и имя отправителя.

На следующем шаге необходимо указать имя SMTP сервера, который будет использоваться. Например, smtp.mail.ru (если используете эту почту).

После этого плагин автоматически проверит доступность SMTP сервера.

И если проверка проходит успешно, можно остаётся только ввести имя пользователя и пароль.

Следует отметить, что в режиме мастера, плагин автоматически определяет порт, к которому следует подключиться и тип соединения (защищённое или нет).

Также можно выполнить все настройки вручную. К слову, в ручном режиме доступно больше настроек.

На вкладке Account выполняется настройка SMTP. Помимо тех настроек, что были доступны в режиме мастера, также можно задать порт, тип аутентификации и даже изменить протокол. Однако последнее актуально только для пользователей почтового сервиса Gmail, так как в качестве альтернативы поддерживается только Gmail API.

На вкладке «Message» указывается адрес электронной почты, с которого будут отправляться письма и имя отправителя.

Остальные параметры не обязательны и при отсутствии необходимости их можно не указывать.

Вкладка «Logging» предназначена для настройки списка письма. Можно включить или отключить ведение списка («Enable Logging»), задать максимальное количество эле6ментов списка («Log Entries Limit», по умолчанию 10) и максимальное количество строк в описании технической информации о письме(«Transcript Size», по умолчанию 128).

Список отправленных писем (если включено его ведение)можно посмотреть перейдя по ссылке «View the log» на панели управления плагином.

Вкладка «Advanced» предназначена для настроек TCP соединения («Network Settings», лучше оставить значения по умолчанию), работы с журналом PHP («PHP Log Level», тоже лучше оставить по умолчанию) режима доставки писем («Delivery mode») и режима повышенной конфиденциальности («Stealth mode»).

Про режим доставки необходимо сказать особо. Должно быть обязательно выставлено значение «Log Email and Send». В противном случае письма просто не будут отправляться.

В заключение необходимо отметить один, надеюсь, очевидный нюанс. Какой бы Вы ни выбрали плагин для работы с SMTP, никогда не используйте рабочий email. Лучше потратить всего лишь на всего две минуты времени и завести новую почту специально для этих целей.