Время для прочтения: 1 мин. 8 сек.

Настройка отправки почты в WordPress через SMTP без плагинов

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

Выход в данной ситуации — отправка писем через SMTP с авторизацией. И нет смысла ставить плагины, всё решается в несколько строк кода в конфиге вашего сайта.

В wp-config.php разместите данные константы перед определением ABSPATH и замените тестовые данные реквизитами своего SMTP сервера (yandex, google или любой другой):

<?php
// Имя пользователя для SMTP авторизации
define( 'SMTP_USER', 'user@example.com' );  

// Пароль пользователя для SMTP авторизации
define( 'SMTP_PASS', 'smtp password' );

// Хост почтового сервера
define( 'SMTP_HOST', 'smtp.example.com' );

// Обратный Email
define( 'SMTP_FROM', 'website@example.com' );

// Имя для обратного мыла
define( 'SMTP_NAME', 'Вася Пупкин' );

// Номер порта (25, 465, 587)
define( 'SMTP_PORT', '25' );

// Тип шифиования (ssl или tls)
define( 'SMTP_SECURE', 'tls' );

// Включение/отключение шифрования
define( 'SMTP_AUTH', true );

// Режим отладки (0, 1, 2)
define( 'SMTP_DEBUG', 0 );

В functions.php фильтруем стандартные параметры PHPMailer, передавая в него данные из констант, определённых в конфиге:

<?php
/**
 * Настройка SMTP
 *
 * @param PHPMailer $phpmailer объект мэилера
 */
function mihdan_send_smtp_email( PHPMailer $phpmailer ) {
	$phpmailer->isSMTP();
	$phpmailer->Host       = SMTP_HOST;
	$phpmailer->SMTPAuth   = SMTP_AUTH;
	$phpmailer->Port       = SMTP_PORT;
	$phpmailer->Username   = SMTP_USER;
	$phpmailer->Password   = SMTP_PASS;
	$phpmailer->SMTPSecure = SMTP_SECURE;
	$phpmailer->From       = SMTP_FROM;
	$phpmailer->FromName   = SMTP_NAME;
}
add_action( 'phpmailer_init', 'mihdan_send_smtp_email' );

Проверка отправки

В корне сайта создайте файл mail.php со следующим содержимым и откройте его через браузер:

<?php
// Кому отправляем
$to = 'you@yourdomain.com';
 
// Тема письма
$subject = 'Проверка wp_mail';

// Само сообщение
$message = 'Это тестовое сообщение';
 
// Загружаем только ядро WordPress
define( 'WP_USE_THEMES', false );
require( 'wp-load.php' );
 
// Отправляем письмо
$sent_message = wp_mail( $to, $subject, $message );

if ( $sent_message ) {
    // Если сообщение успешно отправилось
    echo 'Всё чётко настроил, бро!';
} else {
    // Ошибки при отправке
    echo 'Где-то ты лоханулся знатно!';
}
Пошерить
Плюсануть
Отправить
Вотсап

WordPress Digest Мой канал в Телеграм, посвящённый WordPress
Александр

Здравствуйте, инструкция полезная.

Но, держать пароль от smtp в открытом виде не безопасно? При взломе злоумышленник получит еще и данные от почты для спама?

Можно ли как то пароль шифровать, хотя бы в md5?

И второй вопрос, думаю многим будет интересно, как можно сделать, чтобы вся почта, которая отправяляется через wordpress дублировалась в телеграм ботом?

Где прописываются настройки бота?

Если напишите инструкцию, буду благодарен, многим пригодится.

Кобзарёв Михаил

Насчёт шифрования при данном подходе могу посоветовать только написать функцию самопальную со своим алгоритмом и поместить в functions. Даже если плагином делать, то пароль будет лежать не файле, а в базе данных. Тут надо выбирать удобство или безопасность.

В качестве бота рекомендую плагин моего товарища Игоря. Можете подглядеть как сделано так.

Александр

Спасибо, Михаил за ответ и за плагин. (раньше как то долго искал под Contact Form такое решение, автор сделал нужную вещь и думаю востребованную).

Сейчас немного другая задача, не везде нужно ставить Contact Form (тяжелая форма), иногда проще отдельный шаблон под страницу контактов с простенькой формой.

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

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

Супер, все работает! спасибо большое!

Кобзарёв Михаил

Всегда пожалуйста!

Шикарно то как! Можно оказывается и вовсе обойтись без плагина. Спасибо!

Кобзарёв Михаил

Не на чем)))

Карина

а как установить headers text/html, чтобы html в письме корректно отображался?

Кобзарёв Михаил

Вам нужен фильтр wp_mail_content_type.

Отличный пост, спасибо.
Очень часто люди встречаются с проблемой доставки почти с WordPress or Woocommerce. А здесь все описано почему письма не приходят и как с этим бороться.

Кобзарёв Михаил

Пожалуйста.

Добавить комментарий

Такой e-mail уже зарегистрирован. Воспользуйтесь формой входа или введите другой.

Вы ввели некорректные логин или пароль

Извините, для комментирования необходимо войти.

1. Нажимая на кнопку "Отправить", я даю согласие на обработку персональных данных.

2. Для вставки кода используйте специальные теги [code lang="php"]ваш код[/code]