Есть ли способ отправки электронных писем в формате HTML с помощью функции WordPress wp_mail?

41

Есть ли action_hook или что-то подобное, что может помочь мне достичь этого?

Я попытался добавить разметку в строковую переменную PHP и просто отправил электронное письмо с помощью функции wp_mail следующим образом:

$email_to = 'someaddress@gmail.com';
$email_subject = 'Email subject';
$email_body = "<html><body><h1>Hello World!</h1></body></html>";
$send_mail = wp_mail($email_to, $email_subject, $email_body);

Но это проявилось как открытый текст?

Любые идеи?

racl101
источник

Ответы:

58

со страницы кодекса wp_mail :

Тип контента по умолчанию - «text / plain», который не позволяет использовать HTML. Однако вы можете установить тип содержимого электронной почты, используя фильтр «wp_mail_content_type».

// In theme's functions.php or plug-in code:

function wpse27856_set_content_type(){
    return "text/html";
}
add_filter( 'wp_mail_content_type','wpse27856_set_content_type' );
Milo
источник
1
Хм звучит полезно. Просто вопрос, какая-то конкретная причина, почему вы назвали свою функцию wpse27856_set_content_type?
racl101
14
Нет, это просто уникальное имя, основанное на идентификаторе этого конкретного вопроса. wpse = wp stachexchange, 27856 - это идентификатор этого вопроса в URL. Я просто делаю это, чтобы избежать потенциальных коллизий, если люди копируют / вставляют код отсюда.
Майло
2
Вы также можете просто включить Content-Type в заголовки вашей электронной почты. Посмотрите, как плагин Notifly делает это.
Отто
о да ха ха Что я за n00b. Думаю, это идентификатор этого поста.
racl101
1
Это нарушит ваш адрес электронной почты для сброса пароля, потому что ссылка для сброса обернута в <>.
Симон Йозеф Кок
92

В качестве альтернативы вы можете указать HTTP-заголовок Content-Type в параметре $ headers:

$to = 'sendto@example.com';
$subject = 'The subject';
$body = 'The email body content';
$headers = array('Content-Type: text/html; charset=UTF-8');

wp_mail( $to, $subject, $body, $headers );
драгоценный камень
источник
2
Это работает лучше, так как add_filter иногда отображается как вложение. Спасибо, что поделился!
Deepakssn
10

Не забудьте удалить фильтр типов контента после использования функции wp_mail. Следуя принятому названию ответа, вы должны сделать это после выполнения wp_mail:

remove_filter( 'wp_mail_content_type','wpse27856_set_content_type' );

Проверьте этот билет здесь - Сбросить тип контента, чтобы избежать конфликтов - http://core.trac.wordpress.org/ticket/23578

0v3rth3d4wn
источник
7
Это должен быть комментарий, а не ответ, нет?
Боб Диего