Есть ли способ отправки электронных писем в формате 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);

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

Любые идеи?

Ответы:


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' );

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


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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.