Solução completa de serviço de correio baseado em software livre (Debian GNU/Linux)
Recompilação do artigo "Postfix-2 + domínios virtuais + MySQL + SASL + PostfixAdmin", de autoria do Sr. Marco A. S. Máximo. Nesse novo artigo os passos foram tomados levando em consideração os recursos do Debian e usando (sempre que possível) os pacotes dos repositórios oficiais.
Parte 8: Cota de disco
Quem vai ser responsável pelo controle de cota de disco nesse ambiente é o Maildrop.
Os valores de cotas serão cadastrados no banco de dados, sendo independente para cada usuário. O Maildrop irá ler os tabelas do MySQL e conforme o valor especificado, ele irá fazer o controle de tal cota.
Quando você enviou um email para fulano@dominio1.com.br, o Maildrop criou o arquivo "maildirsize" dentro do ~/MAILDIR/ do usuário, ex:
# ls /var/spool/correio/dominio1.com.br/fulano/Maildir
courierimapuiddb cur/ maildirsize new/ tmp/
# cat /var/spool/correio/dominio1.com.br/fulano/Maildir/maildirsize
10000000S
796 1
Toda vez que o usuário recebe um email, o Maildrop calcula o espaço utilizado e escreve nesse arquivo. Vamos testar se a cota esta funcionado:
Primeiro vamos alterar o valor da cota do usuário para um valor menor, 1MB é o suficiente.
Execute no shell:
# mysql -D postfix -pxxxx -e "SELECT username,quota FROM mailbox WHERE username='fulano@dominio1.com.br';"
# mysql -D postfix -pxxxxx -e "UPDATE mailbox SET quota='1000000S' WHERE username='fulano@dominio1.com.br';"
# mysql -D postfix -pxxxxx -e "SELECT username,quota FROM mailbox WHERE username='fulano@dominio1.com.br';"
# ls -lh /tmp/arquivo.tar
-rw-r--r-- 1 root root 381K Nov 7 15:06 /tmp/arquivo.tar
# mailm -t fulano@dominio1.com.br -ad /tmp/arquivo.tar
# mailm -t fulano@dominio1.com.br -ad /tmp/arquivo.tar
******************** LOG DO POSTFIX *******************
Nov 7 15:08:13 teste postfix/pipe[20706]: 0CA0A14ECF: to=<fulano@dominio1.com.br>, relay=maildrop, delay=0, status=bounced (permission denied. Command output: maildrop: maildir over quota. )
*******************************************************
Lembrando, que 1000000 não corresponde a 1MB precisamente :-)
Os valores de cotas serão cadastrados no banco de dados, sendo independente para cada usuário. O Maildrop irá ler os tabelas do MySQL e conforme o valor especificado, ele irá fazer o controle de tal cota.
Quando você enviou um email para fulano@dominio1.com.br, o Maildrop criou o arquivo "maildirsize" dentro do ~/MAILDIR/ do usuário, ex:
# ls /var/spool/correio/dominio1.com.br/fulano/Maildir
courierimapuiddb cur/ maildirsize new/ tmp/
# cat /var/spool/correio/dominio1.com.br/fulano/Maildir/maildirsize
10000000S
796 1
Toda vez que o usuário recebe um email, o Maildrop calcula o espaço utilizado e escreve nesse arquivo. Vamos testar se a cota esta funcionado:
Primeiro vamos alterar o valor da cota do usuário para um valor menor, 1MB é o suficiente.
Execute no shell:
# mysql -D postfix -pxxxx -e "SELECT username,quota FROM mailbox WHERE username='fulano@dominio1.com.br';"
+------------------------------+-----------+ | username | quota | +------------------------------+-----------+ | fulano@dominio1.com.br | 10000000S | +------------------------------+-----------+A cota está em 10MB, vamos altera-la para 1MB.
# mysql -D postfix -pxxxxx -e "UPDATE mailbox SET quota='1000000S' WHERE username='fulano@dominio1.com.br';"
# mysql -D postfix -pxxxxx -e "SELECT username,quota FROM mailbox WHERE username='fulano@dominio1.com.br';"
+------------------------------+----------+ | username | quota | +------------------------------+----------+ | fulano@dominio1.com.br | 1000000S | +------------------------------+----------+Vamos agora enviar email até que sua caixa chegue no limite especificado. Para isso vou usar um programa que envia email com anexo chamado "MAILM". Baixe-o em:
# ls -lh /tmp/arquivo.tar
-rw-r--r-- 1 root root 381K Nov 7 15:06 /tmp/arquivo.tar
# mailm -t fulano@dominio1.com.br -ad /tmp/arquivo.tar
# mailm -t fulano@dominio1.com.br -ad /tmp/arquivo.tar
******************** LOG DO POSTFIX *******************
Nov 7 15:08:13 teste postfix/pipe[20706]: 0CA0A14ECF: to=<fulano@dominio1.com.br>, relay=maildrop, delay=0, status=bounced (permission denied. Command output: maildrop: maildir over quota. )
*******************************************************
Lembrando, que 1000000 não corresponde a 1MB precisamente :-)
Configurações bem detalhadas... Com certeza vai facilitar a vida de muita gente.
Fica a sugestão para implementar um webmail...