С ростом вашего проекта растёт количество отправляемых сайтом писем (оповещения пользователям, регистрации, блокировки) и всё больше из них ничанают попадать в спам или не доходить до адресата совсем, так как по умолчанию 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 'Где-то ты лоханулся знатно!'; }
Источник: https://www.kobzarev.com/wordpress/smtp-wordpress/