Um guia para os iniciantes no mundo do FreeBSD
Como remover e-mails antigos das caixas postais do seu sistema.
AVISO:
NÃO NOS RESPONSABILIZAMOS POR EVENTUAIS DANOS QUE POSSAM SER CAUSADOS AS SUAS CAIXAS POSTAIS PELO USO DOS SCRIPTS ABAIXO, EFETUE TESTES COM OS MESMOS ANTES DE EXECUTA-LOS NO SEU AMBIENTE DE PRODUÇÃO!!!
USE POR SUA CONTA E RISCO!!!
DEIXE CLARO PARA SEUS USUARIOS QUE EXISTE UMA POLITICA DE PURGA DAS MENSAGENS MAIS ANTIGAS OU VOCE TERÁ PROBLEMAS!!!
Para utilizar os scripts voce deve ter instalado o procmail (disponivel em /usr/ports/mail/procmail) e o bash, e o MTA utilizado deve ser o sendmail.
Copie os scripts abaixo para /usr/local/bin/ e sete a permissão dos mesmos para 755.
O conjunto de scripts apresentados abaixo permitem remover das caixas postais do seu servidor as mensagens mais antigas que X dias. Por exemplo, para remover todas as mensagens com mais de 30 dias voce deve executar:
# mailrm.sh 30
removendo e-mails antigos...
Jun 15 2001 - Removendo todas as mensagens com mais de 30 dias
Caixa postal: ebrandi - Edson Brandi
Caixa postal: root - Root
#
No exemplo acima, todas as mensagens das caixas postais ebrandi e root, com data anterior a 15 de maio foram deletadas.
Observação:
Para executar o script de mailrm.sh é necessario que o serviço de pop3 e smtp estejam parados, do contrario corre-se o risco de corromper a caixa postal do usuario.
mailrm.sh
#!/usr/local/bin/bash
age=$1
MAILDIR=/var/mail
FORMAIL=/usr/local/bin/formail
MAILAGE=/usr/local/bin/mailage.sh
MAILDATE=/usr/local/bin/maildate.sh
clear
set `whoami`
if [ "$1" != "root" ]
then
echo
echo "Vc deve executar este script como root"
echo
exit
fi
echo "removendo e-mails antigos..."
echo
lst=`ls -1A $MAILDIR`
today=`date +'%b %d %Y'`
todayint=`$MAILDATE $today`
keepdate=$[ todayint - age ]
echo "$today - Removendo todas as mensagens com mais de $age dias"
for fil in $lst
do
flb="$MAILDIR/tmp$$"
if [ -s $MAILDIR/"$fil" ]
then
$FORMAIL -b -d -z -s $MAILAGE $keepdate < $MAILDIR/$fil > $flb
oldlines=`wc -l $MAILDIR/$fil | awk '{print $1}'`
newlines=`wc -l $flb | awk '{print $1}'`
if [ $oldlines -ne $newlines ]
then
nou=`grep $fil /etc/passwd | cut -d: -f5`
echo
echo " Caixa postal: $fil - $nou"
echo
mv $flb $MAILDIR/$fil
else
rm $flb
fi
chown $fil $MAILDIR/$fil > /dev/null 2>&1
chgrp $fil $MAILDIR/$fil > /dev/null
chmod 600 $MAILDIR/$fil > /dev/null
else
if [ -a $MAILDIR/"$fil" ]
then
echo " $fil esta vazia, removendo..."
rm $MAILDIR/"$fil"
fi
fi
done
maildate.sh
#!/usr/local/bin/bash
month=$1
day=$2
year=$3
days1900=$[ ( year - 1900 ) * 365 ]
leapdays=$[ ( year - 1900 ) / 4 ]
if [ $[ year % 4 ] -eq 0 ] && \
([ $month = "Jan" ] || [ $month = "Feb" ])
then
leapdays=$[ leapdays - 1]
fi
case $month in
'Jan') daysintoyear=0 ;;
'Feb') daysintoyear=31 ;;
'Mar') daysintoyear=59 ;;
'Apr') daysintoyear=90 ;;
'May') daysintoyear=120 ;;
'Jun') daysintoyear=151 ;;
'Jul') daysintoyear=181 ;;
'Aug') daysintoyear=212 ;;
'Sep') daysintoyear=243 ;;
'Oct') daysintoyear=273 ;;
'Nov') daysintoyear=304 ;;
'Dec') daysintoyear=334 ;;
esac
dayssince1900=$[ daysintoyear + leapdays + days1900 + day ]
echo $dayssince1900
mailage.sh
#!/usr/local/bin/bash
MAILDATE=/usr/local/bin/maildate.sh
function writerest () {
echo "$from $address $dayofweek $month "
echo "$dayofmonth $time $timezone $year"
while read -r inputstring
do
echo $inputstring
done
}
keepdate=$1
read -r from address dayofweek month dayofmonth time year timezone
msgdate=`$MAILDATE $month $dayofmonth $year`
if [ $msgdate -gt $keepdate ]
then
writerest
fi
Observação:
Os scripts apresentados foram adptados para o FreeBSD apartir dos scripts publicados pelo Linux Journal, n.o 47 de Março de 1998.
Se você possui alguma critica , duvida ou sugestão ,entre em contato pelo e-mail: edson.brandi@uol.com.br