Arquivos históricos do BR-Linux.org apresenta:

Linux in Brazil (Fetchpop e procmail )

Lendo mail via pop: fetchpop + procmail

Uma dúvida comum entre usuários novos de sistemas Unix é sobre qual a maneira ideal de ler os mails do provedor Internet. Muitos adotam soluções integradas, como o Netscape, kmail (do KDE) ou XFMail, capazes de buscar as mensagens, filtrá-las e exibi-las. Outros, insatisfeitos com o "peso" e as limitações destes clientes, procuram por maneiras mais flexíveis, completas e linux-like.

Minha posição pessoal, enquanto usuário, é de que não existe uma maneira "ideal" de realizar esta tarefa. Você tem que procurar a que mais se adapta às suas necessidades e possibilidades. De qualquer forma, vou expor aqui a solução que eu uso em todas as instalações onde tenho acesso de e-mail.

Para começar, você vai precisar ter o procmail instalado. O procmail é um processador de mail, e a maior parte (eu diria todas) as distribuições de Linux o incluem nos seus CDs. Além disso, você vai precisar de uma ferramenta capaz de fazer o download dos mails do seu provedor; a minha favorita é o fetchpop, que você encontra para download no Metalab (http://www.metalab.unc.edu/pub/Linux/system/mail/pop/). Finalmente, você vai precisar de uma ferramenta capaz de exibir/redirecionar/responder seus mails, e também de criar novos mails. Aí a escolha é ampla, e não vou entrar nessa área. Eu uso o tradicional Pine (em modo texto). Outras escolhas podem ser o mutt, Postilion, Balsa e vários outros.

Procmail

O procmail, como já foi dito, é um processador de mail. Entre suas muitas habilidades, está a de filtrar o mail recebido, separando em "pastas" de acordo com o assunto, a origem, o tamanho ou outro critério qualquer. Se bem configurado, ele pode filtrar spam, manter um address-book automático, fazer forward automático de mensagens importantes, e praticamente qualquer coisa que você possa imaginar e seja capaz de programar.

A configuração do procmail tem duas etapas básicas: a criação do arquivo de regras (~/.procmailrc) e a garantia de que o procmail vá ser executado na recepção de mail local.

O arquivo de regras do procmail

Normalmente o procmail procura por um arquivo chamado .procmailrc, gravado em seu diretório pessoal (~/.procmailrc). Este arquivo vai conter a configuração básica do procmail como um todo, e a lista de regras de filtragem.

A configuração básica é bastante simples. Como exemplo, vou citar a que consta na própria documentação do procmail, e que eu costumo usar:

PATH=/bin:/usr/bin:/usr/bin
MAILDIR=$HOME/Mail      
DEFAULT=$MAILDIR/mbox   
LOGFILE=$MAILDIR/from   

A variável MAILDIR define onde você pretende guardar seus mails. Naturalmente, o diretório tem que existir, e você deve ter permissão de escrita nele (se não existir, crie-o. O procmail não vai criá-lo por você). A variável DEFAULT especifica o nome da pasta a ser usada para armazenar mails que não caiam em nenhuma regra. A variável LOGFILE especifica, naturalmente, o arquivo de log das operações do procmail.

Logo após esta configuração, vêm as regras de filtragem. Com estas regras, você pode definir pastas automáticas para os seus mails de listas, mails automáticos, assuntos importantes, etc. A sintaxe das regras pode ser muito complexa, e não vai ser abordada aqui. Darei alguns exemplos, para que você possa criar suas próprias.

Exemplo 1) Filtro por assunto. Digamos que você deseja que todas as mensagens que tenham a palavra Backup em qualquer posição do campo Subject sejam gravadas automaticamente no folder in-backups. A regra ficaria assim:

:0:
* ^Subject.*Backup.*
in-backups

Exemplo 2) Filtro por origem (sender). Esta é a melhor maneira de filtrar e-mails de listas. Vamos imaginar que você é assinante da lista Linux-br da Conectiva, e deseja separar em um folder à parte as 300 mensagens que recebe diariamente da mesma. O primeiro passo é examinar atentamente os cabeçalhos de uma mensagem desta lista, à procura do campo "Sender:". No caso específico desta lista, o campo Sender vem sempre preenchido como:

Sender: linux-br@bazar.conectiva.com.br

