Настройки плагинов WordPress для отправки почты через SMTP вместо phpmail()

Нормальный антиспам сразу блокирует получение почты от phpmail(), потому как обычно, этот спам рассылают зараженные или взломанные сайты или боты. Для 100% уверенности, что ваша почта будет доходить до вас и ваших подписчиков есть куча плагинов для замены функции phpmail() на отправку почты через SMTP-сервер.

Я использую хостинги с панелью ISPmanager, а соответственно, почтовый сервер EXIM + DOVECOT (проверить это можно телнетом: «telnet yourdomain.com 25» и «telnet yourdomain.com 110», где «yourdomain.com» — ваш домен).

Я испробовал несколько плагинов под WordPress для использования SMTP и остановился на связке — использовать ящики созданные на хостинге с включенной настройкой «SSL» (иногда объединяют «SSL/TLS») и портом 465.
Проблем никаких, работает как часы.

Отправка писем через SMTP без плагинов

В wp-config.php разместите константы перед определением ABSPATH и замените значения на реквизиты своего SMTP сервера:

// Имя пользователя для SMTP авторизации
define( 'SMTP_USER', 'user@example.com' );  
 
// Пароль пользователя для SMTP авторизации
define( 'SMTP_PASS', 'smtp password' );
 
// Хост или IP-адрес почтового сервера
define( 'SMTP_HOST', 'smtp.example.com' );
 
// Обратный Email
define( 'SMTP_FROM', 'website@example.com' );
 
// Имя для обратного мейла
define( 'SMTP_NAME', 'Олег Газманов' );
 
// Номер порта (25, 465, 587)
define( 'SMTP_PORT', '465' );
 
// Тип шифиования (ssl или tls)
define( 'SMTP_SECURE', 'ssl' );
 
// Включение/отключение шифрования
define( 'SMTP_AUTH', true );
 
// Режим отладки (0, 1, 2)
define( 'SMTP_DEBUG', 0 );

В functions.php своей темы (шаблона) фильтруем стандартные параметры PHPMailer, передавая в него данные из констант, которые мы внесли в wp-config.php:

### Настройка отправки через SMTP
### @param PHPMailer $phpmailer объект мейлера
function 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', 'send_smtp_email' );

Для проверки, создайте php файл с содержимым:

<?php
// Кому отправляем
$to = 'you@yourdomain.com';
  
// Тема письма
$subject = 'Проверка wp_mail через SMTP';
 
// Само сообщение
$message = 'Это тестовое сообщение через SMTP';
  
// Загружаем только ядро WordPress
define( 'WP_USE_THEMES', false );
require( 'wp-load.php' );
  
// Отправляем письмо
$sent_message = wp_mail( $to, $subject, $message );
 
if ( $sent_message ) {
    // Если сообщение успешно отправилось
    echo 'Письмо успешно отправлено';
} else {
    // Ошибки при отправке
    echo 'Ошибки при отправке';
}
?>

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