Aqui tem uma solucao simples e pratica pra manusear seus emails com o mutt e o fetchmail, e o sendEmail pra enviar os emails pro SMTP do provedor, sem daemons adicionais para "detonar" a memoria e a CPU do seu micrinho. Com alguns scripts, podemos resolver essa situacao...
O formato Maildir consiste em tratar cada mensagem como um arquivo independente dentro de um diretorio (por isso MAIL+DIR). Esse formato eh bastante interessante porque agrega muitas vantagens:
Para o sendEmail funcionar, eu montei um patch que adiciona uma flag de compatibilidade com o Sendmail (pro Mutt funcionar transparentemente) alem de permitir SMTP autenticado.
O patch esta em http://www.unitednerds.org/projects/mail/
Pra configurar o Mutt, edite o arquivo .muttrc dentro do seu Home Directory. No site www.mutt.org, tem, no link de configuracoes, um site que monta o .muttrc pra voce, uma vez que ha MUITAS opcoes possiveis de configuracao. Pra quem quer soh o fejao-com-arroz, aqui vao as configuracoes do Mutt que eu uso:
~/.muttrc: # # O nome e email que aparecem no "From" do email # set realname = "Deives Michellis" set from = "dmichellis@yahoo.com" # Defaults set status_on_top = yes set mail_check =5 set delete = yes set beep_new = yes set check_new = yes set mark_old = no set menu_scroll = yes # # Macro para mostrar as caixas com novos emails automaticamente; basta digitar "c" # macro index c '<enter>c?<toggle-mailboxes>' # # Verifica novos emails em multiplas contas # mailboxes ~/Mail/FUG ~/Mail/Fun ~/Mail/Inbox ~/Mail/Jobs ~/Mail/Lidas ~/Mail/SecuriTeam ~/Mail/Slack-Users ~/Mail/Slackzine # # Eh aqui que o Mutt deixa TODOS os outros mail clients pra tras... Seu mecanismo de Threading dos emails eh impressionante :) # set sort = threads set sort_aux = reverse-date # # Mover as mensagens ja lidas pro diretorio de Lidas # set move = ask-yes # # Configuracoes de mailbox/maildirs # set spoolfile = "~/Mail/Inbox/" set mbox = "~/Mail/Lidas/" set tmpdir = "~/Mail/tmp/" set folder = "~/Mail/" # # Se voce for usar filtros no dropmaildir.sh, pode pedir para o Mutt verificar # novas mensagens em outras caixas alem da Inbox. Basta adiciona-las na # listinha abaixo: # mailboxes = ~/Mail/Inbox/ ~/Mail/Securanca/ ~/Mail/UOL/ # # Mude as opcoes pra corresponder as da sua conta de email # set sendmail = "~/bin/sendEmail -f dmichellis@yahoo.com -s smtp.terra.com.br -q -l /home/thefallen/Mail/logs/sendEmail.log -C -smtpuser dmichellis@terra.com.br -smtppasswd nononono -t " # # Se voce for usar o GnuPG pra assinar seus emails com certificado digital; fica pro proximo tutorial :) # #source ~/.mutt-gnupgrc # # Vamos separar os Alias/catalogo de enderecos num arquivo separado para nao "zonear" o muttrc :) # source ~/.mutt-alias
E pronto. Temos o Mutt ja configurado pra ler e enviar os emails.
Vamos agora mexer no resto do sistema :)
Depois de instalado o fetchmail, vamos configura-lo. O fetchmail ja vem com um utilitario pra fazer isso (o fetchmailconf), mas como nossas opcoes de configuracao sao poucas, vamos faze-las manualmente.
Edite o arquivo ~/.fetchmailrc e adicione as seguintes linhas:
~/.fetchmailrc:
set syslog
set postmaster "postmaster"
set nobouncemail
set no spambounce
set properties ""
set daemon 2
poll pop.sao.terra.com.br with proto POP3
user 'dmichellis' there with password 'nonono' is thefallen here mda '~/bin/dropmaildir.sh Inbox'
poll pop3.uol.com.br with proto POP3
user 'dmichellis' there with password 'nonono' is thefallen here mda '~/bin/dropmaildir.sh Inbox'
Essa configuracao do fetchmail pede o script "~/bin/dropmaildir.sh".
O dropmaildir.sh eh o responsavel por salvar a mensagem no formato Maildir.
Aqui vai o dito cujo:
~/bin/dropmaildir.sh:
#!/bin/sh
#
# Script pra salvar um email em um determinado diretorio com a estrutura Maildir
#
# A estrutura Maildir consiste em ter 3 diretorios: cur, new e tmp.
#
# O cur sao as msgs ja lidas, ou seja, na caixa corrente. o new sao as novas mensagens que vc ainda nao leu. o tmp ta na cara o q eh, neh? :)
#
CAIXA=$1
if [ "x$CAIXA" = "x" ]; then
CAIXA="Inbox"
fi
BASEDIR=/home/thefallen/Mail/
DIRETORIO=$BASEDIR/$CAIXA
if [ ! -d $DIRETORIO/new ]; then
mkdir -p $DIRETORIO/new
fi
if [ ! -d $DIRETORIO/tmp ]; then
mkdir -p $DIRETORIO/tmp
fi
if [ ! -d $DIRETORIO/cur ]; then
mkdir -p $DIRETORIO/cur
fi
DATA=`date +%Y%m%d%H%M%S`
#
# O diretorio "tmp" eh usado para "montar" a mensagem e depois move-la para o diretorio apropriado.
# Isso impede q algum client leia a mensage enqto ela esta sendo montada (o q acontece qdo salvamos direto no new).
#
# Adicionalmente, mantem o nome do arquivo temporario em uma variavel
#
ARQNAME=$DIRETORIO/tmp/msg.$DATA.$$.$RANDOM
cat >> $ARQNAME
#
# Exemplo de filtros
# Use sempre o comando "elif" (else + if) para os filtros, para q uma mesma mensagem nao seja filtrada mais de uma vez
#
if [ `grep -i "^subject: [Dicas-L]" $ARQNAME | wc -l ` -ne 0 ]; then
mv -f $ARQNAME $BASEDIR/DicasL/new/
elif [ `grep -i "buddy@somewhere.com" $ARQNAME | grep -i "^From:" | wc -l ` -ne 0 ]; then
# Para adicionar mais filtros, basta copiar esse laco "elif" e mudar os "greps"
mv -f $ARQNAME $BASEDIR/Buddy/new/
else
#
# Se nao cair em nenhum filtro, mova do diretorio temporario para o "new"
#
mv -f $ARQNAME $DIRETORIO/new/
fi
E pronto :). Esse script permite que voce "gerencie" mais de uma caixa, ou que separe por Contas. Na configuracao do fetchmail, por exemplo, eu poderia alterar:
~/.fetchmailrc:
poll pop.sao.terra.com.br with proto POP3
user 'dmichellis' there with password 'nonono' is thefallen here mda '~/bin/dropmaildir.sh Terra'
poll pop3.uol.com.br with proto POP3
user 'dmichellis' there with password 'nonono' is thefallen here mda '~/bin/dropmaildir.sh UOL'
Isso faria com que as mensagens obtidas do POP3 do Terra fossem pro Maildir do Terra, e as do UOL fossem pro Maildir do UOL. Legal, neh? :)
Voce pode configurar o fetchmail pra rodar via cron com uma linha similar a essa no seu crontab:
0 * * * * /lugar/onde/esta/o/fetchmail -a -d0
Pra criar um diretorio Maildir, eh bastante simples. Simplesmente crie um diretorio com 3 subdiretorios: cur, tmp e new.
Aqui vai um scriptzinho que faz isso:
~/bin/makemaildir.sh: #!/bin/sh mkdir -p $1/cur $1/tmp $1/new
Basta rodar o comando:
thefallen@KlingonRealm:~/Mail$ makemaildir.sh Inbox
Para configurarmos o sendEmail, primeiro precisamos "patchea-lo" para ser usado com o Mutt (Sendmail-compatibility) e depois pra usar SMTPAuth, se for o caso no seu provedor.
Uma vez que voce fez o download do sendEmail, va no diretorio que acabou de ser criado e rode o patch:
thefallen@KlingonRealm:/usr/src/sendEmail-1.42$ bunzip2 -c sendEmail-1.42-SMTPAUTH_SendmailCompat.patch.bz2 | patch -p 1 --dry-run ...
Se nao aparecer nenhum erro, rode o comando novamente sem o "--dry-run":
thefallen@KlingonRealm:/usr/src/sendEmail-1.42$ bunzip2 -c sendEmail-1.42-SMTPAUTH_SendmailCompat.patch.bz2 | patch -p 1
Pronto. rode agora o comando "./sendEmail --help". Verifique se as seguintes linhas aparecem:
...
-C Activate Sendmail-style compatibility (Message will be sent to SMTP "as-is")
...
SMPTAuth (AUTH PLAIN only!):
-smtpuser Username to authenticate as
-smtppasswd Password to authenticate with
...
E pronto. Agora eh soh entrar no Mutt e mandar um email pra ver se tudo esta ok :)
Aqui vai um "brinde" pra quem tem email no Yahoo! - o FetchYahoo! :) - http://fetchyahoo.sourceforge.net/
Esse script em Perl (versao 2.5.5 na escrita deste documento) requere alguns modulos do Perl que podem facilmente ser instalados via CPAN: HTML::Entities, LWP::UserAgent, MIME::Entity, Net:SMTP, Crypt::SSLeay (https)
Como a ideia desse documento nao era o FetchYahoo!, aqui vao soh as dicas pra faze-lo funcionar com essa estrutura que ja montamos.
Junto com ele, ja vem o arquivo fetchyahoorc. Copie-o para seu home directory como .fetchyahoorc, e altere os seguintes dados:
~/.fetchyahoorc: username = seuyahooid password = senha use-spool = 1 no-delete = 0 spool = /lugar/onde/esta/o/dropmaildir.sh spool-mode = pipe logout = 1
Soh agenda-lo no cron pra rodar com seu usuario com uma linha similar a essa:
0 * * * * /lugar/onde/esta/o/fetchyahoo.pl
Esse eh um jeito de receber e enviar emails sem precisar subir um SMTP/MTA (Postfix, Sendmail, Exim, Qmail, etc), que normalmente consomem uma quantia razoavel da sua memoria, se voce ja estiver brigando byte-a-byte com ela :)
Tenho achado bastante pratico o formato Maildir, pois eh bem facil fazer um "grep" na mailbox e mover os arquivos pra outro diretorio. Espero que seja util pra quem for usa-lo tambem (especialmente pra quem tem conta no Terra que exige SMTP autenticado) :)
Deives Michellis "thefallen" <dmichellis@yahoo.com | thefallen@unitednerds.org>
Criado com o txt2tags