Функция php mail wordpress

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».

Читайте также:  Php аргументы функции массив

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

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

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

Использование 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. Преподаватель в школе Нетология.

Пишите, если нужна помощь с сайтом или разработка с нуля.

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

Здравствуйте! очень полезный у Вас сайт! Я делетан в этом деле, но очень нравится! Подскажите правильный путь Я написал плагин интернет магазина, есть две проблемы, решаются они одинаково — это wp_update_post и wp_mail. Мне нужно что бы при оформлении заказа создавалась статья с контентентом состоящим из корзины товаров: Решение которое работает но не устраивает

if (isset($_POST['buy'])) < foreach ($_SESSION['goods'] as $key =>$value) < $array[] = get_the_post_thumbnail($key, 'thumbnail'); $array[] = get_the_title($key); >$content = serialize($array); $buy_post = array( 'post_title' => '', 'post_content' => $content, 'post_status' => 'draft', 'post_type' => 'orders' ); $buy_ID = wp_insert_post( $buy_post ); // Создаем массив данных $my_post = array(); $my_post['ID'] = $buy_ID; $my_post['post_title'] = 'Заказ № '.$buy_ID; // Обновляем данные в БД wp_update_post( $my_post ); >
if (isset($_POST['buy'])) < foreach ($_SESSION['goods'] as $key =>$value) // Создаем массив данных $my_post = array(); $my_post['ID'] = $buy_ID; $my_post['post_title'] = 'Заказ № '.$buy_ID; $my_post['post_content'] = $value; // Обновляем данные в БД wp_update_post( $my_post ); > >
require_once SG_PLUGIN_PATH . 'cart/cart_action.php';

но в контент записывает тупо 1. Задача: записать в контент таблицу со значениями из массива, аналогично и для wp_mail может что то подскажете, седых волос уже это прибавило!
Спасибо!

это был первый вариант всю корзину в сессию но потом понял что достаточно только айди поста записать! Но если в сессию запишу, это же так же будет массив и его как то в разобраном виде нужно будет вставлять в контент! Может быть как то в базу напрямую можно записать? или я что то не знаю о сессиях?

Спасибо! придумал решение! add_post_meta
Это не будет нагружать вордпресс? получается я каждый товар в заказе соханяю как произвольное поле! и с помощью джейквери делаю из этого красивую табличку!

Просто поставите плагин WP Super Cache и всё будет хорошо — это необходимо в том случае, если у вас будет большой поток посетителей, больше 500 в сутки.

Миша подскажи, отправляю через функцию wp_mail письма приходят на почту с другим временем, не с моим локальным указанным на сервере. Как можно это поправить?
Чтобы письма приходили по правильному времени?
Какие настройки указать с временной датой

Думаю эта проблема встречается у многих, но многие на неё просто забивают. Суть в том, что когда приходит письмо о новом заказе (админу и клиенту) с магазина на Вукомерц. В поле «от кого» горит жёлтый замочек, рядом с адресом эл.почты. По идее должен гореть зелёный замочек. Когда наводишь на жёлтый замочек, пишет подсказку: «Отправитель подтверждён. Однако
письмо пришло с домена bacon.beget.ru,
который не соответствует обратному адресу.
Отправитель: bacon.beget.ru
Подпись: нет
Шифрование: да» В техподдержке Бегет ответили следующее: Также, судя по всему, проблема возникает с envelope-from . Если не прописать в данном заголовке почту отправителя, то туда, по умолчанию, прописывается имя сервера, с которого происходит отправка. Вам нужно задать envelope-from явно, при отправке писем. Это можно сделать, задав пятый параметр к вызову функции mail . Пример:

mail($to, $subject, $message, $headers, '-fexample@domain.ru');

С php-кодом не сильно дружу, но вставить нужный код в файл function.php смогу. Подскажите как «задать явно» envelope-from ?

Источник

The wp_mail() Function in WordPress

wordpress php mail function

PHP has a built-in function called mail() that allows you to send email. The advantage of mail() is that it’s very easy to use. The disadvantage is that it’s also very easy to use improperly, allowing spammers to send rafts of email through your site.

Because of this, there’ve been many wrappers and libraries written to help prevent that abuse. Most CMSs have their own built in methods, we’re going to take a look at WordPress’ in this post.

The wp_mail() function

The definitive source for information on this function is the WordPress Codex. If you really want to know everything about it, you should go read that. This post is going to show you some common examples.

The wp_mail() function really only needs three inputs; to, subject, and message. Here’s the way I like to use it:

That’s all there is to sending a simple email. This is a ridiculously simple example of course. You’d probably want to wrap this in a function, and have it run when certain events occur, like a new post made, or a new comment made.

You’re probably going to use variables instead of hardcoding the message and subject as well. Something like this:

 $return = doer_of_stuff(); if( is_wp_error( $return ) ) < $to = $site_owner; $subject = ‘Error occured on ‘ . date( ‘Y-m-d’ ); $message = ‘We had an error! Here it is: ‘ . $return->get_error_message(); wp_mail( $to, $subject, $message ); > ?>

Here’s that code in plain English:

First there’s a function that simply reports an error.

Then I run that function, and assign it to the variable $return.

Then I say “If $return is an error, assign some variables and send an email”

Basically you can use wp_mail() to send email in any circumstance, you simply need to decide when that should be.

Other Options: Headers

wp_mail() can also take input for headers and attachments. The headers input can take any valid mail headers, like this:

$headers = 'From: My Name ;' . “\r\n”;

And then you could add to that like this:

$headers .= 'BCC: My Other Name ;' . “\r\n”;

Note the .= in that line. That means “append to this variable instead of over writing it”. That’s how you can make multiple headers in that one variable.

Alternatively, you could make an array out of $headers, like this:

$headers = array( ‘From: My Name ;', 'BCC: My Other Name ;', );

Then your function would look something like this:

wp_mail( $to, $subject, $message, $headers );

Other Options: Attachments

The attachments input can take any valid file that exists on the filesystem. You can make a string like this:

$attachments = WP_CONTENT_DIR . '/uploads/file_to_attach.zip’;

Or, like $headers, you can make an array:

$attachments = array( WP_CONTENT_DIR . '/uploads/file_to_attach.zip', WP_CONTENT_DIR . '/uploads/other_file_to_attach.zip' );

I’d like to urge you to think long and hard about sending attachments. If you’re building this programmatically, then you may not know how large your attachments are.

Summary

Getting an email when something happens can be really useful. That said, if you’re not careful your site could end up sending hundreds of emails, and get flagged as a spammer.

Honestly, the logic and reasoning behind whether to send an email is far more difficult to figure out than the code to send that email. The code is really relatively simple.

Should you is much harder.

Author

Topher is an accomplished programmer, having written his own content management systems and managed some very large websites. He loves to help people and believes playing with WordPress is fun. Topher lives in Michigan, USA. View all posts

Источник

Оцените статью