Отправка письма на почту пользователю при оформлении нового заказа (Битрикс)

Отправка письма на почту пользователю при оформлении нового заказа (Битрикс)

Здравстуйте. Для пользователя интернет магазина очень удобно, когда после оформления им заказа на сайте, ему приходит на почту письмо с подробной информацией о заказе. В этой статье я расскажу о том как реализовать данный функционал.
В письмо, которое приходит пользователю, будет входить следующая информация:
- ФИО заказчика
- номер заказа
- статус заказа
- состав заказа
- стоимость, как всего заказа, так и цена отдельных товаров в нем
- стоимость и способ доставки
- необходимые ссылки: ссылка на сайт, ссылка на личный кабинет пользователя
- сопутствующая информация, которую вы хотите сообщить покупателю

Итак, первое что нам нужно сделать это создать тип почтового события и соответствующий этому типу почтовый шаблон.
Зайдем в административном разделе Битрикса в раздел настройки –> почтовые события –> типы почтовых событий, нажмем «Добавить тип». Заполним все поля как показано на картинке:

Отправка письма на почту пользователю при оформлении нового заказа (Битрикс)

Далее перейдем на вкладку «Почтовые шаблоны» и создадим новый почтовый шаблон, нажав кнопку «Добавить шаблон»:

Отправка письма на почту пользователю при оформлении нового заказа (Битрикс)

Текст письма может быть любым, внизу есть список переменных, которые вы можете использовать в данном шаблоне.
Далее нужно перейти в раздел «Контент» –> «Файлы и папки». Зайти в папку www.ваш_сайт.ru//bitrix/php_interface и в файл init.php вставить следующий код (если такого файла нет создать!):

<?
// Письмо пользователю при оформлении нового заказа
AddEventHandler("sale", "OnOrderAdd", Array("mail_new", "OnOrderAdd_mail")); 

class mail_new
{ 

function OnOrderAdd_mail($ID, $val)
{

 // Получаем имя и мэйл пользователя
 $rsUser = CUser::GetByID($val["USER_ID"]);
 $arUser = $rsUser->Fetch();
 $arUser_name = $arUser["LAST_NAME"]." ".$arUser["NAME"];
 $arUser = $arUser["EMAIL"];

 // Получаем Содержимое заказа
$dbBasketItems = CSaleBasket::GetList(
        array(
                "NAME" => "ASC",
                "ID" => "ASC"
                ),
        array(
                "FUSER_ID" => CSaleBasket::GetBasketUserID(),
                "LID" => SITE_ID,
                "DELAY" => "N",
                "CAN_BUY" => "Y",
                "ORDER_ID" => "NULL"
                ),
        false,
        false,
        array()
        );

                                $zak = "Корзина заказа:<br /><table border='1'>";
                                $zak = $zak."<tr><td align='center'>Товар</td><td align='center'>Цена</td><td align='center'>Кол-во</td><td align='center'>Сумма</td></tr>";

				while ($arItem = $dbBasketItems->Fetch())
				{
                                  $st = (int)$arItem["QUANTITY"]*$arItem["PRICE"];
                                  $kol_vo = (int)$arItem["QUANTITY"];
                                  $zak = $zak."<tr><td align='left'>"."<a href='".$arItem["DETAIL_PAGE_URL"]."'>".$arItem["NAME"]."</a></td><td align='left'>".$arItem["PRICE"]."</td><td align='left'>".$kol_vo."</td><td align='left'>".$st."</td></tr>";
				}
                                $arDeliv = CSaleDelivery::GetByID($val["DELIVERY_ID"]);
                                $zak = $zak."<tr><td align='left' colspan='3'><b>Доставка: </b>".$arDeliv["NAME"]."</td><td align='left'>".$val["PRICE_DELIVERY"]."</td></tr>";
                                $zak = $zak."</table>";

 $arEventFields = array(
    "ORDER_ID"         => $ID,
    "SOSTAV"              => $zak,
    "ORDER_USER"    => $arUser_name,
    "EMAIL"                 => $arUser,
    "BCC"                     => $arUser,
    "PRICE"                  => (int)$val["PRICE"]." руб",
    "SALE_EMAIL"     => "info@yoursite.ru",
    );

CEvent::SendImmediate("SALE_NEW_ORDER", s1, $arEventFields, "N", 11);
}
}
?>

