Отложенная отправка писем

3k
Алексей,
Отложенная отправка писем

Письмо о заказе можно отправлять немного позже, когда уже пришла информация о оплате и когда менеджер проверил заказ.

Письмо о заказе можно отправлять немного позже, когда уже пришла информация о оплате или когда менеджер проверил заказ.

Как сделать?

Агенты должны выполняться на крон (желательно раз в 5 минут)

*/5 * * * * /usr/bin/php -f /home/bitrix/www/local/php_interface/cron_events.php

Добавляем обработчик события отправления нового письма, если с момента заказа не прошло 10 минут, то останавливаем отправку и добавляем новый агент для обновления статуса отправки с "неудачная отправка" на "необходимо отправить".

AddEventHandler("main", "OnBeforeEventSend", array("FTeaEvents", "sendOrderEmail"));

class FTeaEvents
{
	
	function sendOrderEmail (&$arFields, $arTemplate)
	{
		if ($arTemplate['EVENT_NAME'] == "SALE_NEW_ORDER" && $arFields['ORDER_REAL_ID'] > 0) {
			if (strtotime($arFields['ORDER_DATE'])+10*60 > time()) {
				CAgent::AddAgent("FTeaEvents::updateOrderEmail();");
				return false;
			}
		}
	}

	public static function updateOrderEmail ()
	{
		global $DB, $CACHE_MANAGER;
		$DB->Query("UPDATE b_event SET SUCCESS_EXEC = 'N' WHERE SUCCESS_EXEC = 'F';", true);
		$DB->Query("UPDATE b_event SET SUCCESS_EXEC = 'N' WHERE SUCCESS_EXEC = '0';", true);
		$CACHE_MANAGER->Clean("events");
	}

}

Таким образом получаем: при попытке отправить, если условие по времени не выполняется, письмо отмечается как "неудачно отправленное" и система забывает про него. При следующем "заходе" cron`а выполняется функция updateOrderEmail() которая меняет статус на "необходимо отправить" и система пытается повторно отправить письмо. А т.к. cron выполняется раз в 5 минут, то попыток будет не много и письмо отправится только через 10-15 минут.

Вместо проверки по времени можно использовать проверку по свойству заказа, например "Заказ проверен". Можно комбинировать условия, если заказ не проверен и прошло больше 20 минут - отправляем

Есть вопросы или нашли ошибку? Напишите комментарий (можно без регистрации), отвечать стараюсь быстро.

Опубликовано 24 мая 2017 | Обновлено 19 сентября 2017
делаюИМ, разработчику, костыли
Поделиться
Похожие статьи
Формирование цены от закупочной
Автоматический расчет розничной цены из закупочной. Например наценка 20% c округлением.
Читать дальше » 0
Алексей,
Делаю ИМ, часть 0. Выбор и настройка сервера.
Небольшой цикл статей о том как я делаю интернет-магазин для себя. Начну с настройки web-сервера.
Читать дальше » 0
Алексей,
Комментарии
❮…❯
Авторизуйтесь чтобы получать уведомления об ответе
12 дек 2022
Добрый вечер! Есть ли возможность сделать отправку писем отложено по времени, например, каждые две недели, чтобы напоминать о себе?
Алексей
12 дек 2022
Евгений, добрый. Не смотрите эту статью, она древняя как мамонт. То что вы хотите, сделать можно. Пишите скрипт, который отправляет нужные письма, и запускаете его кроном по расписанию (например каждое 1 и 15 число месяца).
13 дек 2022
Алексей, отлично, что можно!) но как? Я не программист вообще))
Алексей
13 дек 2022
Евгений, тогда можно попробовать настроить с помощью модуля "почты" и триггерных рассылок. Как именно не подскажу. Почитайте инструкции к модулю "Email-маркетинг (sender)"
Алексей
18 июн 2018
В целом, история себя не оправдала. Появилось слишком много глюков, т.к. система к такому "хардкору" не готова) Иного варианта пока нет.
Письмо о заказе можно отправлять немного позже, когда уже пришла информация о оплате и когда менеджер проверил заказ.