Как очистить базу рассылки от «мертвых» адресов на «Битрикс» ?

Предлагая посетителю сайта ввести в регистрационную форму адрес электронной почты, мы получаем в базе определенную толику «мусорных» адресов: намеренно несуществующих или введенных с ошибками. Выполняя рассылки по таким одресам, сервер впустую тратит ресурсы, причем с течением времени эта ситуация усугубляется. Как сделать так, чтобы сообщение об ошибочном адресе письма автоматически удаляло адрес из базы рассылки?
1. Добавим в систему почтовый ящик, на который возвращаются письма от сервера
2. Настраиваем модуль «Почта»
Для этого создаем новое правило. В нем мы будем использовать поле «Условие на PHP скрипте», работающее с массивом $arMessageFields. В нем передается все содержимое письма. Служебное сообщение от сервера содержится в нем как префикс и имеет вид:
This is a MIME-encapsulated message.
--B2FB437C30.1218522354/ myserver.com Content-Description: Notification
Content-Type: text/plain
This is the Postfix program at host myserver.com .
I'm sorry to have to inform you that your message could not
be delivered to one or more recipients. It's attached below.
For further assistance, please send mail to <postmaster>
If you do so, please include this problem report. You can
delete your own text from the attached returned message.
The Postfix program
<my@email.com>: host email-com.mr.outblaze.com [208.36.123.16] said: 550
<my@email.com>: No thank you rejected: Account Unavailable: Possible
Forgery (in reply to RCPT TO command)
Поскольку невалидный адрес передается в письме после сообщения «The Postfix program», то обрабатывать его следует переменной $arMessageFields['MESSAGE_TEXT'] $arMessageFields['BODY'].
3. Вставляем в правило «Условие на PHP скрипте»
Теперь, чтобы правило исключало ошибочный адрес из базы, добавим в поле почтового правила «Условие на PHP скрипте» код:
if (!CModule::IncludeModule("subscribe"))
return;
if (preg_match("#The Postfix program[^<]+<([^>]+)>#",$arMessageFields['MESSAGE_TEXT'],$regs))
{
$email = $regs[1]; // адрес, который надо исключить из рассылки
$rs=CSubscription::GetByEmail($email);
$f = $rs->Fetch();
CSubscription::Delete($f['ID']); // удаляем адрес из рассылки
return true;
}
else
return false;
Готово!
-------------------------------
Спасибо за внимание!
Читайте свежий выпуск «Кладовки программиста» http://www.acrit-studio.ru/pantry-programmer/solutions-to-bugs-and-errors-1c_bitrix/the-experience-of-developing-a-_trade-management_-in-_bitrix/ каждый день!

Как очистить базу рассылки от «мертвых» адресов на «Битрикс» ? - 771703536374

Комментарии

Комментариев нет.