+7 495 008 8452 пн.-пт. 10:00 – 17:00
Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.


Предлагая посетителю сайта ввести в регистрационную форму адрес электронной почты, мы получаем в базе определенную толику «мусорных» адресов: намеренно несуществующих или введенных с ошибками. Выполняя рассылки по таким одресам, сервер впустую тратит ресурсы, причем с течением времени эта ситуация усугубляется. Как сделать так, чтобы сообщение об ошибочном адресе письма автоматически удаляло адрес из базы рассылки?

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; 

Готово! 

-------------------------------
Спасибо за внимание!
Читайте свежий выпуск «Кладовки программиста» каждый день!

Назад в раздел

Подписаться на новые материалы раздела:












CAPTCHA