В функции «CEvent::SendImmediate(«SALE_NEW_ORDER», s1, $arEventFields, «N», 11);» :
SALE_NEW_ORDER – тип почтового события
s1 – идентификатор сайта
11 – идентификатор почтового шаблона
Эти переменные вам нужно вставить свои!

Вот и все, теперь когда покупатель сделает заказ на вашем сайте, ему придет письмо примерно такого содержания:

Отправка письма на почту пользователю при оформлении нового заказа (Битрикс)
Похожие посты:
  • Отправка письма пользователю при смене статуса заказа (Битрикс)
  • Напоминание пользователю о появлении товара (Битрикс)
  • События в 1С Битрикс
  • Кнопка «повторить заказ» для Битрикс
  • Самостоятельное присвоение аффилиатов к заказам (Битрикс)
  • 14 комментариев: Отправка письма на почту пользователю при оформлении нового заказа (Битрикс)

    1. Варвара

      Добрый день!

      подскажите, пожалуйста, как в письмо с сообщением о новом заказе вставить свойства заказа?

      • Лаврушин Алексей

        Здравствуйте, нужно добавить новый элемент в массив $arEventFields. Сами свойства заказа можно получить с помощью CSaleOrderPropsValue::GetOrderProps.

    2. Здравствуйте! подскажите, пожалуйста, почему при добавлении в файл инит.пхп выдает ошибку в строке class mail_new
      Parse error: syntax error, unexpected T_CLASS in ../bitrix/php_interface/init.php on line 5

      • Лаврушин Алексей

        Здравствуйте, ну тут много вариантов может быть. От того что где то не поставили запятую или точку запятой где то (я думаю, что у вас именно это), до не той версии php. Код рабочий, знаки у меня все верно проставлены. Возможно если вы мне скинете свой init.php, я и смогу что то понять.

    3. Дмитрий

      Алексей подскажите, мне нужно отправить в письме свойства, но свойства не всего заказа, а свойства товаров этого заказа. Я никак не могу их получить….. Эти свойства я записывал при добавлении товара в корзину так (думаю эта конструкция вам знакома):
      $arProps = array();
      $arProps[] = array(«NAME» => «Цвет», «CODE» => «color»,»VALUE» => $itemColor);
      $arFields["PROPS"] = $arProps;
      CSaleBasket::Add($arFields);
      Так вот, как теперь после того как заказ сформирован мне получить значения этого поля свойств, чтоб отправить его в письме… ???? Подскажите пожалуйста….

    4. Лаврушин Алексей

      С помощью CSaleBasket::GetList получить товары, которые лежат в вашем заказе (фильтр по полю ORDER_ID). Затем с помощью CIBlockElement::GetProperty можно получить его свойство.

    5. Максим

      Алексей, а реально ли отправить письмо на почту пользователю при заполнении обычной веб-формы (не в магазине)? У меня такая ситуация: есть регистрация на конференцию. Заполняется обычная форма (редакция стандарт). нужно чтоб посетитель получил уведомление что он зарегистрирован. Не сталкивались?

      • Лаврушин Алексей

        Конечно реально. При получении POST запроса с данными вашей веб формы использовать CEvent::SendImmediate. Например так.

    6. Максим

      Алексей, если бы написали статью или компонент. Готов пожертвовать яндекс д. :) Спасибо!

    7. Виталий

      Стало приходить по два письма. В первом письме переменная #SOSTAV# обрабатывается а во втором нет. Не могу понять причину появления второго письма?

    8. Алексей, добрый день!\\Вопрос: в письме пользователю по новому заказу можно ли N#ORDER_ID# вписать в название письма, если данная ссылка на номер заказа етсь в самом теле письма.

      заранее благодарю!

      Иван

    9. Добрый день Алексей. Сделал все как Вы описали. Письма с заказом приходят. Подскажите пожалуйста как можно добавить два поля с номером телефона заказчика который указан при регистрации, и номером телефона который указан в заказе. Если можно описать в виде куска кода который можно потом вставить init.php ЗАРАНЕЕ БОЛЬШОЕ ЧЕЛОВЕЧЕСКОЕ СПАСИБО.

    10. Сделал все по инструкции – письмо не приходит. Для проверки вставлял в init.php функцию mail – работает. А вот если её mail вставить в Ваш код – не приходит. Похожу, не обрабатываются функции. С чем может быть связано?

    11. Здравствуйте.
      Подскажите как добавить адрес заказчика?

    Добавить комментарий:

    Подтвердите, что Вы не бот — выберите человечка с поднятой рукой: