Как очистить базу рассылки от «мертвых» адресов на «Битрикс» ?
Предлагая посетителю сайта ввести в регистрационную форму адрес электронной почты, мы получаем в базе определенную толику «мусорных» адресов: намеренно несуществующих или введенных с ошибками. Выполняя рассылки по таким одресам, сервер впустую тратит ресурсы, причем с течением времени эта ситуация усугубляется. Как сделать так, чтобы сообщение об ошибочном адресе письма автоматически удаляло адрес из базы рассылки? 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/ каждый день!
Компания АКРИТ
Как очистить базу рассылки от «мертвых» адресов на «Битрикс» ?
Предлагая посетителю сайта ввести в регистрационную форму адрес электронной почты, мы получаем в базе определенную толику «мусорных» адресов: намеренно несуществующих или введенных с ошибками. Выполняя рассылки по таким одресам, сервер впустую тратит ресурсы, причем с течением времени эта ситуация усугубляется. Как сделать так, чтобы сообщение об ошибочном адресе письма автоматически удаляло адрес из базы рассылки?
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/ каждый день!