Есть ли способ отправлять электронные письма в формате HTML с помощью функции WordPress wp_mail ()?
5 ответ
- голосов
-
- 2011-09-06
со страницы кодекса wp_mail :
<цитата>Тип содержимого по умолчанию - «текст/простой»,что не позволяет использовать 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' );
from wp_mail codex page:
The default content type is 'text/plain' which does not allow using HTML. However, you can set the content type of the email by using the 'wp_mail_content_type' filter.
// 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' );
-
Хм звучит полезно.Просто вопрос,какая конкретная причина,по которой вы назвали свою функцию wpse27856_set_content_type?Hmm sounds useful. Just a question, any particular reason why you named your function wpse27856_set_content_type?
- 2
- 2011-09-06
- racl101
-
Нет,это просто уникальное имя,основанное на идентификаторе этого конкретного вопроса.wpse=wp stachexchange,27856 - это идентификатор этого вопроса в URL-адресе.Я просто делаю это,чтобы избежать потенциальных столкновений,если люди скопируют/вставят код отсюда.No, it's just a unique name based on the id of this particular question. wpse = wp stachexchange, 27856 is the id of this question in the URL. I just do that to avoid potential collisions if people copy/paste code out of here.
- 18
- 2011-09-06
- Milo
-
Вы также можете просто включить Content-Type в заголовки электронной почты.Посмотрите,как это делает плагин Notifly.You can also just include the Content-Type in your email headers. Check out how the Notifly plugin does it.
- 3
- 2011-09-07
- Otto
-
о да,ха-ха.Какой яn00b.Думаю,это идентификатор этого сообщения.oh yeah, ha ha. What a n00b I am. Guess it is the id of this post.
- 0
- 2011-09-07
- racl101
-
Должно быть электронное письмо в формате .txt или .html?Я использую этот метод,но если я просматриваю исходный код,это файл .txt,а встроенное изображение не обрабатывается.Should the email be a .txt file or a .html file? I'm using this method but if I view source it is a .txt file and the embedded image is not processed.
- 0
- 2012-07-27
- AlxVallejo
-
@AlxVallejo,если вы отправляете из файла,вам,вероятно,сначала нужно будет прочитать файл как строку.@AlxVallejo if your sending from file you will probably need to read the file as a string first.
- 0
- 2013-01-28
- Blowsie
-
передача заголовков - более эффективный метод,чем добавление ловушки.-1passing the headers in is a more efficient method than adding a hook. -1
- 0
- 2016-11-01
- Jeremy
-
@Jeremy,конечно,но передача заголовков напрямую во многих случаях не вариант,например,когда это не ваш код,вызывающий `wp_mail`.@Jeremy sure, but passing the headers directly is not an option in many cases, like when it's not your code calling `wp_mail`.
- 0
- 2016-11-02
- Milo
-
@Milo Вы правы,но на этот вопрос заголовки - правильный ответ.@Milo You are correct but for this question the headers are the correct answer.
- 0
- 2016-11-02
- Jeremy
-
Это нарушит вашу электронную почту для сброса пароля,потому что ссылка для сброса заключена в <>.This will break your password reset email, because the reset link is wrapped in <>.
- 2
- 2017-10-24
- Simon Josef Kok
-
Разве это не нарушает какой-либо другой код,который ожидает,что `wp_mail` будет отправлять текстовое электронное письмо,а не электронное письмо в формате HTML?Doesn't this break any other code that expects `wp_mail` to send plain text email, rather than HTML email?
- 0
- 2019-04-04
- Flimm
-
@SimonJosefKok,если я правильно читаю этот отчет об ошибке,проблема взлома писем для сброса пароля решена в WordPress 5.4.Похоже,они решили убрать угловые скобки с адреса электронной почты.https://core.trac.wordpress.org/ticket/23578#comment:24@SimonJosefKok, if I'm reading this bug report correctly, the issue of breaking password reset emails is resolved as of WordPress 5.4. Sounds like they decided to remove the angle brackets from the email address. https://core.trac.wordpress.org/ticket/23578#comment:24
- 0
- 2020-02-11
- Mark Berry
-
- 2015-07-26
В качестве альтернативы вы можете указать HTTP-заголовок Content-Type в параметре $ headers:
$to = '[email protected]'; $subject = 'The subject'; $body = 'The email body content'; $headers = array('Content-Type: text/html; charset=UTF-8'); wp_mail( $to, $subject, $body, $headers );
As an alternative, you can specify the Content-Type HTTP header in the $headers parameter:
$to = '[email protected]'; $subject = 'The subject'; $body = 'The email body content'; $headers = array('Content-Type: text/html; charset=UTF-8'); wp_mail( $to, $subject, $body, $headers );
-
Это работает лучше,поскольку add_filter иногда отображается как вложение.Спасибо,что поделился!This works better as the add_filter sometimes shows as attachment. Thanks for sharing!
- 4
- 2018-02-17
- deepakssn
-
Обычно это лучший способ сделать это.Верхний ответ будет мешать работе других плагинов и вызывать проблемы.This is the generally best way to-do this. The top answer will interfere with other plugins and cause problems.
- 2
- 2019-12-06
- Alex Standiford
-
- 2015-01-02
Не забудьте удалить фильтр типа содержимого после использования функции wp_mail. Следуя принятому названию ответа,вы должны сделать это после выполнения wp_mail:
remove_filter( 'wp_mail_content_type','wpse27856_set_content_type' );
Отметьте этот билет здесь - Сбросьте тип содержимого,чтобы избежать конфликтов - http://core.trac.wordpress.org/ticket/23578
Don't forget to remove the content type filter after you use the wp_mail function. Following the accepted answer naming you should do this after wp_mail is executed:
remove_filter( 'wp_mail_content_type','wpse27856_set_content_type' );
Check this ticket here - Reset content-type to avoid conflicts -- http://core.trac.wordpress.org/ticket/23578
-
Это должен быть комментарий,а не ответ,нет?This should be a comment, not an answer, no?
- 12
- 2017-07-26
- Bob Diego
-
- 2020-04-05
Еще один простой способ,которым я расскажу ниже.Даже вы можете оформить тело письма по своему желанию.Может быть,вам это поможет.
$email_to = '[email protected]'; $email_subject = 'Email subject'; // <<<EOD it is PHP heredoc syntax $email_body = <<<EOD This is your new <b style="color: red; font-style: italic;">password</b> : {$password} EOD; $headers = ['Content-Type: text/html; charset=UTF-8']; $send_mail = wp_mail( $email_to, $email_subject, $email_body, $headers );
Подробнее о синтаксисе PHP heredoc https://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc
Another easy way I'm going to share below. Even you can style your mail body as your wish. Maybe it's helpful for you.
$email_to = '[email protected]'; $email_subject = 'Email subject'; // <<<EOD it is PHP heredoc syntax $email_body = <<<EOD This is your new <b style="color: red; font-style: italic;">password</b> : {$password} EOD; $headers = ['Content-Type: text/html; charset=UTF-8']; $send_mail = wp_mail( $email_to, $email_subject, $email_body, $headers );
More about PHP heredoc syntax https://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc
-
- 2020-03-05
Используйте
ob_start
,потому что это позволит вам использовать переменные/функции WP,такие какbloginfo и т. д.создайте файл PHP и вставьте в него HTML-код (при необходимости используйте переменные wp внутри этого файлаphp).
Используйте приведенный ниже код:
$to = 'Email Address'; $subject = 'Your Subject'; ob_start(); include(get_stylesheet_directory() . '/email-template.php');//Template File Path $body = ob_get_contents(); ob_end_clean(); $headers = array('Content-Type: text/html; charset=UTF-8','From: Test <[email protected]>'); wp_mail( $to, $subject, $body, $headers );
это сохранит ваш код в чистоте,а благодаря ob_start мы также сэкономим время загрузки файла.
Use
ob_start
, because this will allow you to use WP variables/functions like bloginfo etc.make a PHP file and paste your HTML in that file(use wp variables inside that php file if needed).
Use the below code:
$to = 'Email Address'; $subject = 'Your Subject'; ob_start(); include(get_stylesheet_directory() . '/email-template.php');//Template File Path $body = ob_get_contents(); ob_end_clean(); $headers = array('Content-Type: text/html; charset=UTF-8','From: Test <[email protected]>'); wp_mail( $to, $subject, $body, $headers );
this will keep your code clean and due to ob_start we will also save the time of loading the file.
Есть ли action_hook или что-то подобное,что могло бы помочь мне в этом?
Я попытался добавить разметку в строковую переменную PHP и просто отправил электронное письмо с помощью функции
wp_mail()
вот так:Но это был обычный текст?
Есть идеи?