Автоматизация отправки email в WordPress – частая задача при разработке плагинов, тем и решений для сайта. Встроенные функции wp_mail() и класс PHPMailer позволяют гибко настроить процесс отправки сообщений. В этой статье разберём, как с помощью хуков и PHPMailer организовать автоматическую отправку писем, учитывая разные сценарии и обеспечивая надежность доставки.
Почему важно использовать хуки для отправки email в WordPress
Хуки (actions и filters) в WordPress – мощный инструмент для внедрения дополнительной логики без правки ядра. Использование хуков для отправки email позволяет:
- Автоматически запускать отправку при определённых событиях — например, после публикации записи или регистрации пользователя.
- Модифицировать содержимое письма через фильтры без изменения основного кода.
- Интегрировать отправку в цепочки действий, например, логирование или уведомление админов.
Рассмотрим на примере, как с помощью action-хука wp_insert_post отправлять email при публикации новой записи.
Пример: Отправка письма при публикации новой записи
add_action('wp_insert_post', 'wpbloger_send_email_on_publish', 10, 3);
function wpbloger_send_email_on_publish($post_ID, $post, $update) {
// Проверяем, что запись опубликована впервые
if ($post->post_status !== 'publish' || $update) {
return;
}
$to = 'admin@example.com';
$subject = 'Новая публикация на сайте';
$message = 'Опубликована новая запись: ' . $post->post_title . '\nСсылка: ' . get_permalink($post_ID);
wp_mail($to, $subject, $message);
}В этом примере при публикации новой записи на почту admin@example.com отправляется уведомление с заголовком и ссылкой.
Использование PHPMailer для расширенной настройки отправки email
WordPress использует класс PHPMailer для отправки писем через wp_mail(). С помощью фильтра phpmailer_init можно изменить настройки PHPMailer, например, настроить SMTP-сервер, добавить вложения или изменить заголовки.
Вот пример настройки SMTP через phpmailer_init:
add_action('phpmailer_init', 'wpbloger_configure_smtp');
function wpbloger_configure_smtp(PHPMailer $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 = 'noreply@example.com';
$phpmailer->FromName = 'WPBloger';
}Это позволит отправлять почту через ваш SMTP, что повысит вероятность доставки и уменьшит попадание писем в спам.
Автоматическая отправка email по расписанию с WP-Cron
Для регулярной отправки писем, например, рассылки новостей или напоминаний, удобно использовать WP-Cron. Ниже пример задачи, которая каждый день отправляет отчет администратору.
add_action('wpbloger_daily_email_event', 'wpbloger_send_daily_report');
function wpbloger_send_daily_report() {
$to = get_option('admin_email');
$subject = 'Ежедневный отчет';
$message = 'Это ваш ежедневный отчет с сайта.';
wp_mail($to, $subject, $message);
}
// Регистрация события при активации темы или плагина
if (!wp_next_scheduled('wpbloger_daily_email_event')) {
wp_schedule_event(time(), 'daily', 'wpbloger_daily_email_event');
}
// Отмена cron при деактивации
register_deactivation_hook(__FILE__, function() {
wp_clear_scheduled_hook('wpbloger_daily_email_event');
});С помощью этого решения вы сможете организовать регулярные рассылки без сторонних плагинов.
Советы по надежной отправке email в WordPress
Выбор метода отправки
По умолчанию wp_mail() использует функцию PHP mail(). Это просто, но часто письма не доходят. Настройка SMTP через PHPMailer решает проблему и позволяет использовать авторизацию и шифрование.
Обработка ошибок отправки
Для отладки полезно проверять результат wp_mail() и логировать ошибки. Например:
$sent = wp_mail($to, $subject, $message);
if (!$sent) {
error_log('Ошибка отправки письма на ' . $to);
}Защита от спама и нагрузок
При автоматической отправке важно ограничивать частоту писем, использовать nonce и проверять права пользователей, чтобы злоумышленники не использовали ваш сайт для рассылки спама.
Заключение
Автоматизация email в WordPress с помощью хуков и PHPMailer – эффективный способ реализовать уведомления, рассылки и интеграции. Используйте action-хуки для запуска отправки, фильтр phpmailer_init для настройки SMTP и WP-Cron для регулярных задач. Это даст вам гибкий и надежный инструмент для работы с почтой на сайте.
Для расширенных возможностей рекомендуем также познакомиться с плагином Clearfy Pro, который среди прочего оптимизирует работу с почтой и безопасностью WordPress.