Функционал WordPress предоставляет хук wp_mail_succeeded
, который запускается после успешной отправки письма через функцию wp_mail()
, используя библиотеку PHPMailer. Этот хук позволяет выполнять действия после отправки, такие как ведение лога отправленных писем или выполнение дополнительных операций при успешной отправке сообщений.
do_action( 'wp_mail_succeeded', array $mail_data );
Хук wp_mail_succeeded
срабатывает, когда PHPMailer завершает процесс отправки без ошибок. Однако успешная отправка не гарантирует, что письмо было доставлено получателю. Хук указывает лишь на то, что метод PHPMailer::send()
обработал запрос корректно.
Параметры
- $mail_data (array): Массив с данными отправленного письма, включающий следующие ключи:
to
(string[]): Адреса получателей.subject
(string): Тема письма.message
(string): Содержимое письма.headers
(string[]): Дополнительные заголовки.attachments
(string[]): Пути к файлам-вложениям.
Пример 1: Запись данных отправленного письма в лог
Этот пример записывает данные всех успешно отправленных писем в файл лога, что может быть полезно для отслеживания отправленных сообщений:
function log_successful_mail( $mail_data ) {
$log = "Email sent successfully:\n";
$log .= "To: " . implode( ', ', $mail_data['to'] ) . "\n";
$log .= "Subject: " . $mail_data['subject'] . "\n";
$log .= "Message: " . $mail_data['message'] . "\n\n";
// Добавляем запись в лог
file_put_contents( WP_CONTENT_DIR . '/email_log.txt', $log, FILE_APPEND );
}
add_action( 'wp_mail_succeeded', 'log_successful_mail' );
Здесь информация о каждом отправленном письме добавляется в файл email_log.txt
в папке wp-content
.
Пример 2: Уведомление администратора при отправке письма
В этом примере после отправки письма функция отправляет уведомление администратору о том, что письмо было успешно отправлено:
function notify_admin_on_mail_success( $mail_data ) {
$admin_email = get_option( 'admin_email' );
$subject = "Письмо успешно отправлено";
$message = "Письмо на тему '{$mail_data['subject']}' успешно отправлено на адрес: " . implode( ', ', $mail_data['to'] );
wp_mail( $admin_email, $subject, $message );
}
add_action( 'wp_mail_succeeded', 'notify_admin_on_mail_success' );
Таким образом, администратор будет получать уведомление каждый раз, когда письмо успешно отправлено, что полезно для контроля отправки.
Пример 3: Сохранение информации о вложениях
Если требуется сохранить пути к файлам, прикрепленным к отправленному письму, можно использовать следующий код:
function log_attachments( $mail_data ) {
if ( ! empty( $mail_data['attachments'] ) ) {
foreach ( $mail_data['attachments'] as $attachment ) {
error_log( "Attachment sent: $attachment" );
}
}
}
add_action( 'wp_mail_succeeded', 'log_attachments' );
Здесь пути к прикрепленным файлам записываются в лог. Этот код полезен, если нужно отслеживать, какие файлы были отправлены.
Пример 4: Фильтрация данных перед записью в лог
В некоторых случаях может понадобиться отфильтровать заголовки или текст сообщения перед записью в лог. В этом примере мы удаляем определенные заголовки перед сохранением данных:
function filter_and_log_mail_data( $mail_data ) {
$filtered_headers = array_filter( $mail_data['headers'], function( $header ) {
return strpos( $header, 'BCC' ) === false; // Исключаем заголовки BCC из лога
});
error_log( "To: " . implode( ', ', $mail_data['to'] ) );
error_log( "Subject: " . $mail_data['subject'] );
error_log( "Message: " . $mail_data['message'] );
error_log( "Filtered Headers: " . implode( "\n", $filtered_headers ) );
}
add_action( 'wp_mail_succeeded', 'filter_and_log_mail_data' );
Этот код исключает заголовки BCC
перед тем, как записать данные в лог. Это особенно полезно для обеспечения конфиденциальности некоторых получателей.
Заключение
Хук wp_mail_succeeded
в WordPress позволяет легко расширить функциональность стандартной отправки писем. С его помощью можно вести лог, уведомлять администратора и выполнять другие операции после успешной отправки. Этот хук идеально подходит для мониторинга и управления отправкой email-сообщений.