WordPress из коробки использует библиотеку PHPMailer для отправки электронных писем, но часто стандартных функций недостаточно. В этой статье рассмотрим, как правильно работать с PHPMailer в WordPress, чтобы расширить возможности отправки почты, решить проблемы с доставкой и интегрировать кастомные настройки.
Что такое PHPMailer и как он работает в WordPress
PHPMailer — это мощная PHP-библиотека для отправки писем через SMTP, с поддержкой HTML, вложений и аутентификации. В WordPress этот класс встроен и вызывается функцией wp_mail(). Однако, если нужно добавить нестандартные заголовки, вложения или изменить настройки SMTP, стоит использовать PHPMailer напрямую через хук phpmailer_init.
Это позволяет изменять параметры перед отправкой письма, например, задать SMTP-сервер или изменить формат письма.
Почему стандартный wp_mail не всегда подходит
Стандартная функция wp_mail() удобна, но не всегда гибка. Например, если нужно отправлять письма через внешний SMTP-сервер с авторизацией, добавить вложения или использовать кастомные заголовки, без прямой работы с PHPMailer не обойтись.
Также в некоторых случаях стандартные письма попадают в спам из-за неправильных заголовков или отсутствия аутентификации SMTP.
Использование хука phpmailer_init для настройки PHPMailer в WordPress
В WordPress есть хук phpmailer_init, который позволяет получить объект PHPMailer перед отправкой письма и изменить его свойства. Рассмотрим, как его использовать.
Добавьте следующий код в файл functions.php вашей темы или в свой плагин:
add_action('phpmailer_init', 'wphost_phpmailer_init_custom_smtp');
function wphost_phpmailer_init_custom_smtp(\PHPMailer\PHPMailer $phpmailer) {
$phpmailer->isSMTP();
$phpmailer->Host = 'smtp.example.com'; // SMTP сервер
$phpmailer->SMTPAuth = true;
$phpmailer->Port = 587;
$phpmailer->Username = 'user@example.com';
$phpmailer->Password = 'password';
$phpmailer->SMTPSecure = 'tls'; // ssl или tls
$phpmailer->From = 'no-reply@example.com';
$phpmailer->FromName = 'Your Site';
}Так вы настроите отправку через внешний SMTP-сервер с авторизацией. Это решит проблему с попаданием писем в спам и повысит надежность доставки.
Параметры PHPMailer, которые стоит знать
isSMTP()— переключает PHPMailer на SMTP-отправку;Host— адрес SMTP-сервера;SMTPAuth— необходимость авторизации;Port— порт SMTP-сервера;UsernameиPassword— данные для входа;SMTPSecure— тип шифрования (ssl или tls);FromиFromName— адрес и имя отправителя;addAttachment()— добавление вложений;isHTML()— отправка письма в HTML-формате.
Пример отправки письма с вложением и HTML через PHPMailer
Иногда нужно отправить письмо с вложением или в формате HTML. Рассмотрим, как сделать это через wp_mail() и хук phpmailer_init.
Допустим, у нас есть функция, которая отправляет письмо с вложением:
function wphost_send_custom_email() {
$to = 'recipient@example.com';
$subject = 'Тестовое письмо с вложением';
$message = '<h1>Привет!</h1><p>Это тестовое письмо.</p>';
$headers = ['Content-Type: text/html; charset=UTF-8'];
$attachments = [WP_CONTENT_DIR . '/uploads/test.pdf'];
wp_mail($to, $subject, $message, $headers, $attachments);
}Чтобы вложение корректно отправилось, и письмо было в HTML, необходимо в phpmailer_init дополнительно вызвать isHTML(true) и добавить вложение:
add_action('phpmailer_init', 'wphost_phpmailer_add_attachment_and_html');
function wphost_phpmailer_add_attachment_and_html($phpmailer) {
$phpmailer->isHTML(true);
// Вложение можно добавить здесь, если нужно динамически
// $phpmailer->addAttachment(WP_CONTENT_DIR . '/uploads/test.pdf');
}В большинстве случаев достаточно передать вложения в wp_mail(), но если нужна дополнительная обработка, используйте этот хук.
Решение распространенных проблем с отправкой писем через PHPMailer в WordPress
Письма не отправляются или попадают в спам
Самая частая проблема — это неправильная настройка SMTP или отсутствие аутентификации. Чтобы исправить, используйте хук phpmailer_init, как показано выше, и настройте SMTP-сервер с поддержкой шифрования.
Также проверьте, что DNS-записи SPF, DKIM и DMARC настроены правильно для вашего домена — это помогает почтовым сервисам доверять вашим письмам.
Отправка писем с кастомными заголовками
Иногда нужно добавить заголовки, например, Reply-To или CC. В wp_mail() это делается через параметр $headers. Пример:
$headers = [
'From: Your Site <no-reply@example.com>',
'Reply-To: support@example.com',
'Cc: manager@example.com'
];
wp_mail($to, $subject, $message, $headers);Если нужно добавить заголовки динамически через PHPMailer, используйте метод addCustomHeader() внутри хука phpmailer_init.
Полезные плагины для работы с почтой и PHPMailer в WordPress
Для упрощения настройки SMTP и улучшения отправки писем можно использовать готовые плагины:
- WP Mail SMTP — позволяет настроить SMTP-сервер с удобным интерфейсом и поддержкой различных почтовых сервисов;
- Post SMTP Mailer/Email Log — расширенный SMTP-клиент с логированием писем и поддержкой OAuth;
- Easy WP SMTP — простой в использовании плагин для настройки SMTP;
- Clearfy Pro — оптимизация и улучшение работы WordPress, в том числе с почтой.
Эти плагины помогают избежать проблем с доставкой и расширяют функционал стандартной отправки писем.
Заключение по использованию PHPMailer в WordPress
Работа с PHPMailer через хук phpmailer_init даёт полный контроль над отправкой почты в WordPress. Вы сможете настроить SMTP, добавлять вложения, изменять заголовки и формат писем, что значительно расширит возможности стандартной функции wp_mail().
Рекомендуется использовать готовые SMTP-плагины для простой настройки и более надёжной доставки писем, а кастомные доработки делать через phpmailer_init для специфических задач.
Если хотите попробовать готовые решения, посмотрите, например, Clearfy Pro для оптимизации и улучшения работы WordPress.