Отправка писем из WordPress — одна из ключевых функций для работы сайта, будь то уведомления о новых заказах, регистрациях или восстановлении пароля. Однако многие сталкиваются с проблемой, когда письма просто не доходят до получателя или попадают в спам. В этой статье разберём, как выявить и устранить проблемы с отправкой писем в WordPress на конкретных примерах и с помощью кода.
Почему письма из WordPress не доходят: основные причины
Проблемы с отправкой писем могут быть связаны с несколькими факторами:
- Неправильные настройки почтового сервера (SMTP);
- Использование функции
wp_mailбез конфигурации SMTP, из-за чего письма отправляются через PHP mail, который часто блокируется; - Проблемы с DNS-записями, такими как SPF, DKIM и DMARC, которые необходимы для подтверждения подлинности отправителя;
- Плагины безопасности или хостинг, блокирующие отправку почты;
- Письма попадают в спам из-за отсутствия правильной настройки заголовков и содержимого.
Для начала нужно убедиться, что WordPress вообще пытается отправить письмо и что оно не блокируется на уровне сервера.
Настройка SMTP для правильной отправки почты в WordPress
Лучший способ гарантировать доставку писем — настроить SMTP-сервер, через который будут отправляться все письма. Для этого можно использовать популярные плагины:
- WP Mail SMTP — самый популярный и простой в настройке плагин для SMTP;
- Clearfy Pro — в том числе имеет функции оптимизации отправки почты;
- Easy WP SMTP — простой плагин для подключения сторонних SMTP-серверов.
Пример базовой настройки SMTP через WP Mail SMTP:
add_action('phpmailer_init', 'wpma_phpmailer_smtp_setup');
function wpma_phpmailer_smtp_setup( $phpmailer ) {
$phpmailer->isSMTP();
$phpmailer->Host = 'smtp.example.com';
$phpmailer->SMTPAuth = true;
$phpmailer->Port = 587;
$phpmailer->Username = 'your-email@example.com';
$phpmailer->Password = 'your-email-password';
$phpmailer->SMTPSecure = 'tls';
$phpmailer->From = 'your-email@example.com';
$phpmailer->FromName = 'WPMA Support';
}
Этот код можно добавить в файл functions.php вашей темы или в отдельный плагин. Он позволит отправлять письма через SMTP вместо стандартного PHP mail.
Проверка работоспособности отправки писем и отладка
Чтобы проверить, отправляются ли письма, можно использовать следующий простой код:
function wpma_test_mail() {
$to = 'your-email@example.com';
$subject = 'Тестовая отправка письма';
$message = 'Если вы получили это письмо, отправка работает.';
$headers = ['Content-Type: text/html; charset=UTF-8'];
if(wp_mail($to, $subject, $message, $headers)) {
echo 'Письмо успешно отправлено.';
} else {
echo 'Ошибка отправки письма.';
}
}
add_action('admin_notices', 'wpma_test_mail');
Добавьте этот код в functions.php, зайдите в админку и посмотрите сообщение. Если письмо не приходит, значит проблема с отправкой.
Кроме того, полезно активировать логирование отправки почты. Для этого в wp-config.php добавьте:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
И используйте плагин WPRemark для записи логов почты, чтобы видеть ошибки отправки.
Настройка SPF, DKIM и DMARC для улучшения доставки писем
Даже при правильно настроенном SMTP письма могут попадать в спам, если домен не имеет корректных DNS-записей:
- SPF — указывает, какие серверы имеют право отправлять почту от имени вашего домена;
- DKIM — добавляет цифровую подпись к письмам для подтверждения подлинности;
- DMARC — политика обработки писем, не прошедших SPF или DKIM.
Чтобы настроить эти записи, зайдите в панель управления доменом и добавьте TXT-записи, которые предоставляет ваш почтовый сервис (например, Google Workspace, Yandex 360, Mail.ru).
Без этих записей ваши письма чаще будут попадать в папку «спам» или вовсе не доходить.
Использование альтернативных решений для отправки почты
Если SMTP не подходит или вызывает сложности, можно использовать API популярных почтовых сервисов, например:
- SendGrid;
- Mailgun;
- Amazon SES.
Для интеграции через API можно воспользоваться плагинами или написать собственный код. Пример отправки через SendGrid API:
function wpma_send_mail_sendgrid($to, $subject, $content) {
$apiKey = 'SENDGRID_API_KEY';
$url = 'https://api.sendgrid.com/v3/mail/send';
$email = [
'personalizations' => [[
'to' => [[ 'email' => $to ]]
]],
'from' => ['email' => 'your-email@example.com'],
'subject' => $subject,
'content' => [[
'type' => 'text/plain',
'value' => $content
]]
];
$args = [
'body' => json_encode($email),
'headers' => [
'Authorization' => 'Bearer ' . $apiKey,
'Content-Type' => 'application/json'
],
'method' => 'POST',
'data_format' => 'body',
];
$response = wp_remote_post($url, $args);
if (is_wp_error($response)) {
return false;
}
return wp_remote_retrieve_response_code($response) == 202;
}
Такой способ более надёжен и часто используется на профессиональных сайтах.
Дополнительные советы по улучшению отправки писем в WordPress
- Регулярно проверяйте логи почты и ошибки сервера;
- Используйте отдельный почтовый ящик для отправки системных писем;
- Настройте обратный адрес (Return-Path) в SMTP, чтобы уменьшить вероятность попадания в спам;
- Очищайте очереди писем и не отправляйте слишком много писем подряд;
- Используйте плагины, такие как WPRemark, для мониторинга и логирования почты.