Функция WP_MAIL() в WordPress: основные параметры, примеры и обработка ошибок

Функция 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-typetext/html, text/plain
    • cccc: [email protected] — адреса, получающие копию письма; они видят друг друга.
    • bccbcc: [email protected] — адреса, получающие скрытую копию письма; они не видят друг друга.
    • reply-to — адрес для ответов.
    • другие пользовательские заголовки.

    Значение по умолчанию: ''.

  • $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!

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *