Отправка писем в WordPress — одна из ключевых функций для уведомлений, восстановления пароля, подтверждений заказов и других важных процессов. Но часто она работает нестабильно или вовсе не работает. В этой статье разберём, как диагностировать и исправлять проблемы с отправкой писем в WordPress, используя плагины и собственный код.
Почему письма из WordPress не доходят: основные причины
Часто бывает, что вы нажимаете «Отправить», а пользователь не получает письмо. Основные причины:
- Почтовый сервер хостинга блокирует отправку писем через функцию
wp_mail()или PHPmail(). - Письма попадают в спам из-за отсутствия SPF, DKIM, DMARC записей или плохой репутации IP.
- Конфликты с плагинами безопасности или кэширования.
- Неверные настройки SMTP или почтового сервиса.
Чтобы понять источник проблемы, нужно детально протестировать отправку и логи.
Диагностика проблем с отправкой писем в WordPress
Использование плагина WP Mail Logging для отслеживания писем
Плагин WP Mail Logging позволяет сохранять логи всех отправленных писем в базе данных. Это помогает понять, уходит ли письмо из WordPress и какие ошибки возникают.
Установите и активируйте плагин, затем перейдите в Инструменты > Логи почты. Если письма отображаются как отправленные, но не доходят, проблема на стороне почтового сервера или получателя.
Проверка отправки писем через SMTP
Стандартная функция wp_mail() использует PHP mail(), который часто блокируется хостингом. Чтобы обойти это, рекомендуется настроить SMTP-сервер.
Для настройки SMTP удобно использовать плагин WP Mail SMTP. Он позволяет указать параметры почтового сервера, например, Gmail, Mailgun, SMTP вашего хостинга.
Пример настройки SMTP через код в functions.php темы или плагина:
add_action('phpmailer_init', 'wpmail_phpmailer_config');
function wpmail_phpmailer_config($phpmailer) {
$phpmailer->isSMTP();
$phpmailer->Host = 'smtp.yourserver.com';
$phpmailer->SMTPAuth = true;
$phpmailer->Port = 587;
$phpmailer->Username = 'your-email@example.com';
$phpmailer->Password = 'your-password';
$phpmailer->SMTPSecure = 'tls';
$phpmailer->From = 'your-email@example.com';
$phpmailer->FromName = 'Your Site Name';
}Этот код заменит стандартную отправку на SMTP. После настройки повторите отправку тестового письма.
Отладка и исправление ошибок в отправке писем
Как поймать ошибки отправки в коде
Для дополнительной отладки можно использовать фильтр wp_mail_failed, который срабатывает при ошибках отправки:
add_action('wp_mail_failed', 'wpmail_wp_mail_failed_action', 10, 1);
function wpmail_wp_mail_failed_action($wp_error) {
error_log('Ошибка отправки письма: ' . print_r($wp_error, true));
}Лог ошибок вы увидите в error_log сервера. Это поможет понять, в чём проблема.
Проверка и исправление SPF, DKIM и DMARC записей
Если письма уходят, но попадают в спам, проверьте почтовые DNS-записи SPF, DKIM и DMARC у вашего домена. Они подтверждают легитимность отправителя.
Для проверки используйте онлайн-сервисы, например, MXToolbox SPF Check или DKIM Inspector. Если записи отсутствуют, создайте их у регистратора домена или в панели хостинга.
Использование внешних почтовых сервисов для надежной отправки
Для стабильной доставки лучше не полагаться на хостинг, а использовать специализированные сервисы:
- Mailgun — мощный сервис с API и SMTP. Для WordPress есть плагин Mailgun for WordPress.
- SendGrid — популярный сервис с бесплатным тарифом и плагином.
- Postmark — ориентирован на транзакционные письма с высокой доставляемостью.
Настройка происходит через API-ключи и SMTP. Эти сервисы позволяют отслеживать статистику и ошибки.
Практические примеры кода для проверки и отправки писем
Тестовая функция отправки письма с проверкой результата
function wpmail_send_test_email($to) {
$subject = 'Тестовое письмо с сайта';
$message = 'Если вы получили это письмо, значит отправка работает.';
$headers = array('Content-Type: text/html; charset=UTF-8');
$mail_sent = wp_mail($to, $subject, $message, $headers);
if (!$mail_sent) {
error_log('Ошибка: письмо не отправлено на ' . $to);
return false;
}
return true;
}Вызовите wpmail_send_test_email('your-email@example.com'); для проверки.
Автоматическая смена отправителя письма для повышения доверия
Иногда хостинг запрещает отправку с email, отличного от домена. Чтобы избежать проблем, можно программно задать From:
add_filter('wp_mail_from', 'wpmail_custom_mail_from');
function wpmail_custom_mail_from($original_email_address) {
return 'no-reply@' . $_SERVER['SERVER_NAME'];
}
add_filter('wp_mail_from_name', 'wpmail_custom_mail_from_name');
function wpmail_custom_mail_from_name($original_email_from) {
return get_bloginfo('name');
}Это повысит вероятность прохождения почты.
Рекомендации по плагинам для улучшения работы с почтой в WordPress
Кроме упомянутого WP Mail SMTP и Mailgun, обратите внимание на:
- Clearfy Pro — оптимизирует WordPress, включая параметры почты и безопасность.
- Expert Review — для сбора отзывов с уведомлениями по почте, с гибкой настройкой отправки.
- WPRemark — расширенный контроль комментариев и уведомлений.
Использование таких инструментов помогает снизить вероятность проблем с почтой.
Итог: последовательный подход к решению проблем с почтой
Для эффективной работы почты в WordPress важно:
- Проверить, уходит ли письмо из WordPress с помощью логирования.
- Настроить SMTP или интеграцию с внешними почтовыми сервисами.
- Контролировать DNS-записи SPF, DKIM, DMARC.
- Отлавливать ошибки отправки через хуки и логи.
- Использовать проверенные плагины для управления почтой.
Такой подход гарантирует, что ваши письма будут доходить пользователям и система уведомлений будет работать стабильно.