Управление отправкой почты в WordPress — это не только настройка SMTP или API, но и мониторинг успешности доставки писем. Особенно важно для сайтов с рассылками, уведомлениями и магазинов, чтобы отслеживать, какие письма дошли до получателей, а какие потерялись. В этой статье рассмотрим, как создать отчет о доставке email в WordPress с помощью кода и готовых решений.
Зачем нужен отчет о доставке email в WordPress
Отчет о доставке помогает понять эффективность рассылок и уведомлений. Вы узнаете, сколько писем отправлено, сколько доставлено, сколько отклонено и сколько находятся в очереди. Это позволяет вовремя реагировать на проблемы с почтовым сервером, блокировками или ошибками в письмах.
Кроме того, наличие такой статистики улучшает доверие к вашему сайту, так как вы можете гарантировать, что важные сообщения доходят до пользователей.
Для этого нужно вести логи отправленных писем, анализировать их статус, создавать удобные отчеты и, при необходимости, уведомлять администратора.
Как реализовать сбор данных о доставке email с помощью плагинов
Плагины для логирования и мониторинга email в WordPress
Существует несколько плагинов, которые помогут отслеживать отправку писем:
- WP Mail Logging — простой и эффективный плагин, который сохраняет все письма, отправленные WordPress, с подробностями: тема, получатель, статус.
- Post SMTP Mailer/Email Log — расширенный плагин с поддержкой SMTP, логированием писем и возможностью тестирования отправки.
- Easy WP SMTP — помимо настройки SMTP, содержит лог отправленных писем.
Для сайта Post SMTP будет хорошим выбором, так как он сочетает в себе удобство настройки и детальное логирование.
Настройка и использование WP Mail Logging
Установите и активируйте плагин, после чего в админке появится раздел «Email Log». Здесь вы увидите список всех отправленных писем с датой, временем, темой и статусом.
Плагин не отслеживает доставку по протоколу SMTP, но фиксирует факт отправки письма из WordPress. Для проверки реальной доставки можно использовать SMTP-провайдеры с API.
Реализация пользовательского логирования и отчета с помощью кода
Добавление записи в базу при отправке письма
WordPress использует функцию wp_mail() для отправки писем. Мы можем перехватить вызов и записать данные о письме в отдельную таблицу базы данных.
Пример создания таблицы и функции записи:
function wpmail_create_email_log_table() {
global $wpdb;
$table_name = $wpdb->prefix . 'wpmail_email_log';
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE IF NOT EXISTS $table_name (
id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
recipient VARCHAR(255) NOT NULL,
subject VARCHAR(255) NOT NULL,
headers TEXT NULL,
message TEXT NOT NULL,
status VARCHAR(50) DEFAULT 'pending',
sent_at DATETIME NULL,
PRIMARY KEY (id)
) $charset_collate;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
}
register_activation_hook(__FILE__, 'wpmail_create_email_log_table');Далее — перехват отправки письма и запись в таблицу:
function wpmail_log_email($to, $subject, $message, $headers, $attachments) {
global $wpdb;
$table_name = $wpdb->prefix . 'wpmail_email_log';
$wpdb->insert(
$table_name,
[
'recipient' => is_array($to) ? implode(',', $to) : $to,
'subject' => $subject,
'headers' => maybe_serialize($headers),
'message' => $message,
'status' => 'pending',
'sent_at' => current_time('mysql')
]
);
return true;
}
function wpmail_wp_mail_filter($args) {
wpmail_log_email($args['to'], $args['subject'], $args['message'], $args['headers'], $args['attachments']);
return $args;
}
add_filter('wp_mail', 'wpmail_wp_mail_filter');Этот код сохраняет письмо с пометкой pending. Статус можно обновлять после подтверждения успешной отправки через SMTP API или webhook.
Обновление статуса доставки через SMTP API
Если вы используете SMTP сервис с API (например, Mailgun, SendGrid), можно настроить webhook, который будет обновлять статус в таблице.
Пример обработчика webhook, который обновит статус письма по ID (нужно сохранять ID письма, возвращаемый сервисом):
function wpmail_update_email_status($email_id, $status) {
global $wpdb;
$table_name = $wpdb->prefix . 'wpmail_email_log';
$wpdb->update(
$table_name,
['status' => $status],
['id' => $email_id]
);
}<Настройка webhook зависит от конкретного SMTP-провайдера, но идея в том, что вы получаете callback с данными о доставке, и обновляете запись.
Вывод отчета о доставке email в админке WordPress
Для удобства можно создать собственную страницу в меню админки, где будут выводиться данные из таблицы wpmail_email_log.
Пример создания страницы и вывода таблицы:
function wpmail_add_admin_page() {
add_menu_page('Отчет о доставке email', 'Email Отчет', 'manage_options', 'wpmail-email-report', 'wpmail_email_report_page');
}
add_action('admin_menu', 'wpmail_add_admin_page');
function wpmail_email_report_page() {
global $wpdb;
$table_name = $wpdb->prefix . 'wpmail_email_log';
$emails = $wpdb->get_results("SELECT * FROM $table_name ORDER BY sent_at DESC LIMIT 100");
?>
<div class="wrap">
<h1>Отчет о доставке email</h1>
<table class="widefat fixed" cellspacing="0">
<thead>
<tr>
<th>ID</th>
<th>Получатель</th>
<th>Тема</th>
<th>Статус</th>
<th>Время отправки</th>
</tr>
</thead>
<tbody>
<?php foreach ($emails as $email) : ?>
<tr>
<td><?php echo esc_html($email->id); ?></td>
<td><?php echo esc_html($email->recipient); ?></td>
<td><?php echo esc_html($email->subject); ?></td>
<td><?php echo esc_html($email->status); ?></td>
<td><?php echo esc_html($email->sent_at); ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<?php
}Так вы получите простой и понятный интерфейс для контроля писем напрямую из WordPress.
Советы по улучшению и расширению отчета
Для повышения качества отчета можно добавить:
- Фильтры по статусу (доставлено, отклонено, в очереди)
- Поиск по теме и получателю
- Графики и статистику — количество отправленных и доставленных писем по дням
- Интеграцию с плагинами рассылок и WooCommerce для отслеживания заказных писем
Для отображения графиков можно использовать библиотеки JavaScript, например Chart.js.
Заключение
Создание собственного отчета о доставке email в WordPress — задача вполне решаемая и очень полезная для контроля коммуникации с пользователями. Используйте готовые плагины для базового логирования, а при необходимости дополняйте их своей реализацией с учетом специфики сайта и почтового сервиса.
Подробнее о продвинутых плагинах для работы с почтой можно узнать на WPSHOP.