Функция WP_MAIL() в WordPress
Функция wp_mail()
позволяет отправлять электронные письма, аналогично функции mail()
из PHP.
Основные параметры
По умолчанию имя отправителя — "WordPress", а адрес электронной почты — wordpress@ваш_домен
. Вы можете изменить их, используя заголовки:
From: Пример Пользователя <[email protected]>
Существуют опциональные фильтры wp_mail_from
и wp_mail_from_name
, которые применяются к адресу электронной почты и имени отправителя. Если возвращается только значение из wp_mail_from
, то будет использоваться только адрес без имени.
По умолчанию содержимое письма имеет тип text/plain
, то есть нельзя использовать HTML. Для установки типа содержимого можно использовать фильтр wp_mail_content_type
или добавить заголовок Content-type: text/html
.
Кодировка (charset) по умолчанию соответствует кодировке, используемой на блоге (обычно это utf-8
). Кодировку можно установить с помощью фильтра wp_mail_charset
.
Чтобы эта функция работала, веб-сервер должен поддерживать SMTP, и в файле php.ini
должен быть установлен параметр smtp_port
.
Плавающая функция
Функция wp_mail()
определяется во встроенном файле pluggable.php
, это означает, что её можно переопределить через плагин. Однако она будет доступна только после загрузки всех плагинов, поэтому вызывать её нужно на хуке plugins_loaded
или позже, например, на хуке init
.
Замена функции
Вы можете создать функцию с тем же именем в обязательном или обычном плагине, и она перезапишет оригинальную функцию.
Как использовать
Функция имеет следующий формат:
wp_mail( $to, $subject, $message, $headers, $attachments );
-
$to (string/array) (обязательно) — массив или список адресов электронной почты, кому отправляется сообщение.
-
$subject (string) (обязательно) — тема письма.
-
$message (string) (обязательно) — содержимое сообщения.
-
$headers (string/array) — дополнительные заголовки, которые могут быть:
- from — например,
from: Me <[email protected]>
- content-type —
text/html
,text/plain
- cc —
cc: [email protected]
— адреса, получающие копию письма; они видят друг друга. - bcc —
bcc: [email protected]
— адреса, получающие скрытую копию письма; они не видят друг друга. - reply-to — адрес для ответов.
- другие пользовательские заголовки.
Значение по умолчанию:
''
. - from — например,
-
$attachments (string/array) — файлы для прикрепления. Указывайте полный путь к файлу. Чтобы прикрепить несколько файлов, задайте их имена в массиве или в строке, разделенной переносом строки.
Значение по умолчанию:array()
.
Примеры использования
Пример 1: Отправка письма
Отправим письмо от "Мое Имя" с прикрепленным файлом attach.zip
:
$attachments = [ WP_CONTENT_DIR . '/uploads/attach.zip' ];
$headers = 'From: Мое Имя <[email protected]>' . "rn";
wp_mail( '[email protected]', 'Тема', 'Содержимое письма', $headers, $attachments );
Обратите внимание, что на некоторых серверах поле FROM должно содержать домен сайта, иначе, например, Яндекс почта может не получить письмо.
Пример 2: Использование массива для заголовков
$to = '[email protected]';
$subject = 'Тема';
$message = 'Содержимое сообщения.';
$headers = array(
'From: Я <[email protected]>',
'Content-Type: text/html',
'Cc: Другой Пользователь <[email protected]>',
);
wp_mail( $to, $subject, $message, $headers );
Пример 3: Отправка письма нескольким получателям и установка типа содержимого
$recipients = [
'[email protected]',
'[email protected]'
];
add_filter( 'wp_mail_content_type', function() {
return 'text/html';
});
wp_mail( $recipients, 'Тема', 'Сообщение в HTML
' );
remove_filter( 'wp_mail_content_type', 'set_html_content_type' );
Обработка ошибок
Для отлова ошибок при отправке письма используйте следующий хук:
add_action( 'wp_mail_failed', function( WP_Error $error ) {
global $phpmailer;
$error_data = json_encode( $error->get_error_data(), JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE );
$message = "Ошибка отправки:
- Ошибка PHPMailer: {$phpmailer->ErrorInfo}
- Сообщение WP_Error: {$error->get_error_message()}
- Данные ошибки WP_Error: {$error_data}";
error_log( $message );
});
Этот хук должен быть добавлен до вызова функции wp_mail()
.
Замечания
Глобальная переменная: $phpmailer
— это экземпляр класса PHPMailer.
История изменений
- С версии 1.2.1 функционал был внедрен. С версии 5.5.0 для валидации email используется
is_email()
, а не стандартный валидатор PHPMailer.
Эта информация поможет вам настроить и использовать функцию wp_mail()
для отправки писем на WordPress!