wp_mail() — функция отправки email

Функция возвращает true в случае успешной отправки email, однако это не означает, что письмо будет получено и прочтено.

wp_mail( $to, $subject, $message, $headers = '', $attachments = array() )
$to
(строка|массив) получатель или получатели письма (в виде массива или через запятую). Обратите внимание, если вы укажете их через запятую, то каждый получатель письма увидит все email-адреса, на которые было выслано это письмо
$subject
(строка) тема сообщения
$message
(строка) текст сообщения, по умолчанию text/plain, это значит, что HTML-теги не поддерживаются, о том, как включить их поддержку, смотрите в примерах
$headers
(строка|массив) заголовки сообщения
$attachments
(строка|массив) вложения к письму, нужно указывать полный путь к файлам на сервере. Для того, чтобы вложить несколько файлов, используйте массив, либо строку, где путь к каждому файлу начинается с новой строки

Пример. Обычная отправка письма

Самый просто пример:

wp_mail('true@truemisha.ru', 'Какая-то тема', 'Какое-то сообщение');

Изменение имени и email отправителя

В WordPress по умолчанию в качестве отправителя письма выставляется «WordPress»,а в качестве его email «wordpress@truemisha.ru».

Я уже писал пост о том, как изменить стандартное имя и email отправителя для всех писем, отправляемых с блога на WordPress, а сейчас рассмотрим пример только для конкретного письма:

$headers = 'From: Миша <misha@truemisha.ru>' . "\r\n"; // в виде строки
wp_mail('true@truemisha.ru', 'Какая-то тема', 'Какое-то сообщение', $headers);

Использование HTML-тегов в письме

Для того, чтобы использовать HTML-теги в тексте сообщения, нужно изменить content-type письма на text/html, а это можно сделать двумя способами.

Через фильтр. В таком случае HTML-теги станет возможно использовать в любых письмах, отправляемых с блога, для этого нужно вставить в functions.php следующий код:

add_filter('wp_mail_content_type', create_function('', 'return "text/html";'));

Через заголовки. HTML-теги будут разрешены только для конкретного письма.

$headers[] = 'Content-type: text/html; charset=utf-8'; // в виде массива
wp_mail('true@truemisha.ru', 'Какая-то тема', 'Какое-то сообщение', $headers);

Изменение кодировки письма

Кодировка письма по умолчанию соответствует кодировке блога, но ее тоже можно изменить через заголовки (предыдущий пример) или через фильтр:

add_filter('wp_mail_charset', create_function('', 'return "utf-8";'));

В предыдущем примере (и по умолчанию тоже) WordPress отправляет письма юникодом, но таким способом вы спокойно можете изменить кодировку например на Windows-1251.

Отправка письма с измененными заголовками и вложениями

В данном случае обе переменные: $attachments и $headers — заданы в виде массива.

$attachments[] = WP_CONTENT_DIR . '/uploads/file_1.zip';
$attachments[] = WP_CONTENT_DIR . '/uploads/file_2.zip';
 
$headers[] = 'From: Миша <misha@truemisha.ru>';
$headers[] = 'Content-type: text/html; charset=utf-8';
 
wp_mail('true@truemisha.ru', 'Какая-то тема', 'Какое-то сообщение', $headers, $attachments);
Миша Рудрастых Разработчик WordPress WooCommerce

Миша Рудрастых

Впервые познакомился с WordPress в 2009 году, и после двух лет мучений с Joomla и самописными движками это был просто бальзам на душу. С 2014 года меня можно встретить на WordCamp — официальной конфе по WP в Москве, иногда там выступаю. Также в настоящее время веду курсы по WordPress в Epic Skills в Питере.