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

router для message_size_limit

Добавлено: 2012-05-02 15:45:08
orfan
Заменяю postfix на exim, за основу взял http://www.lissyara.su/articles/freebsd ... x_to_exim/
После замены MTA на exim, почта принимается/отправляется. Но возник вопрос, как поступать с сообщениями, которые по размеру превосходят message_size_limit .
Хочется сделать так, чтобы отправителю отсылался отлуп, что его сообщение больше положенного размера.
Нашел пример роутера

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

ditch_maxmsgsize:
  driver = redirect
  allow_fail
  condition = ${if >{$message_size}{${lookup mysql{select users.maxmsgsize from users,domains \
                where localpart = '${quote_mysql:$local_part}' \
                and domain = '${quote_mysql:$domain}' \
                and users.maxmsgsize > 0 \
                and users.domain_id=domains.domain_id }{${value}K}fail}} {yes}{no}}
  data = :fail:\n\Your message is too big.\n \
                Your message was rejected because the user $local_part@$domain\n \
                does not accept messages larger than \
                ${lookup mysql{select users.maxmsgsize from users,domains \
                where localpart = '${quote_mysql:$local_part}' \
                and domain = '${quote_mysql:$domain}' \
                and users.maxmsgsize > 0 \
                and users.domain_id=domains.domain_id}{${value}K}fail} Kb.
  # local_part_suffix = -*
  # local_part_suffix_optional
  retry_use_local_part
Формат БД, которую использовал ранне postfix, а теперь юзает exim отличается от формата БД, который указан в роутере ditch_maxmsgsize:
condition изменил,

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

ditch_maxmsgsize:
    driver = redirect
    allow_fail
    condition = ${if > {$message_size}{20M}}
    data = :fail:\n\Your message is too big.\n \
    Your message was rejected because the user $local_part@$domain\n \
    does not accept messages larger than 20 M. 
    # local_part_suffix = -*
    # local_part_suffix_optional
      retry_use_local_part
Но роутер не отрабатывает =( сообщения свыше 20М отсылаются. Помогите правильный condition написать.

Re: router для message_size_limit

Добавлено: 2012-05-03 7:58:47
Alex Keda
непонял что вы хотите сделать...

Re: router для message_size_limit

Добавлено: 2012-05-03 10:01:54
orfan
Я и сам только разобрался =). Все работает как и должно. Не сразу разобрался кому отлуп должен приходить. =(

Re: router для message_size_limit

Добавлено: 2012-05-03 15:41:05
dikens3
Я сразу в сессии выдавал соответствующее сообщение, и никаких рикошетов. На этапе дата всё делается.

Re: router для message_size_limit

Добавлено: 2012-05-03 21:01:32
orfan
Можно пример увидеть?

Re: router для message_size_limit

Добавлено: 2012-05-03 22:02:42
dikens3
Ограничение на размер входящий сообщений:

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

# Квота на входящее сообщение
MYSQL_SIZEMESS          = SELECT `quota-in` FROM users WHERE username='${quote_mysql:$local_part}' AND domain='${quote_mysql:$domain}'
DEFAULT_SIZE_LIMIT      = 25M
MYSQL_ALIAS_QUOTA       = SELECT `quota-in` FROM users WHERE username=(SELECT recipients FROM aliases WHERE dst_username='${quote_mysql:$local_part}' AND dst_domain='${quote_mysql:$domain}')

# Квота на исходящее сообщение
MYSQL_MESSOUT           = SELECT `quota-out` FROM users WHERE username='${quote_mysql:$local_part}' AND domain='${quote_mysql:$domain}'
DEFAULT_MESSOUT_LIMIT   = 25M


.ifdef MYSQL_SIZEMESS
# Ограничение на приём сообщения для наших пользователей, если сообщение больше определённого размера не принимаем.
  deny    message       = Too big size of message. Message size limit = ${lookup mysql{MYSQL_SIZEMESS}{${value}M}{DEFAULT_SIZE_LIMIT}}.
          domains       = +local_domains
          condition     = ${if > {$message_size}{${lookup mysql{MYSQL_SIZEMESS}{${value}M}{DEFAULT_SIZE_LIMIT}}}}
.endif

.ifdef MYSQL_ALIAS_QUOTA
# Ограничение на приём сообщения для алиасов наших пользователей, если сообщение больше определённого размера не принимаем.
  deny    message       = Too big size of message. Message size limit = ${lookup mysql{MYSQL_ALIAS_QUOTA}{${value}M}{DEFAULT_SIZE_LIMIT}}.
          domains       = +local_domains
          condition     = ${if > {$message_size}{${lookup mysql{MYSQL_ALIAS_QUOTA}{${value}M}{DEFAULT_SIZE_LIMIT}}}}
.endif
Это можно и в rcpt закинуть.


Это прочитай, там и про секцию data есть. Важно понять, что есть esmtp и smtp. В smtp не указывается размер получаемого письма и он будет известен только на этапе data.
http://forum.lissyara.su/viewtopic.php?f=20&t=3326

http://ru.wikipedia.org/wiki/SMTP