Portanto, para filtrar os mails desta lista e guardá-los todos em uma pasta denominada linux-brasil, bastaria a seguinte regra:

:0:
* ^Sender.*linux-br.*conectiva.*
linux-brasil

A sintaxe da linha que começa com um asterisco (a linha condicional) obedece à sintaxe das expressões regulares do Unix. Uma explicação sobre esta sintaxe não caberia aqui - digite

man 7 regex
ou procure um bom livro sobre awk, perl ou sed se quiser dominar o assunto - mas você deve ter percebido que a sequência .* serve como um wildcard ou "coringa" para substituição de múltiplos caracteres.

Juntando tudo

O nosso arquivo .procmailrc de exemplo ficaria assim:

PATH=/bin:/usr/bin:/usr/bin
MAILDIR=$HOME/Mail      
DEFAULT=$MAILDIR/mbox   
LOGFILE=$MAILDIR/from   

:0: * ^Subject.*Backup.* in-backups

:0: * ^Sender.*linux-br.*conectiva.* linux-brasil

Lembre-se que você pode ter dezenas de regras diferentes, e que as regras podem fazer muitas coisas além de armazenar mensagens em pastas. Para conhecer melhor o potencial do procmailrc, digite man procmailrc (sintaxe) ou man procmailrc (exemplos)

Se você tem alguma regra interessante de procmail que deseja compartilhar com os leitores de Linux in Brazil, envie para publicação!

Fetchpop

Se você seguiu os passos do item anterior, você já tem definidas as regras de filtragem de e-mail. Agora, falta o principal: buscar as mensagens do seu servidor, para que as mesmas sejam filtradas e posteriormente liberadas para consulta. Você pode usar vários programas para isto; o fetchmail é o mais popular, mas eu prefiro o fetchpop.

Configurar o fetchpop é muito fácil. Após instalá-lo, na primeira vez que for executado ele se encarregará de perguntar tudo que é necessário saber para baixar suas mensagens do provedor. Veja o exemplo de uma primeira execução:

brain@gibraltar ~> fetchpop -pa
The .fetchhost file does not exit. I will make it for you.
Enter the pop server address.
Pop3 Host: pop.matrix.com.br
Enter login name on pop.matrix.com.br
User: exemplo
Enter the password for user exemplo
Password: exemplo
Enter time for fetchpop to sleep(>=300) 
when running as daemon (-d flag).
Sleep time(in seconds): 300
fetchpop 1.9 release, by Seung-Hong Oh.
using mailbox folder /var/spool/mail/brain

Os textos em negrito são os que você precisa preencher, de acordo com as configurações de seu provedor. Notas: (1) a sua senha vai aparecer na tela; entretanto ela será armazenada de forma criptografada. (2) o campo sleep time diz respeito ao tempo em segundos que o fetchpop vai esperar entre cada nova leitura da caixa de mail se rodado em modo daemon

Após esta configuração inicial, basta você rodar o fetchpop sempre que quiser buscar seus mails no provedor. Entretanto, o fetchpop tem algumas opções de linha de comando que devem ser levadas em conta. São elas:

-p - esta opção força a utilização do procmail após a recepção do mail. Nunca deixe de utilizá-la

-a - busca todos os mails do provedor, inclusive os que já estiverem marcados como "lidos"

-r - remove os mails do provedor conforme for fazendo o download.

-d - inicia o fetchpop em modo daemon, o que significa que ele vai ficar rodando em background e a cada N segundos (definidos na configuração) irá checar novamente a sua caixa postal.

Portanto, se você chamar o fetchpop com o comando fetchpop -pard ele vai entrar em modo daemon, checando a caixa a cada N segundos, buscando todos os mails que estiverem lá, removendo-os do provedor, e filtrando-os localmente através do procmail. Simples não?


O Arquivo Histórico do BR-Linux.org mantém no ar (sem alteração, exceto quanto à formatação) notícias, artigos e outros textos publicados originalmente no site na segunda metade da década de 1990 e na primeira década do século XXI, que contam parte considerável a história do Linux e do Open Source no Brasil. Exceto quando indicado em contrário, a autoria dos textos é de Augusto Campos, e os termos de uso podem ser consultados na capa do BR-Linux.org. Considerando seu caráter histórico, é provável que boa parte dos links estejam quebrados, e que as informações deste texto estejam desatualizadas.