Как создать цикл в ACL

EXIM, sendmail, postfix, Dovecot и прочие. Решение проблем связанных с работой электронной почты

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Как создать цикл в ACL

Непрочитанное сообщение dikens3 » 2007-09-06 13:28:14

Есть у меня идея (точнее уже работает) загонять все отправленные/принятые письма в mysql и потом делать с ними всё что пожелаешь. Возникла трудность.

Код: Выделить всё

acl_smt_data:
# Лог отправленных писем нашими пользователями (Получатель 1)
 warn
          condition     = ${if eq{$recipients_count}{1}}
          condition     = ${if >{${strlen:$authenticated_id}}{1}}
          set acl_m19   = ${lookup mysql{MYSQL_LOG_DATA_OUTGOING_EMAILS}}
Тут нормально работает, а если получателей много?
Нужно сделать что-то типа:

Код: Выделить всё

# Лог отправленных писем нашими пользователями (Получателей больше 1)
 warn
          condition     = ${if >{$recipients_count}{1}}
          condition     = ${if >{${strlen:$authenticated_id}}{1}}
          начало цикла (переменная от 1 и до $recipients_count
          set acl_m18  = ${extract{МОЯ_ПЕРЕМЕННАЯ}{,}{$recipients}}}
          set acl_m19   = ${lookup mysql{MYSQL_LOG_DATA_OUTGOING_EMAILS}}
          конец цикла
На данный момент в логах это выглядит так:

Код: Выделить всё

From: user@mail.ru To: myuser@mydomain.ru, myuser2@mydomain.ru и т.д. в одной строке
А нужно:

Код: Выделить всё

From: user@mail.ru To: myuser@mydomain.ru
From: user@mail.ru To: myuser2@mydomain.ru
From: user@mail.ru To: myuser3@mydomain.ru
From: user@mail.ru To: myuser4@mydomain.ru
в несколько строк.
Может как по другому можно?
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: Как создать цикл в ACL

Непрочитанное сообщение dikens3 » 2007-09-06 14:25:57

Пока дошел вот до этого, придётся ограничивать максимальное количество получателей.

Код: Выделить всё

# Лог отправленных писем нашими пользователями
# (Получатель 1)
 warn
          condition     = ${if eq{$recipients_count}{1}}
          logwrite      = :panic: "Отправлено письмо от $sender_address на $recipients"

# (Получателей много)
 warn
          condition     = ${if >{$recipients_count}{1}}
          set acl_m16   = ${sg{${extract{1}{,}{$recipients}}}{ }{}}
          logwrite      = :panic: "$recipients_count: Получатель($acl_m16) в базу"
          set acl_m16   = ${sg{${extract{2}{,}{$recipients}}}{ }{}}
          logwrite      = :panic: "$recipients_count: Получатель($acl_m16) в базу"
          condition     = ${if >{$recipients_count}{2}}
          set acl_m16   = ${sg{${extract{3}{,}{$recipients}}}{ }{}}
          logwrite      = :panic: "$recipients_count: Получатель($acl_m16) в базу"
          condition     = ${if >{$recipients_count}{3}}
          set acl_m16   = ${sg{${extract{4}{,}{$recipients}}}{ }{}}
          logwrite      = :panic: "$recipients_count: Получатель($acl_m16) в базу"
          condition     = ${if >{$recipients_count}{4}}
          set acl_m16   = ${sg{${extract{5}{,}{$recipients}}}{ }{}}
          logwrite      = :panic: "$recipients_count: Получатель($acl_m16) в базу"
          condition     = ${if >{$recipients_count}{5}}
          set acl_m16   = ${sg{${extract{6}{,}{$recipients}}}{ }{}}
          logwrite      = :panic: "$recipients_count: Получатель($acl_m16) в базу"
          condition     = ${if >{$recipients_count}{6}}
          set acl_m16   = ${sg{${extract{7}{,}{$recipients}}}{ }{}}
          logwrite      = :panic: "$recipients_count: Получатель($acl_m16) в базу"
И т.д.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35426
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Как создать цикл в ACL

Непрочитанное сообщение Alex Keda » 2007-09-06 14:27:35

напиши процедуру на встроенном perl...
а то ерундой маешься какой-то :)
Убей их всех! Бог потом рассортирует...

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: Как создать цикл в ACL

Непрочитанное сообщение dikens3 » 2007-09-06 14:38:07

Знал бы perl, написал бы :-)
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35426
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Как создать цикл в ACL

Непрочитанное сообщение Alex Keda » 2007-09-06 14:44:29

тот же php
тока более убогий :)
кстати - я приводил примеры процедур - в теме где была обработка расылок эксчейнджа.
=========
надо кстаи отписаься там - я его ещё допилил...
Убей их всех! Бог потом рассортирует...