приветствую
Victor Ustugov wrote:
> в mailertable добавлен новый тип транспорта lmtplocal для доставки почты
> локальных доменов на нелокальные lmtp сервера.
>> от типа транспорта lmtp он отличается тем, что применяется только к
> письмам из локальных доменов и работает уже после разворачивания алиасов
> до штатной локальной доставки, в то время как транспорт доставка через
> mailertable с использованием транспорта lmtp работает еще до dnslookup
> роутера.
>> данный транспорт может использоваться в случаях, когда база учетных
> записей и алиасов едина для нескольких почтовых серверов, а доставка с
> основного сервера производится по lmtp уже после разворачивания алиасов.
в первую очередь для описанного выше случая, а также для всех случаев,
когда данные о размере и количестве писем накапливаются не в файле
maildirsize в мейлдире пользователей, введены два новых значения для
переменной описания проверки квот confVIRT_MDIR_QUOTA -
VERIFY_RCPT_CUSTOM_DEFER и VERIFY_RCPT_CUSTOM_REJECT.
в общем случае новые значения confVIRT_MDIR_QUOTA могут использоваться
при необходимости проверять квоты на этапе RCPT To пользовательским
способом, например запросами к БД (например MySQL), LDAP серверу и т. д.
отличаются значения типом ответа отправителю, что следует из названий
самих значений.
при использовании VERIFY_RCPT_CUSTOM_DEFER и VERIFY_RCPT_CUSTOM_REJECT
условие проверки квот необходимо описать в переменной
confVIRT_MDIR_QUOTA_CUSTOM_CONDITION не в виде запроса, а в виде
полноценной конструкции условия.
если квота превышена, то условие должно вернуть yes, если не превышена,
то no.
пример:
define(`confVIRT_MDIR_QUOTA_CUSTOM_CONDITION', `${lookup mysql{SELECT
passwd.quota_limit_bytes-quota.bytes AS free FROM passwd, quota WHERE
passwd.id = "${quote_mysql:$local_part@$domain}" AND quota.username =
"${quote_mysql:$local_part@$domain}"}{${if <{${eval:$value-${if
<{$message_size}{1}{10k}{$message_size}}}}{0}{yes}{no}}}{no}}')dnl
строки явно будут перенесены, но разобрать логику вполне можно.
в данном случае запросом к БД получена разница между значением квоты,
хранящемся в таблице учетных записей почтовых пользователей, и реальным
размером всех писем, хранящимся в отдельной таблице, и обновляемым
IMAP/POP3 сервером, а также LDA (например, dovecot и его deliver,
который на самом деле dovecot-lda), затем от нее отнимается размер
письма (если он передан в параметре SIZE команды MAIL From, если не
передан, то используется среднепотолочный размер 10k), а полученное
значение сравнивается с нулем.
если полученная величина меньше нуля, то квота превышена.
следует иметь ввиду, что данная проверка квоты на этапе RCPT To работает
одновременно с проверкой существования пользователей.
т. о. проверка квоты не будет осуществляться для пользователей,
перечисленных в файле skip_verify_recipient
--
Best wishes Victor Ustugov mailto:victor на corvax.kiev.ua
public GnuPG/PGP key: http://victor.corvax.kiev.ua/corvax.asc
ICQ UIN: 371808614 JID: corvax на corvax.kiev.ua
nic-handle: CRV-UANIC