Страница 1 из 1

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

Добавлено: 2007-09-06 13:28:14
dikens3
Есть у меня идея (точнее уже работает) загонять все отправленные/принятые письма в 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
в несколько строк.
Может как по другому можно?

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

Добавлено: 2007-09-06 14:25:57
dikens3
Пока дошел вот до этого, придётся ограничивать максимальное количество получателей.

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

# Лог отправленных писем нашими пользователями
# (Получатель 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) в базу"
И т.д.

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

Добавлено: 2007-09-06 14:27:35
Alex Keda
напиши процедуру на встроенном perl...
а то ерундой маешься какой-то :)

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

Добавлено: 2007-09-06 14:38:07
dikens3
Знал бы perl, написал бы :-)

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

Добавлено: 2007-09-06 14:44:29
Alex Keda
тот же php
тока более убогий :)
кстати - я приводил примеры процедур - в теме где была обработка расылок эксчейнджа.
=========
надо кстаи отписаься там - я его ещё допилил...