wp_mail() – отправка почты в WordPress

Практическое использование этой функции при отправке формы обратной связи вы можете найти в моём видеоуроке.

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

Кроме того, по умолчанию тип контента письма text/plain, что значит, что HTML-теги не поддерживаются, но это легко исправить несколькими строчками кода.

Кодировка письма по умолчанию совпадает с кодировкой вашего сайта на WordPress, но и это вы также можете изменить фильтров wp_mail_charset.

wp_mail( $to, $subject, $message, $headers = '', $attachments = array() )

Параметры

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

Примеры

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

wp_mail( 'm@misha.agency', 'Какая-то тема', 'Какое-то сообщение' );

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

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

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

Для этого нам нужно передать параметр $headers.

wp_mail(
	'hr@misha.agency',
	'Какая-то тема',
	'Какое-то сообщение',
	array(
		'From: Миша <m@misha.agency>'
	)
);

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

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

Это можно сделать двумя способами.

Через фильтр – в таком случае HTML-теги станет возможно использовать в любых письмах, отправляемых с блога.

add_filter( 'wp_mail_content_type', 'true_content_type' );
 
function true_content_type( $content_type ) {
	return 'text/html';
}

Не знаете, куда вставлять код?

Второй способ – указать заголовки уже при отправке конкретного письма. Тут мы также и устанавливаем кодировку письма.

wp_mail(
	'm@misha.agency',
	'Какая-то тема',
	'Какое-то сообщение', 
	array(
		'Content-type: text/html; charset=utf-8'
	)
);

Изменение кодировки письма, фильтр wp_mail_charset

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

add_filter( 'wp_mail_charset', 'true_mail_charset' );
 
function true_mail_charset( $content_type ) {
	return 'utf-8';
}

Не знаете, куда вставлять код?

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

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

$upload_dir = wp_upload_dir();
 
$attachments = array(
	$upload_dir[ 'path' ] . '/file-1.png',
	WP_CONTENT_DIR . '/uploads/file-2.txt'
);
 
wp_mail( 'm@misha.agency', 'Письмо с вложениями', 'Вложения приложены', array(), $attachments );

Миша

Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.

Если вам нужна помощь с сайтом или разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда будем рады вам помочь!

Комментарии — 18

Оставить комментарий

Если вы хотите добавить код, не забудьте обернуть его в <pre lang="php"></pre>, если же код – меньше одной строчки, то можно и в <code></code>.