Практическое использование этой функции при отправке формы обратной связи вы можете найти в моём видеоуроке.
Функция возвращает true
в случае успешной отправки email, однако это не означает, что письмо будет получено и прочтено. Это означает, что сама функция отработала без ошибок.
Кроме того, по умолчанию тип контента письма text/plain
, что значит, что HTML-теги не поддерживаются, но это легко исправить несколькими строчками кода.
Кодировка письма по умолчанию совпадает с кодировкой вашего сайта на WordPress, но и это вы также можете изменить фильтров wp_mail_charset.
wp_mail( $to, $subject, $message, $headers = '', $attachments = array() )
text/plain
, это значит, что HTML-теги не поддерживаются, о том, как включить их поддержку, смотрите в примерахwp_mail( 'm@misha.agency', 'Какая-то тема', 'Какое-то сообщение' );
В WordPress по умолчанию в качестве отправителя письма выставляется «WordPress»,а в качестве его email «wordpress@misha.agency».
Я уже писал пост о том, как изменить стандартное имя и email отправителя для всех писем, отправляемых с блога на WordPress, а сейчас рассмотрим пример только для конкретного письма.
Для этого нам нужно передать параметр $headers
.
wp_mail( 'hr@misha.agency', 'Какая-то тема', 'Какое-то сообщение', array( 'From: Миша <m@misha.agency>' ) );
Для того, чтобы использовать 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' ) );
Кодировка письма по умолчанию соответствует кодировке блога, но ее тоже можно изменить через заголовки (предыдущий пример) или через фильтр:
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 );
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
Здравствуйте! очень полезный у Вас сайт! Я делетан в этом деле, но очень нравится! Подскажите правильный путь
Я написал плагин интернет магазина, есть две проблемы, решаются они одинаково - это wp_update_post и wp_mail.
Мне нужно что бы при оформлении заказа создавалась статья с контентентом состоящим из корзины товаров:
Решение которое работает но не устраивает
если так
то соответственно записывает только последний перебор.
Еще вариант подключить фаил в контент
но в контент записывает тупо 1.
Задача: записать в контент таблицу со значениями из массива, аналогично и для wp_mail может что то подскажете, седых волос уже это прибавило!
Спасибо!
Здравствуйте!
А почему не в сессию корзину записываете?
это был первый вариант всю корзину в сессию но потом понял что достаточно только айди поста записать! Но если в сессию запишу, это же так же будет массив и его как то в разобраном виде нужно будет вставлять в контент! Может быть как то в базу напрямую можно записать? или я что то не знаю о сессиях?
сейчас в
: кей - это айди поста а валуе - это количество купленного товара
может быть подскажете хук? что бы в базе контент ансерелизовать и разобрать массив!
Всё равно не до конца понимаю задачу :)
Возможно вам помогут функции get_post() и
unserialize()
?Спасибо! придумал решение! add_post_meta
Это не будет нагружать вордпресс? получается я каждый товар в заказе соханяю как произвольное поле! и с помощью джейквери делаю из этого красивую табличку!
Не будет :) главное кэш поставить потом.
не дадите ссылку по этому вопросу! честно говоря не изучал этот вопрос!
Просто поставите плагин WP Super Cache и всё будет хорошо — это необходимо в том случае, если у вас будет большой поток посетителей, больше 500 в сутки.
Благодарю!
Миша подскажи, отправляю через функцию wp_mail письма приходят на почту с другим временем, не с моим локальным указанным на сервере. Как можно это поправить?
Чтобы письма приходили по правильному времени?
Какие настройки указать с временной датой
Жаль, что этот сайт давно не обновлялся(
Угу, целых три дня
Думаю эта проблема встречается у многих, но многие на неё просто забивают.
Суть в том, что когда приходит письмо о новом заказе (админу и клиенту) с магазина на Вукомерц. В поле "от кого" горит жёлтый замочек, рядом с адресом эл.почты. По идее должен гореть зелёный замочек.
Когда наводишь на жёлтый замочек, пишет подсказку:
"Отправитель подтверждён. Однако
письмо пришло с домена bacon.beget.ru,
который не соответствует обратному адресу.
Отправитель: bacon.beget.ru
Подпись: нет
Шифрование: да"
В техподдержке Бегет ответили следующее:
Также, судя по всему, проблема возникает с
envelope-from
. Если не прописать в данном заголовке почту отправителя, то туда, по умолчанию, прописывается имя сервера, с которого происходит отправка. Вам нужно задатьenvelope-from
явно, при отправке писем. Это можно сделать, задав пятый параметр к вызову функцииmail
. Пример:С php-кодом не сильно дружу, но вставить нужный код в файл function.php смогу. Подскажите как "задать явно"
envelope-from
?А в каком приложении эти замочки отображаются?
В браузерной версии (Хром) Яндекс.Почты
Это видимо какая-то внутренняя тема яндекса. Я отправлял письма с DKIM-подписанных адресов и нет, все с замочками отображаются.
Вообще, при отправке писем с сайта, надо, чтобы отправитель был что-то@доменсайта.