Когда-то мы сделали модуль «Управление почтой» для решения многих задач. Письма с сайта можно просматривать и отправлять повторно.
Проблема неотправленных писем особенно актуальна для неспециализированных хостингов типа Ру-Центра (тариф 201, 301), где письма уходят не всегда из-за ограничений на оперативную память.
В версии 1.2.0 добавлена автоматическая проверка и повторная отправка для неушедших писем:
Опции включаются в настройках модуля: Настройки -> Настройки продукта -> Настройки модулей -> Управление почтой.
Реализация:
Модуль работает на агентах на хите пользователя. Крон настраивать не обязательно.
Антон Долганин, где-то писал, что скрипт, вызванный кроном, отдельно подключает расширения PHP, и поэтому потребляет лишнюю память. Для нашей задачи расход памяти критичен, поэтому агент на хитах - лучший вариант.
По умолчанию агент запускается через 2 минуты после своего последнего запуска.
Нет особого смысла ставить короткий период в 2 секунды. В PHP память освобождается не мгновенно, нужно какое-то время. Если письмо не ушло из-за нехватки памяти в момент отправки, лучше подождать 2 минуты.
Опция «Записывать в лог» делает лишний запрос на чтение к базе данных, но напишет подробный отчет в лог, если найдены неотправленные письма.
UPD 23.10.2013
Ру-Центр сделал новый специализированный тариф под Битрикс на 704 Мб оперативной памяти.
Соответственно Битрикc считает, что почтовое событие сработало со статусом Y и исправлять его не надо
echo CEvent::Send( "TEST", "s1", array("EMAIL" => "<ma!il@ask>a<ron.ru>" ), "N" );
Если адрес пустой, функция mail вернет false:
var_dump( mail( "", "test", "test" ) ); // false
А почтовое событие завершится со статусом F
echo CEvent::Send( "TEST", "s1", array("EMAIL" => "" ), "N" );
Потом наш модуль будет повторно отправлять это письмо и писать в лог каждый раз, если лог включен.
=========
Я с трудом себе представляю случай, когда адрес получателя пустой. В любом случае администратор может просматривать все письма со статусами на отдельной странице, пользоваться фильтром и удалять ненужные события руками.
По ссылке мой функционал, который автоматизирует переотправку писем. Заметьте не исправляет ошибки, а перезапускает почтовые события на отправку. То есть условие, что почта работала и до этого отлично, но письма периодически встают.
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».