Отправка писем в WordPress — одна из ключевых функций для работы с регистрациями, восстановлением паролей, уведомлениями и формами обратной связи. Однако часто пользователи сталкиваются с проблемой, что письма не доходят или попадают в спам. В этой статье разберём, как отладить и решить проблемы с отправкой писем в WordPress на примерах кода и полезных плагинов.
Почему письма не доходят: основные причины
Первым делом нужно понять, почему письма не отправляются или не доходят. Частые причины:
- Сервер хостинга блокирует отправку почты через стандартную функцию
wp_mail(), так как она использует PHP mail(), который часто попадает под ограничения. - Писем много, и почтовый сервер воспринимает их как спам.
- Неправильная конфигурация SMTP-сервера.
- Отсутствие SPF, DKIM и DMARC записей в DNS домена, что снижает доверие почтовых сервисов к письмам.
- Проблемы с плагинами, которые перехватывают функции почты или конфликтуют с ними.
Чтобы эффективно отладить проблему, нужно проверить каждый из этих пунктов.
Отладка отправки писем с помощью логирования
Самый простой способ — включить логирование всех попыток отправки почты и ошибок. Для этого можно использовать плагин WP Mail Logging. Он сохраняет в базе данные о всех исходящих письмах, что позволяет понять, отправляется ли письмо вообще.
Если вы хотите сделать логирование самостоятельно, можно добавить фильтр для перехвата функций wp_mail() и записывать ошибки:
add_action('phpmailer_init', 'wpone_phpmailer_config');
function wpone_phpmailer_config($phpmailer) {
$phpmailer->SMTPDebug = 2; // Включаем детальный вывод отладки
$phpmailer->Debugoutput = function($str, $level) {
error_log("PHP Mailer debug level $level; message: $str");
};
}Это позволит отследить, что именно происходит на уровне SMTP.
Использование SMTP для надежной отправки писем
По умолчанию WordPress использует функцию wp_mail(), которая опирается на mail() PHP. Но часто этот метод блокируется хостингом или письма попадают в спам. Лучшее решение — настроить SMTP-сервер для отправки писем.
Для этого рекомендуются плагины:
- WP Mail SMTP — самый популярный плагин для настройки SMTP. Поддерживает разные сервисы: Gmail, SendGrid, Mailgun, SMTP любого провайдера.
- Post SMTP — альтернатива с расширенными возможностями отладки и логирования.
Пример настройки SMTP в коде без плагина:
add_action('phpmailer_init', 'wpone_set_smtp');
function wpone_set_smtp($phpmailer) {
$phpmailer->isSMTP();
$phpmailer->Host = 'smtp.example.com';
$phpmailer->SMTPAuth = true;
$phpmailer->Port = 587;
$phpmailer->Username = 'your_username';
$phpmailer->Password = 'your_password';
$phpmailer->SMTPSecure = 'tls';
$phpmailer->From = 'no-reply@example.com';
$phpmailer->FromName = 'Ваш сайт';
}После такой настройки письма будут отправляться через SMTP-сервер, что значительно повышает доставляемость.
Настройка SPF, DKIM и DMARC для повышения доверия к письмам
Даже если письма успешно отправляются, без правильных DNS-записей они могут попадать в спам. Необходимо настроить записи SPF, DKIM и DMARC у вашего регистратора домена или в панели управления DNS.
SPF — указывает, какие серверы имеют право отправлять почту от имени вашего домена.
DKIM — добавляет цифровую подпись к письмам, подтверждающую их подлинность.
DMARC — политика обработки писем, не прошедших SPF и DKIM.
Для настройки можно воспользоваться инструкциями вашего почтового провайдера или сервисов SMTP. Например, для SendGrid и Mailgun они предоставляют готовые DNS-записи.
Диагностика и исправление конфликтов с плагинами
Иногда проблема с почтой вызвана конфликтом плагинов, которые переопределяют функцию wp_mail(). Чтобы проверить это, временно отключите все плагины, кроме SMTP и попробуйте отправить тестовое письмо.
Также полезен плагин Health Check & Troubleshooting, который позволяет запускать сайт с отключенными плагинами только для текущего пользователя, не влияя на посетителей.
Если при отключении плагинов почта начала работать, включайте их по одному, чтобы выявить виновника.
Практический пример: отправка письма с пользовательскими заголовками
Иногда почтовые серверы требуют указывать дополнительные заголовки, например, для корректного отображения имени отправителя или Reply-To. Вот пример функции отправки письма с такими заголовками:
function wpone_send_custom_mail($to, $subject, $message) {
$headers = array();
$headers[] = 'Content-Type: text/html; charset=UTF-8';
$headers[] = 'From: Ваш сайт <no-reply@example.com>';
$headers[] = 'Reply-To: support@example.com';
wp_mail($to, $subject, $message, $headers);
}Используйте эту функцию для отправки писем с более точными настройками. Это поможет избежать проблем с кодировкой и неправильным отображением отправителя.
Резюме: лучшие практики для надежной отправки почты в WordPress
Подведем краткие итоги:
- Включайте логирование отправки писем, чтобы видеть ошибки.
- Используйте SMTP-серверы с плагинами WP Mail SMTP или Post SMTP.
- Настройте SPF, DKIM и DMARC для домена.
- Проверяйте конфликты с другими плагинами.
- Добавляйте пользовательские заголовки при необходимости.
Если вы хотите упростить себе работу с настройками и оптимизацией WordPress, обратите внимание на Clearfy Pro — плагин для оптимизации и управления многими аспектами сайта, включая почту.