Se postfix
não tentar executar o próprio LDA e invocar deliver
do dovecot, então postfix
não precisa saber nada sobre as cotas.
Se você usou postfixadmin
para o gerenciamento de domínios virtuais, já tem tudo o que precisa para restrições de cota. Você precisa modificar a consulta SQL de dovecot
para buscar cotas de usuários:
user_query = SELECT maildir AS home, \
26 AS uid, \
26 AS gid, \
CONCAT("*:bytes=",quota) AS quota_rule \
FROM mailbox \
WHERE username = '%n@%d' \
AND active=1;
(não copie e cole cegamente esse exemplo, use-o como modelo)
Em seguida, você precisa configurar o plug-in de cota e o serviço de aviso no dovecot.conf
ATUALIZADO:
. . . . . .
# this line enable quota plugin!
mail_plugins = quota
# here is the plugin's configuration
plugin {
quota = maildir:User quota
quota_rule = Junk:ignore
quota_rule2 = Trash:storage=+100M
quota_warning = storage=90%% quota-warning 90 %u %d
quota_warning2 = storage=80%% quota-warning 80 %u %d
quota_exceeded_message = ERROR:422 - Mailbox full, sorry.
. . . . .
}
. . . . .
service quota-warning {
executable = script /path/to/the/overquota.sh
user = $mail_uid
group = $mail_gid
unix_listener quota-warning {
user = $mail_uid
group = $mail_gid
}
}
. . . . .
overquota.sh
deve ser assim:
#!/bin/sh
cat << EOT | /usr/local/libexec/dovecot/dovecot-lda -d $2 -o "plugin/quota=maildir:User quota:noenforcing"
From: postmaster@$3
To: $2
Subject: == Quota warning ==
Content-Type: text/plain; charset="UTF-8"
Your mailbox is $1% full, so clean up your mess, please!
EOT
exit 0
####
Quando deliver
dovecot tenta armazenar a mensagem na caixa de entrada, verifica se a cota foi atingida com limites predefinidos 80% e 90% ou não. Se assim for - o serviço de aviso de cotas é invocado e o script é iniciado, que coloca uma mensagem de aviso na caixa de correio - sem mais checkout de cota.