Назад | Перейти на главную страницу

Пользователь exim & dovecot превышает квоту: отклонять при отправке?

У меня есть почтовый сервер exim + dovecot с запущенной квотой для каждого пользователя (через поиск mysql). сервер отклоняет входящую почту от нелокальных отправителей, когда целевой локальный почтовый ящик превышает квоту. локальный пользователь может отправлять сообщения без ограничений, даже если его почтовый ящик превышает квоту.

Я бы предпочел, чтобы квота проверялась, когда локальный пользователь пытается отправить электронное письмо и возвращает сообщение об ошибке типа «ваша учетная запись превышает квоту, сначала удалите несколько писем». входящая почта от нелокальных отправителей в локальный почтовый ящик должна приниматься независимо от квоты.

аналогичная конфигурация описана на "Настройка exim":

acl_check_rcpt:
#...
  # Deny sending for local users if almost at quota
        # only run for local domains
  deny  sender_domains = +local_domains
        # list all addresses that are aliases
        # though people shouldn't be sending as
        # them, many scripts do
        !senders = ^postmaster@.*:\
                   ^root@.*:\
                   ^webmaster@.*:\
                   ^error-.*@.*:\
                   ^bounce-.*@.*
        # might need to exclude webmail server here
        # if it does not report the error message
        # note: squirrelmail tested ok for me
        hosts = +local_hosts
        # verify your email client expunges on emptying the trash
        message = You have too much email stored. Please delete some\n\
                  and empty the trash. Then you can send.
        log_message = $sender_address_local_part is over send quota
        condition = ${run{sudo -u root /etc/exim/check-sendquota.sh $sender_address_local_part}{no}{yes}}

он использует специальный сценарий для проверки размера почтового ящика - по соображениям производительности я предпочел бы использовать уже существующие файлы / систему квот, но я не могу определить правильную строку «условия». Я не вижу из текущей конфигурации, где exim фактически проверяет размер почтового ящика. текущая конфигурация среди прочего содержит:

exim4.conf:

local_delivery:
    driver = appendfile
    maildir_format
    user = mailserv
    group = mailserv
    mode = 0660
    mode_fail_narrower = false
    envelope_to_add = true
    return_path_add = true
    maildir_tag = ,S=$message_size
    quota_size_regex = ,S=(\d+)
    quota =  ${lookup mysql{SELECT CONCAT(quota, "M") FROM users WHERE account='${local_part}@${domain}'}{$value}{7M}}
    directory = ${lookup mysql{SELECT maildir FROM users WHERE account='${local_part}@${domain}'}}

dovecot.conf:

protocol imap {
    mail_plugins = quota imap_quota
}
plugin {
    quota = maildir:user
    quota_rule = *:storage=5GB
}

Вам необходимо добавить аналогичную проверку квоты в ваш acl_not_smtp acl, этот acl используется для всей почты без smtp, отправленной локальными пользователями / процессами

http://www.exim.org/exim-html-current/doc/html/spec_html/ch40.html