В WordPress по умолчанию для отправки писем используется функция wp_mail(), которая в свою очередь часто применяет метод PHP mail. Однако PHP mail не всегда надежен и может приводить к проблемам с доставкой писем, попаданием в спам или отказам у некоторых хостеров. В этой статье разберем, как отключить отправку писем через PHP mail, настроить SMTP-сервер для отправки почты и рассмотрим практические примеры с кодом и плагинами.
Почему стоит отключить PHP mail в WordPress
Метод PHP mail использует локальный почтовый сервер на вашем хостинге для отправки писем. Часто он плохо настраивается, почта может не доходить до получателя или попадать в спам. Кроме того, многие почтовые сервисы проверяют SPF, DKIM и DMARC записи, и письма с PHP mail часто не соответствуют требованиям, что снижает репутацию домена.
Использование SMTP для отправки почты позволяет:
- Использовать внешние почтовые сервисы (Gmail, Mail.ru, Яндекс, специализированные SMTP-провайдеры)
- Улучшить доставляемость писем
- Добавить аутентификацию отправителя
- Упростить диагностику проблем с почтой
Поэтому отключение PHP mail и настройка SMTP — важный этап для качественной работы сайта с почтой.
Настройка SMTP через популярные плагины
Для большинства пользователей проще всего использовать специализированные плагины для SMTP. Вот несколько популярных и проверенных решений:
1. WP Mail SMTP
Один из самых популярных плагинов для настройки SMTP в WordPress. Позволяет подключать SMTP-серверы Gmail, Outlook, Mail.ru, Яндекс и другие. Поддерживает OAuth 2.0 для Gmail, что повышает безопасность.
Преимущества:
- Простой мастер настройки
- Отправка тестового письма
- Логирование отправленных писем (в PRO версии)
Установка и настройка:
- Установите и активируйте плагин с официального репозитория WordPress.
- Перейдите в «Настройки» > «WP Mail SMTP».
- Выберите SMTP-сервер, например Gmail.
- Заполните настройки SMTP: сервер, порт, шифрование, логин и пароль.
- Сохраните настройки и отправьте тестовое письмо.
2. Post SMTP Mailer/Email Log
Этот плагин умеет автоматически переключаться между SMTP и API почтовых сервисов. Также ведет подробный лог отправленных писем, что помогает отследить проблемы.
Поддерживает множество сервисов, включая SendGrid, Gmail, Microsoft 365 и другие.
Отключение PHP mail в WordPress программно
Если нужна кастомная интеграция и вы хотите полностью контролировать процесс, можно перехватить вызовы wp_mail() и реализовать отправку через SMTP с помощью PHPMailer.
Пример функции, которая заменяет стандартный метод отправки:
function wpmark_wp_mail_smtp( $args ) {
// Создаем новый экземпляр PHPMailer
$mail = new PHPMailer(true);
try {
// Настройки SMTP
$mail->isSMTP();
$mail->Host = 'smtp.example.com'; // SMTP сервер
$mail->SMTPAuth = true;
$mail->Username = 'user@example.com';
$mail->Password = 'password';
$mail->SMTPSecure = 'tls';
$mail->Port = 587;
// От кого
$mail->setFrom('user@example.com', 'WPMark');
// Кому
foreach ( (array) $args['to'] as $recipient ) {
$mail->addAddress($recipient);
}
// Тема и тело письма
$mail->Subject = $args['subject'];
$mail->Body = $args['message'];
$mail->isHTML(true);
// Отправляем
$mail->send();
return true;
} catch (Exception $e) {
error_log('WPMark SMTP error: ' . $mail->ErrorInfo);
return false;
}
}
add_filter('wp_mail', 'wpmark_wp_mail_smtp');Обратите внимание, что в современном WordPress лучше использовать фильтр wp_mail или хук phpmailer_init для настройки SMTP. В данном случае можно использовать phpmailer_init для изменения настроек PHPMailer.
Пример использования хука phpmailer_init для настройки SMTP
Лучший способ отключить PHP mail и настроить SMTP — модифицировать объект PHPMailer через хук phpmailer_init:
function wpmark_phpmailer_smtp( $phpmailer ) {
$phpmailer->isSMTP();
$phpmailer->Host = 'smtp.example.com';
$phpmailer->SMTPAuth = true;
$phpmailer->Port = 587;
$phpmailer->Username = 'user@example.com';
$phpmailer->Password = 'password';
$phpmailer->SMTPSecure = 'tls';
$phpmailer->From = 'user@example.com';
$phpmailer->FromName = 'WPMark';
}
add_action( 'phpmailer_init', 'wpmark_phpmailer_smtp' );Этот код вставьте в файл functions.php вашей темы или в отдельный плагин. После этого все письма WordPress будут уходить через указанный SMTP-сервер.
Проверка и отладка отправки почты
После настройки SMTP важно проверить, что почта действительно отправляется и доставляется:
- Отправьте тестовое письмо через плагин WP Mail SMTP или вручную вызвав
wp_mail(). - Проверьте папку «Спам» у получателя.
- Проверьте логи почтового сервера и ошибки PHP.
- Используйте сервисы проверки SPF, DKIM и DMARC для вашего домена.
Если письма не доходят, попробуйте временно включить логирование ошибок в WordPress и логи почтового сервера.
Использование плагина Clearfy Pro для оптимизации отправки почты
Плагин Clearfy Pro имеет встроенные инструменты оптимизации и настройки почты. В нем вы можете отключить стандартный PHP mail, включить SMTP с удобным интерфейсом и получить дополнительную защиту от спама.
Clearfy Pro подходит для тех, кто хочет комплексно улучшить работу сайта, включая почтовую систему.
Выводы и рекомендации
Если вы столкнулись с проблемами доставки писем на WordPress, первое, что нужно сделать — отказаться от PHP mail и настроить SMTP. Для этого есть множество удобных плагинов, а при необходимости можно реализовать собственное решение через хук phpmailer_init.
Не забывайте тестировать отправку, проверять правильность настроек SPF/DKIM и использовать надежные SMTP-сервисы.