Mutt - Guia Definitivo
Colaboração: Fred Cox Junior
Data de Publicação: 01 de Junho de 2005
Como obter este documento
Você poderá obter a versão tarball deste documento através dos seguintes links.
Endereços
Arquivo | Tamanho | Assinatura GPG | Chave Pública |
---|---|---|---|
mutt.texto.tar.gz | 978K | mutt.texto.tar.gz.asc | pubkey.gpg |
Como verificar a assinatura digital
- Baixe e importe a minha chave pública:
$ wget http://www.fredcoxjr.net/artigos/Mutt/sign/pubkey.gpg $ gpg --import pubkey.gpg
- Baixe arquivo de assinatura digital mutt.texto.tar.gz.asc:
$ wget http://www.fredcoxjr.net/artigos/mutt.texto.tar.gz.asc
- Verifique a autenticidade com o seguinte comando:
$ gpg --verify mutt.texto.tar.gz.asc mutt.texto.tar.gz
Apresentação
Hoje o email executa um papel absolutamente essencial no processo da comunicação. A praticidade e rapidez com que se pode enviar mensagens pela internet a vários destinatários elegeu esta ferramenta como um dos principais recursos de comunicação utilizados na atualidade.
Mutt é um programa cliente de email que proporciona um alto grau de flexibilização possibilitando ao ao usuário escolher e adotar os mais diversos critérios e customizações que outros softwares clientes não possuem.
Roda em GNU/linux, BSD Unix, Sun Solaris ou Apple OS-X.
Sua característica altamente personalizável permite que o usuário determine como e com quais recursos deseja receber, enviar, criptografar e filtrar os emails das suas caixas de mensagens.
Mutt é mantido por Michael R. Elkins distribuído sob licença GNU - General Public License. O site oficial pode ser acessado através do seguinte endereço:
Algumas características do Mutt são:
- suporte ao GNUPG
- comunidade de programadores em constante desenvolvimento
- suporte a expressões regulares
- suporte a MIME
- altamente customizável através de atribuições de teclas e macros
- permite controle total dos cabeçalhos dos emails no modo de edição de mensagens
- suporte a listas de discussões e autoresposta
MTA, MUA, MRA e LDA
MUA (Mail User Agent)
Um MUA ou agente de usuário é um programa que permite aos usuários ler, salvar e compor mensagens de email.
São exemplos de agentes de usuários:
- elm - mantido pelo Elm Development Group e por Kari Hurta, disponível em http://www.instinct.org/elm/.
- mutt - de Michael Elkins disponível em http://www.mutt.org/.
- pine desenvolvido pelo Departamento de Comunicações e Computação da Universidade de Washington disponível em http://www.washington.edu/pine/.
- Mozilla Thunderbird desenvolvido pela Mozilla Organization e disponível em http://www.mozilla.org/products/thunderbird/.
MTA (Mail Transfer Agent)
Um MTA é um software encarregado de direcionar, entregar e receber mensagens entre servidores.
Um agente de transporte deve aceitar e-mail de um agente de usuário. compreender os endereços dos receptores e de alguma maneira entregar o email para os hosts corretos para entrega.
Os agentes de transporte falam SMTP - (Simple Mail Transfer Protocol), protocolo de transporte de e-mail simples) definido na RFC2821 ou o protocolo ESMTP (Extended Simple Mail Transfer Protocol), uma versão extendida do SMTP.
Vários MTAs estão disponíveis na internet; são exemplos:
- Qmail - http://www.qmail.org/top.html escrito por Dan Bernstein e considerado o mais seguro e estável MTA.
- Postfix - http://www.postfix.org/
- Exim - http://www.exim.org/
- Sendmail - http://www.sendmail.org/ este é o mais antigo e popular.
MRA (Mail Retrieval Agent (POP/IMAP client)
É um programa responsável por obter as mensagens de um servidor de e-mail. Ele realiza a conexão autenticada com o servidor POP ou IMAP e entrega as mensagens para serem filtradas pelo LDA.
São exemplos de MRA:
- fetchmail
- getmail, retchmail
LDA (Local Delivery Agent)
Um LDA ou agente de entrega aceita e-mail de um agente de transporte remetendo aos receptores locais apropriados.
O LDA ler uma mensagem de email da entrada padrão e entrega a mensagem para uma específica caixa de mensagens de acordo com as instruções de seleção, filtragem e política anti-spam contidas em um arquivo de configuração.
Um agente de entrega pode checar a sintax das regras contidas no arquivo de configuração e entregar a mensagem em caixas postais alternativas e específicas.
Os LDAs mais utilizados hoje são os seguintes:
Fluxograma de um Email
A figura abaixo mostra o fluxo de uma mensagem de correio eletrônico entre dois hosts.
A mensagem sai do computador do usuário 1 e vai até o computador do usuário 2. Note que em ambos os casos é necessária a presença de MTA, MUA e LDA. O processo de entrega é auxiliado por meio do LDA. Neste texto utilizaremos o Procmail como LDA.
Anatomia de uma mensagem e-mail
Uma mensagem de email se divide em três seções:
- Envelope
- Cabeçalho
- Corpo
Cada seção tem um propósito de informação que iremos estudar adiante.
Envelope
O envelope não é visualizado pelo usuário - é utilizado pelo MTA (Mail Transfer Agent) para determinar para quem a mensagem irá ser entregue ou para onde ela deve ser retornada.
Cabeçalho
O cabeçalho é a parte mais importante do email para Administradores de sistemas. A partir dele você pode realizar rastreamento reverso para saber a origem da mensagem, principalmente quando oriunda de um spammer, ou efetuar depuração.
Ele é composto de pares de chaves definidos na RFC822. O comprimento de cada par de chave é de apenas uma linha de texto e se o texto ultrapassar este limite, deve ser acompanhado de um espaço ou tabulação TAB..
Alguns cabeçalhos são obrigatórios (Date, From, To ou BCC) e outros são inseridos pelo MTA e pelo agente de usuário.
Cabeçalhos iniciando com um 'X-' são cabeçalhos personalizados, logo você pode acrescentar um 'X-Organization: Minha Empresa' em seus mails, e este cabeçalho irá ser propagado até o host destino.
Um cabeçalho é composto por uma sequência de linhas consistindo de pares de chaves.
Uma linha corresponde a uma sequência de strings de um ou mais bytes. Uma linha está vazia se contém zero bytes. Toda linha em um cabeçalho possui um ou mais bytes.
Um campo de cabeçalho começa com uma sequência de strings contendo um nome e um valor separados por dois pontos ':'.
O exemplo seguinte contém cinco campos de cabeçalho e seis linhas:
Received: (qmail-queue invoked by uid 666); 30 Jul 1996 11:54:54 -0000 From: "D. J. Bernstein" <djb@silverton.berkeley.edu> To: fred@silverton.berkeley.edu Date: 30 Jul 1996 11:54:54 -0000 Subject: Go, Bears!
Corpo
É o conteúdo da mensagem propriamente dito. O conteúdo tem que ser codificado em texto ASCII.
O corpo é separado do cabeçalho por uma linha em branco.
Fetchmail
Fetchmail é um utilitário que extrai os emails de caixas postais em servidores de emails remotos e encaminha para um sistema local de entrega de mensagens; o agente de entrega LDA (Local Delivery Agent).
Este utilitário suporta todos os protocolos remotos de acesso e extração de email, tais como: POP2, POP3, RPOP, APOP, KPOP, IMAP, ETRN e ODMR, além de também suportar IPv6 e IPSEC.
Fetchmail pode rodar em modo daemon com intervalo de tempo pré determinado para checar as caixas postais remotas ou no modo standallone, este último é mais recomendado para PCs desktops ou usuários standallone.
A mensagem de email obtida pelo fetchmail normalmente é encaminhada via SMTP para porta 25 na máquina que está rodando (localhost) por um link TCP/IP e posteriormente entregue localmente via LDA. Neste texto nós adotaremos o Procmail como LDA padrão por vários motivos que serão discutidos adiante.
Se não houver escuta TCP/IP na porta 25, o fetchmail entrega as mensagens automaticamente ao LDA configurado no seu sistema ou MDA. Note que alguns livros chamam MDA, que tem o mesmo significado que LDA aqui nos nossos propósitos.
Utilizaremos para configuração o programa fetchmailconf que vem disponível na distribuição padrão do fetchmail. É necessário ter instalada a linguagem Python e o Tk toolkit.
Para rodar o fetchmail bastar editar um arquivo '~/.fetchmailrc' no diretório de usuário. Para isto pode-se utilizar um editor de texto plano - vim, pico, joe ou executar a interface gráfica de configuração, fetchmailconf.
Desenvolvido por Eric S. Raymond, fetchmail é distribuído sob licença GPL através do seguinte site http://www.catb.org/~esr/fetchmail/.
Algumas características do fetchmail são:
- Recupera mensagens de servidores de email e estas podem ser lidas através do Mutt.
- Oferece alta segurança, pois é possível acessar servidores remotos via autenticação criptografada CRAM-MD5 IMAP RFC1731. Além disso, pode ser configurado para tunelar conexões via SSH (Secure Shell).
- Este aplicativo pode ser carregado automaticamente como um daemon de sistema no boot ou quando o usuário desejar obter as mensagens do host remoto.
- Fetchmail é fácil para configurar. Basta editar um arquivo de configuração ou utilizar uma GUI - Graphical User Interface (fetchmailconf) que vem inclusa com a distribuição padrão.
Instalação em GNU/Linux
Para instalar o fetchmail em sistemas GNU/Linux você precisa ter um compilador GCC instalado, bem como as bibliotecas padrões do sistema; qualquer distribuição já vem com o ambiente GCC instalado por padrão.
O processo de instalação abordado neste texto para GNU/Linux, pode ser implementado por qualquer distribuição, haja vista, que iremos obter os sources e compilar na máquina local.
Você também necessita baixar a última versão do fetchmail no site http://www.catb.org/~esr/fetchmail/. Quando estava escrevendo este texto a última versão estável do fetchmail é a 6.2.5, portanto:
- Baixe a última versão do fetchmail
$ wget http://www.catb.org/~esr/fetchmail/fetchmail-6.2.5.tar.gz fetchmail-6.2.5.tar.gz 40% of 1227 kB 27 kBps 00m27s
- descompacte e entre no diretório e compile com as opções padrões.
$ tar -zxvf fetchmail-6.2.5.tar.gz $ cd fetchmail-6.2.5/ $ ./configure $ make $ su Password: $ make install
Instalação em FreeBSD
O FreeBSD possui um banco de dados com mais de 10000 aplicativos prontos para instalar com simples comandos.
Este é o sistema de ports do FreeBSD e é o que escolhemos para efetuar a instalação do Fetchmail, bem como de todos os aplicativos contidos neste texto para este sistema. O usuário de qualquer sistema, seja ele plataforma proprietário ou não, sempre deverá manter o sistema atualizado, logo parto do pressuposto que seu sistema possui a árvore de ports atualizada, bem como os binários e o kernel, visando sempre a melhor performance e principalmente a segurançada informação.
Iremos instalar a versão mais recente do Fetchmail a partir dos ports. O port do fetchmail para FreeBSD fica localizado em /usr/ports/mail/fetchmail, logo siga os passos seguintes:
$ su Password: $ cd /usr/ports/mail/fetchmail $ make install clean
O comando acima efetuará o download do pacote, a compilação e instalação do binário fetchmail e fetchmailconf em /usr/local/bin, bem como suas as páginas de manuais e bibliotecas de suporte.
Para ver a versão do fetchmail instalada digite no shell:
$ fetchmail -V Este é o fetchmail versão 6.2.5+POP2+RPA+SDPS+SSL+OPIE+INET6+NLS Fallback MDA: (none) FreeBSD eclipse.freebsd.org 5.4-PRERELEASE FreeBSD 5.4-PRERELEASE #0: Sat Mar 19 14:02:49 BRT 2005 root@eclipse:/usr/src/sys/i386/compile/ECLIPSE i386 Utilizando opções da linha de comando Nenhum servidor de correio eletrônico configurado -- talvez /home/fredcox/.fetchmailrc esteja faltando?
Para que a interface gráfica fetchmailconf funcione é necessário ter o ambiente Pyhton instalado no seu sistema, bem como o módulo python py-tkinter, portanto entre com os seguintes comandos:
$ su Password: $ /usr/ports/lang/python $ make install clean
Também é necessário adicionar o módulo py-tkinter ao ambiente Python digitando os seguintes comandos:
$ su Password: $ cd /usr/ports/x11-toolkits/py-tkinter $ make install clean
Execute o fetchmailconf e uma janela semelhante a esta será mostrada:
Configuração do Fetchmail
Configurando via fetchmailconf (GUI)
Configurar o fetchmail consiste basicamente na criação e edição do arquivo ~/.fetchmailrc no diretório de usuário. Este arquivo deve conter a sintaxe descrita no manual do fetchmail e também possuir as informações necessárias para acessar sua caixa postal remota, tais como login, senha, protocolo, a fim de efetuar download total (POP3) ou parcial (IMAP) das mensagens de e-mail.
A configuração do fetchmail é bastante simples e interativa a partir da interface gráfica fetchmailconf. Vamos utilizar esta ferramenta, que já vem com a distribuição padrão do aplicativo, como base para configuração do .fetchmailrc neste texto.
Para iniciar a configuração siga os seguintes passos:
- Certifique de está executando um ambiente Xfree86 ou Xorg e digite o seguinte comando como usuário comum no shell:
$ fetchmailconf
Uma janela semelhante a esta será mostrada:
- Clique no botão Configure fetchmail.
- Clique no botão Novice Configuration
- Edite o campo referente a New Server adicionando o seu servidor POP ou IMAP e pressione ENTER.
- Será exibida uma janela de opções para o servidor, você deve selecionar o protocolo suportado pelo servidor e em seguida digitar o usuário no campo referente a New User e pressionar ENTER.
- Em seguida digite a senha de usuário na caixa Password e pressione o botão Ok e salve as configurações.
Configuração via console
A configuração do fetchmail, como já foi dito antes, consiste apenas da edição de um arquivo texto plano no diretório de usuário; o ~/.fetchmailrc.
Entre no diretório do usuário, para tanto, digite:
$ cd ~/
Crie um novo arquivo chamado .fetchmailrc - note o ponto no início do nome do arquivo - com seu editor de texto preferido vim, joe, pico ou emacs.
Exemplo:
$ cd ~/ $ vim ~/.fetchmailrc
O conteúdo do arquivo será as informações necessárias para checar sua caixa postal remota, note que você precisa especificar o login e senha, bem como protocolo de acesso. Comentários deverão ser precedidos de '#'.
# # arquivo : ~/.fetchmailrc # descrição : Configurações do Fetchmail # autor: Fred Cox # data : 03/04/2005 # ########## ## Seta as opções de log set logfile "/home/fredcox/fetchmail-log" ########## ## usuário da caixa postal set postmaster "fredcox" set bouncemail set no spambounce set properties "" ########## ### Configuração da primeira CX poll pop.servidor.com.br with proto POP3 user 'login' there with password 'senha' is 'login' here mda '/usr/local/bin/procmail'
Note que você poderá adicionar quantas contas de email quiser, para isso, adicione no final do arquivo o seguinte trecho:
poll pop.servidor2.com.br with proto POP3 user 'login' there with password 'senha' is 'login' here mda '/usr/local/bin/procmail'
Lembre-se de editar os campos referentes ao servidor, login, senha e protocolo utilizado pela sua conta de e-mail remota.
Na linha referente ao MDA você deve especificar o caminho completo do binário do procmail. Se você ainda não possui o procmail instalado no seu sistema, não se preocupe, no próximo capítulo aprenderemos a instalar e configurar o Procmail.
Fetchmail Resouces
Segue alguns sites com informações extra sobre o Fetchmail.
Procmail
Procmail é um rápido processador de e-mails e agente local de entrega LDA, que pode ser utilizado por um usuário do sistema ou por um administrador para processar e entregar as mensagens de e-mail em suas respectivas caixas de correio de acordo com condições (recipes) pré-definidas.
Este programa recebe as mensagens do fetchmail, através de um pipe, processa e entrega as mensagens de acordo com as condições escritas no arquivo de configuração ~/.procmailrc.
Com o Procmail você poderá analisar as mensagens de email antes mesmo delas serem entregues às suas respectivas caixas de correio e definir locais de entrega específicos de acordo com as condições e critérios do arquivo de configuração ~/.procmailrc.
Para configurar o Procmail utilize seu editor de texto plano preferido; vim, pico, joe ou emacs.
Notas sobre os formatos de armazenamento de e-mails
Os 2 formatos básicos de armazenamento de caixas de correio em ambiente GNU/Linux, BSD e MacOS-X, são eles: Maildir e Mailbox. Seu sistema provavelmente utiliza por padrão o formato mailbox e sua caixa de correio geralmente fica localizada em *var/mail/usuario// ou /*/var/spool/usuario.
O formato Maildir, como o próprio nome já diz, armazena as mensagens de email numa estrutura de diretórios e cada mensagen consiste de um arquivo independente. A medida que os e-mails vão chegando, eles vão sendo armazenados em um subdiretório new da caixa de correio.
O formato Mailbox armazena todas as mensagens em um único arquivo, também chamado de spool, este formato necessita que o arquivo de caixa de correio seja bloqueado (lock), para evitar que ele seja corrompido pelo agente de usuário.
Iremos adotar o Maildir neste texto porquê este formato apresenta vantagens sobre o mailbox, entre elas estão:
- É mais rápido, haja vista, que não é necessário que o agente de usuário abra um arquivo inteiro reindexando as mensagens a cada vez que você quiser exibi-la no MUA.
- Se houver corrupção do arquivo, somente uma mensagen será corrompida, pois as mensagens são arquivos independentes.
- Dispensa o uso de lockfiles porquê cada mensagem é um arquivo independente e seu sistema poderá ter vários processos sendo executados ao mesmo tempo.
Para especificar Maildir com o Procmail basta acrescentar uma barra '/' no final da caixa de correio, exemplo:
:0 * ^TO_freebsd FreeBSD/
A tabela abaixo mostra os 3 tipos de especificações que podem ser utilizadas na configuração do Procmail.
Tradicional Unix mailbox | Formato Maildir |
---|---|
FreeBSD | FreeBSD/ |
Dicas-L | Dicas-L/ |
Perl | Perl/ |
Fluxo das mensagens no Procmail
Se o Procmail entregar a mensagem e a caixa de correio não existir ele criará automaticamente seja ela Maildir ou Mailbox, e a mensagem será entregue a caixa de correio específica.
Quando uma mensagem é entregue no formato Maildir, não é necessário utilizar lockiles, por isso a primeira linha de uma regra (recipe) não necessitará de 2 ponto de vírgulas, exemplo:
Você pode utilizar isto:
:0
Instalação em GNU/Linux
A instalação do Procmail coberta por este texto em GNU/Linux será implementada a partir dos sources, logo, baixe a versão mais recente do Procmail no seguinte site:
Você precisa ter instalado o compilador GCC e as bibliotecas padrões para compilar o Procmail.
Instalação passo a passo:
- Baixe a versão mais recente do Procmail. No momento que este texto estava sendo escrito a versão estável do Procmail era a 3.22.
$ wget http://www.procmail.org/procmail-3.22.tar.gz procmail-3.22.tar.gz 10% of 221 kB 8520 Bps
- Descompacte e acesse o diretório.
$ tar -zxvf procmail-3.22.tar.gz $ cd procmail-3.22/
- Compile os sources com os seguintes comandos:
$ su Password: $ make $ make install
- Digite o seguinte comando para visualizar a versão do Procmail instalada no seu sistema:
$ procmail -v procmail v3.22 2001/09/10 Copyright (c) 1990-2001, Stephen R. van den Berg <srb@cuci.nl> Copyright (c) 1997-2001, Philip A. Guenther <guenther@sendmail.com> Submit questions/answers to the procmail-related mailinglist by sending to: <procmail-users@procmail.org> And of course, subscription and information requests for this list to: <procmail-users-request@procmail.org> Locking strategies: dotlocking, lockf() Default rcfile: $HOME/.procmailrc Your system mailbox: /var/mail/fredcox
Instalação em FreeBSD
A instalação do Procmail em FreeBSD será implementada, neste texto, a partir dos ports; nada impede que o leitor instale o aplicativo a partir dos sources.
Instalação passo a passo:
- Acesse o diretório onde está localizado o port do Procmail.
$ cd /usr/ports/mail/procmail/ $ su Password: $ make install clean
Regras do Procmail (recipes)
Procmail como já foi dito anteriormente, possibilita a realização de uma filtragem seletiva entregando as mensagens de acordo com as regras (recipes) estabelecidas pelo dono da caixa de correio.
Para criar suas regras (recipes) é necessário entender a anatomia das mesmas, portanto, a forma mais básica de uma regra do Procmail é:
:0 flags: ArquivodeBloqueio * condição1 * condição2 Ação
Onde as flags, o segundo ponto e o arquivo de bloqueio são opcionais. Neste documento só utilizaremos Arquivos de bloqueio (Lockfiles) quando integrarmos o Procmail com o Spamassassin; assunto que será discutido mais andiante.
O mínimo para estabelecer uma regra é então:
:0 Ação
O formato Maildir, proposto por este texto dispensa o uso de Lockfiles. Só é necessário utilizar Lockfiles em sistemas que utilizem o formato Mailbox, ou utilizando Spamassassin, visando evitar corromper o arquivo de email pelo agente de usuário enquanto o sistema entrega uma mensagem.
Elementos de uma Regra
- Comentários Qualquer linha começando pelo caracter '#' é considerada um comentário. A regra é: nunca ponha um comentário na mesma linha de uma expressão regular.
- Variáveis VAR1=valor VAR2="valor2" Pode-se atribuir valores a várias variáveis numa mesma linha
- Recipe Consiste de três partes que são descritas a seguir:
- Linha de ponto (:0)
- Linha de Condições (Opcional)
- Linha de Ação (Ação que o procmail deve tomar se a regra casar com o contexto)
Flags
As flags servem para alterar o modo e o escopo de como uma regra será executada. Procmail utiliza as flags Hhb por default.
As flags são divididas em 4 tipos básicos: Escopo da mensagem, escopo da ação, controle de fluxo e execução.
- Escopo da mensagem - Estas flags determinam em qual parte do email o Procmail irá testar a condição.
- H - A condição será verificada no cabeçalho do e-mail (default).
- B - Compreende o corpo da mensagem. Esta flag é desligada por default.
- Escopo da ação - Determinam que parte do email é processada pelo Procmail
- h - ação recebe o cabeçalho da mensagem
- b - ação recebe o corpo da mensagem
- Controle de Fluxo
- c - clona a mensagem e executa a ação em um subprocesso. O processo pai continua com a mensagem original.
- A - executa a regra se a regra anterior casou.
- a - executa a regra se a regra anterior casou e a ação foi concluída com sucesso.
- E - executa a regra se a anterior não casou.
- e - executa a regra se a anterior casou mas a ação não foi concluída com sucesso.
- Execução
- f - envia a mensagem para ação através de um pipe
- i - suprime qualquer mensagem de erro.
Todas as regras no Procmail são case insensitive. Para tornar uma regra case sensitive você deverá especificar a flag D.
Características das Regras do Procmail
- Se nenhuma flag for especificada, então o Procmail utiliza as flags Hhb por default.
- As regras são case insensitive por default. Para construir regras case sensitive utilize a flag D.
- Uma ação pode ser um dos seguintes itens abaixo:
- uma entrega de email
- encaminhamento de mensagem (forward)
- pipe
Condições
Se você quiser executar uma ação incondicionalmente, não especifique a condição, por exemplo:
# regra genérica :0 $DEFAULT
A regra acima processa todas as mensagens e direciona todas para a caixa de correio DEFAULT.
Ação
Uma ação do Procmail pode ser um encaminhamento de uma mensagem, um tratamento da mensagem pelo shell ou o direcionamento da mensagem para uma caixa de correio específica. Vamos estudar cada uma dessas ações.
- Encaminhamento ! <user1 (a) dominio com br> <user2 (a) dominio com br>
- Executar um comando shell
| comando1 | comando 2
Podemos atribuir a saída de um comando a uma variável.VAR = | comando1 | comando2
- Salvar mensagem em uma caixa de correio
Caixa de correio | Descrição |
---|---|
Inbox | formato mailbox |
Inbox/ | formato maildir |
Variáveis usadas em Recipes
Iremos estudar algumas das variáveis que podem ser especificadas alterando o modo como suas mensagens de email serão filtradas.
Mailboxes
- MAILDIR - Corresponde ao diretório na qual o procmail está sendo executado e onde os arquivos de saída serão escritos.
- MSGPREFIX - O prefixo padrão da mensagem
- DEFAULT - A caixa de correio padrão
- ORGMAIL - If a caixa de correio padrão não pode ser acessada, o procmail tenta esta em seguida.
Programas
- SHELL - especifica qual o shell que o Procmail irá utilizar.
- SHELLFLAGS - parâmetros que devem ser passados para o shell.
- SENDMAIL - especifica onde está o sendmail no sistema
- SENDMAILFLAGS - passagem de parâmetros para o sendmail. ===Interação com o sistema===
- UMASK - especifica os atributos que os arquivos serão criados
Log
- LOGFILE - especifica o arquivo que o Procmail irá gravar o Log das operações
- LOG - Especifica uma mensagem padrão no arquivo de Log
- VERBOSE - Se este valor for yes então o Procmail irá detalhar as operações no arquivo de Log.
- LOGABSTRACT - Todos os eventos serão logados
Anatomia de uma Recipe
Considere a seguinte Regra:
:0 * ^Subject:.*teste Caixa_Teste/
Vamos decifrar a recipe acima passo a passo:
- A primeira linha indica um início de recipe. Note que utilizamos as flags padrão HhB.
- A segunda linha indica a condição. Se o email contiver a palavra teste no subject (assunto) então a condição será satisfeita.
- A terceira linha indica a ação, que neste caso é uma caixa de correio do tipo Maildir. Neste caso o Procmail entrega toda mensagem que contiver a palavra teste no subject na caixa de correio Caixa_Teste.
Agora, considere a seguinte regra:
:0 * ^TO_vim@vim.org Vim/
Notação | Descrição |
---|---|
:0 | indica o início de uma recipe |
* ^<TO_vim (a) vim org> | Corresponde à macro TO_ que procura no cabeçalho da mensagem pelos campos que comecem por To, Cc, Resent-To ou outro destino que tenha o email <vim (a) vim org>. |
Vim/ | ação que indica a caixa de correio que a mensagem será armazenada caso a condição seja satisfeita. |
.procmailrc - Exemplo
Exemplo de um arquivo .procmailrc:
$ cat .procmailrc ################################################################### # arquivo : ~/.procmailrc # data : 02/04/2005 # autor : Fred Cox <fredcox@fredcoxjr.net> # descrição : Configurações para filtro de mensagens Procmail # ################################################################### ########## ## Definições de variáveis # Sell padrão SHELL=/bin/sh ############ ## Caminho para os binários PATH=/bin:/usr/bin:/usr/local/bin ############### ## Configurações de log LOGFILE=$HOME/ProcmailLog VERBOSE=yes LOGABSTRACT=all ###################### ### Configurações de sendmail SENDMAIL=/usr/local/bin/esmtp SENDMAILFLAGS="-v -X esmtp.log" ######################### #### Caixas de mensagens MAILDIR=$HOME/Msgs DEFAULT=$MAILDIR/Geral/ #Regras # The lock file ensures that only 1 spamassassin invocation happens # at 1 time, to keep the load down. # :0fw: spamassassin.lock * < 256000 | spamassassin # Mails with a score of 15 or higher are almost certainly spam (with 0.05% # false positives according to rules/STATISTICS.txt). Let's put them in a # different mbox. (This one is optional.) :0: * ^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* Spam/ # All mail tagged as spam (eg. with a score higher than the set threshold) # is moved to "probably-spam". :0: * ^X-Spam-Status: Yes Spam/ # Work around procmail bug: any output on stderr will cause the "F" in "From" # to be dropped. This will re-add it. # NOTE: This is probably NOT needed in recent versions of procmail :0 * ^^rom[ ] { LOG="*** Dropped F off From_ header! Fixing up. " :0 fhw | sed -e '1s/^/F/' } :0 * ^TO_mercenariesclub@yahoogroups.com Clube_dos_Mercenarios/ :0 * ^TO_freebsd FreeBSD/ :0 * ^TO_shell-script@yahoogrupos.com.br shell-script/ :0 * ^Subject:.*Dicas-L Dicas-L/ :0 * ^TO_vim@vim.org vim/ :0 * ^TO_fredcox@terra.com.br Terra/ :0 * ^TO_fred.cox@terra.com.br Terra/ :0 * ^Subject:.*HUMOR_PIADAS Humor/ :0 * ^TO_php php/ :0 * ^TO_mutt-users@mutt.org mutt-users/ ############################ #Envia todas as mensagens para caixa principal :0 $DEFAULT
Regras Avançadas
É possível construir regras inteligentes e de alguma complexidade. Por exemplo: podemos especificar várias caixas de correio em apenas uma recipe.
O operador de regras avançadas é o '\/'.
Observe o exemplo abaixo:
:0 * ^TO_\/(vim|mutt-users|humor) $MATCH/
Explicação da regra acima:
Notação | Descrição |
---|---|
:0 | início de uma recipe |
* ^TO_\/(vim|mutt-users|humor) | Macro que procura pelos campos To, Cc, Resent-To ou outro destino pelas palavras vim ou mutt-users ou humor. |
$MATCH | Ação que indica a variável especial que contém o casamento da condição. Por exemplo: Se o usuário receber uma mensagem da lista mutt-users então esta mensagem será direcionada para caixa de correio mutt-users. |
Integração com Spamassassin
Antes de integrar o procmail você deve ter instalado o spamassassin no seu sistema. Proceda da seguinte maneira para instalar:
Instalação em GNU/Linux
Prerequisitos
É necessário possuir o seguintes módulos Perl CPAN.
- Digest::SHA1 (from CPAN)
- HTML::Parser
- Storable
Baixe a versão mais recente dos módulos no site http://www.cpan.org e instale com os seguintes comandos:
$ tar -zxvf modulo-cpan.tar.gz $ cd modulo-cpan/ $ perl Makefile.PL $ make $ make install
- Baixe a versão mais recente do Spamassassin no site http://spamassassin.apache.org
$ wget http://apache.usp.br/spamassassin/source/Mail-SpamAssassin-3.0.2.tar.gz Resolving apache.usp.br... done. Connecting to apache.usp.br[143.107.253.167]:80... connected. HTTP request sent, awaiting response... 200 OK Length: 996,164 [application/x-gzip] 100%[===============================================>] 996,164 55.93K/s ETA 00:00 14:51:34 (55.93 KB/s) - `Mail-SpamAssassin-3.0.2.tar.gz' saved [996164/996164]
- Descompacte e acesse o diretório dos sources:
$ tar -zxvf Mail-SpamAssassin-3.0.2.tar.gz $ cd Mail-SpamAssassin-3.0.2/
- Compile o Spamassassin com os seguintes comandos
$ perl Makefile.PL $ make $ make install
Instalação em FreeBSD
Instalaremos o procmail a partir dos ports do FreeBSD. Para isso acesse o diretório *usr/ports/mail/p5-Mail-SpamAssassin* e proceda com os seguintes comandos.
$ cd /usr/ports/mail/p5-Mail-SpamAssassin/ $ make install clean
Edite o arquivo /etc/rc.conf e adicione a seguinte linha:
spamd_enable="YES" #for campus subnet and localhost spamc/spamd communications #spamd_flags="-i -A 129.97.50. -A 127.0.0.1 -c -d -r ${spamd_pidfile}" #for localhost spamc/spamd checks only #spamd_flags="-c -d -r ${spamd_pidfile}" spamd_flags="-c -d -r ${spamd_pidfile}"
Reinicie o sistema e verifique se o daemon spamd está carregado no seu sistema com o seguinte comando:
$ ps aux|grep spamd root 570 0,0 0,0 23116 8 ?? Is 15:05 0:00,72 /usr/local/bin/spamd -c -d -r /var/ root 633 0,0 6,2 25024 15408 ?? I 15:05 0:00,74 spamd child (perl5.8.6) root 634 0,0 6,0 24536 14868 ?? I 15:05 0:00,73 spamd child (perl5.8.6) root 635 0,0 0,0 24068 8 ?? I 15:05 0:00,28 spamd child (perl5.8.6) root 636 0,0 6,3 24312 15700 ?? I 15:05 0:00,63 spamd child (perl5.8.6) root 637 0,0 6,8 25664 17064 ?? I 15:05 0:00,63 spamd child (perl5.8.6) fredcox 1341 0,0 0,3 1504 824 p0 S+ 18:52 0:00,00 grep spamd
Editando o .procmailrc
Edite o arquivo ~/.procmailrc e adicione o suporte a Spamassassin.
No exemplo abaixo todas as mensagens Spam serão salvas na pasta Spam. Você também pode especificar o ´buraco negro` /dev/null para que todas as mensagens marcadas como spam pelo spamassassin sejam automaticamente jogadas no lixo.
# Envia todas as mensagens para o Spamassassin avaliar :0fw: spamassassin.lock * < 256000 | spamassassin :0: * ^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* Spam/ :0: * ^X-Spam-Status: Yes Spam/
Envie uma mensagem para você mesmo e verifique se o cabeçalho X-Spam-Status e X-Spam-Level aparecem na mensagem.
Exemplo:
Date: Fri, 8 Apr 2005 09:17:41 -0300 From: xxxxxxx@xxxxx.com.br To: xxxx@xxxx.net X-Spam-Status: No, score=0.3 required=5.0 tests=AWL,NO_REAL_NAME, UPPERCASE_25_50 autolearn=no version=3.0.2 Subject: Atençao- AMANHA TERA UM CHAT X-Spam-Level:
Procmail Resouces
Segue uma lista com alguns sites que podem ser consultados para pesquisa sobre o Procmail.
Mutt
Este capítulo explicará os procedimentos e as possíveis configurações e integrações que podemos efetuar com o cliente de email Mutt.
Mutt é software livre e pode ser copiado através do seguinte site: http://www.mutt.org/.
Principais Características
Algumas características do mutt são:
- suporte a cores
- MIME suporte (incluindo RFC2047)
- PGP/MIME (RFC2015)
- Suporte a lista de discussão
- Comunidade de desenvolvimento ativa
- POP3 suporte
- IMAP supporte
- controle total nos cabeçalhos das mensagens no modo de edição.
- suporte a múltiplos formatos de armazenamento de e-mails (mbox, MMDF, MH, maildir)
- altamente customizável através de macros e atribuições de teclas
- suporte a buscas através de expressões regulares
- estilo de configuração baseado em arquivo .mailrc
- Fácil de instalar (usa GNU autoconf)
- tradução em mais de 20 linguagens
- pequeno e eficiente
Instalação em GNU/Linux
A instalação em GNU/Linux será implementada a partir dos sources, portanto baixe a versão mais recente do mutt no site http://www.mutt.org e siga os passos seguintes para compilar e instalar.
Dependências
Para instalar o Mutt você necessitará de satisfazer as seguintes dependências:
- um compilador GCC http://gcc.gnu.org/
- Biblioteca GNU ncurses, ftp://prep.ai.mit.edu/pub/gnu/
- Libiconv http://www.gnu.org/software/libiconv/
Passos necessários:
- Baixe a versão mais recente do Mutt
$ wget ftp://ftp.mutt.org/mutt/devel/mutt-1.5.9i.tar.gz
- Descompacte e compile com os seguintes comandos:
$ tar -zxvf mutt-1.5.9i.tar.gz $ ./configure $ make $ make install
- Para visualizar a versão do Mutt instalado em seu sistema digite:
$ mutt -v Mutt 1.5.9i (2005-03-13) Copyright (C) 1996-2002 Michael R. Elkins and others. Mutt comes with ABSOLUTELY NO WARRANTY; for details type `mutt -vv'. Mutt is free software, and you are welcome to redistribute it under certain conditions; type `mutt -vv' for details. System: FreeBSD 5.4-STABLE (i386) [using ncurses 5.2] [using libiconv 1.9] Opções de compilação: -DOMAIN -DEBUG -HOMESPOOL +USE_SETGID +USE_DOTLOCK +DL_STANDALONE -USE_FCNTL +USE_FLOCK -USE_INODESORT +USE_POP +USE_IMAP -USE_GSS +USE_SSL -USE_GNUTLS -USE_SASL -USE_SASL2 +HAVE_REGCOMP -USE_GNU_REGEX +HAVE_COLOR +HAVE_START_COLOR +HAVE_TYPEAHEAD +HAVE_BKGDSET +HAVE_CURS_SET +HAVE_META +HAVE_RESIZETERM +CRYPT_BACKEND_CLASSIC_PGP +CRYPT_BACKEND_CLASSIC_SMIME -CRYPT_BACKEND_GPGME -BUFFY_SIZE -EXACT_ADDRESS -SUN_ATTACHMENT +ENABLE_NLS +LOCALES_HACK -HAVE_WC_FUNCS +HAVE_LANGINFO_CODESET +HAVE_LANGINFO_YESEXPR +HAVE_ICONV -ICONV_NONTRANS -HAVE_LIBIDN +HAVE_GETSID +HAVE_GETADDRINFO -USE_HCACHE -ISPELL SENDMAIL="/usr/sbin/sendmail" MAILPATH="/var/mail" PKGDATADIR="/usr/local/share/mutt" SYSCONFDIR="/usr/local/etc" EXECSHELL="/bin/sh" -MIXMASTER To contact the developers, please mail to <mutt-dev@mutt.org>. To report a bug, please use the flea(1) utility. patch-1.5.6+20040904.tg.mutt-thread.3 vvv.quote patch-1.5.0.ats.date_conditional.1 dgc.deepif.1 vvv.initials
Instalação em FreeBSD
Para instalar o Mutt no FreeBSD acesse o diretório /usr/ports/mutt, compile e instale o port.
$ cd /usr/ports/mutt $ make install clean
Conceitos Básicos
Mutt é um cliente de e-mail que possibilita combinações com diversos aplicativos, portanto, o domínio deste agente de usuário dependerá exclusicamente da leitura deste capítulo e da criatividade do leitor.
Com o Mutt é possível ler documentos html, pdf, power point, rtf, excel spreedsheet entre outros convertendo-os para modo texto ou associando suas extensões a aplicativos instalados no seu sistema.
É necessário antes de prosseguir com este capítulo, que o leitor esteja famialiarizado, possua conhecimentos de shell script, tenha noções básicas de como uma mensagem trafega na Internet e possua conhecimentos sobre variáveis de ambiente shell.
Mutt ler as suas configurações a partir do arquivo *etc/Muttrc// que possui as configurações padrão para todos os usuários do sistema. Se o usuário possuir o arquivo /*~/.muttrc ou ~/.mutt/muttrc essas configurações padrão são substituídas automaticamente para o usuário.
Depois que o arquivo de configuração do Mutt for editado é necessário reinicia o Mutt para que as configurações tenham efeito.
Parâmetros
Os parâmetros do arquivo de configuração .muttrc possui a seguinte sintaxe:
Parâmetro | Descrição | Exemplo |
---|---|---|
set variavel=valor | Atribuição de valores à variáveis | set folder=~/Msgs/Geral |
source nome_do_arquivo | Carregar arquivo de configuração externo | source ~/.mutt/mutt-aliases |
alias apelido=endereco_de_email | utilizado para atribuir um apelido a um endereço de email longo | alias fred=<fredcox (a) fredcoxjr net> |
bind mode tecla função | atribue uma função a uma tecla | bind browser x check-new |
macro mode key sequence [description] | associa uma tecla a uma sequência de funções (macro) | macro index I "c!\n" "Go to Inbox" |
exec funcao1 funcao2 | executa uma sequência mas não mostra o resultado | exec <show-version> |
push sequence | executa sequência mostrando o resultado | push <show-version> |
color objeto primeiro_plano segundo_plano [expressao] | sintaxe de cores | color header yellow default "^from" |
[un]ignore regexp-list | ignora ou não de acordo com a expressão | unignore from: date subject to cc mail-followup-to reply-to posted-to |
hdr_order regexp-list | determina na qual o cabeçalho da mensagem é apresentado | hdr_order Date: From: To: Cc: |
alternates regexp-list | Especifica endereços de e-mail alternados para que o Mutt cheque nos cabeçalhos das mensagens | alternates "fredcox@fredcoxjr|webmaster@fredcoxjr" |
list regexp-list, subscribe regexp-list | Especifica listas de discussão na qual o seu endereço de e-mail não aparece | subscribe php-dev php-cvs pear-dev pear-cvs zend-engine-cvs engine2 |
mailboxes folder | define as caixas de correio | mailboxes ~/Msgs/Geral ~/Msgs/FreeBSD |
my_hdr string | define um cabeçalho de e-mail personalizado | my_hdr From: Fred Cox <<fredcox (a) fredcoxjr net>> |
ps: regexp - são expressões regulares
Caracteres Especiais
Alguns caracteres possuem significados especiais nas configurações do Mutt. São eles:
Caracter | Descrição | Exemplo |
---|---|---|
; | separador de comando | ls; uname -a |
# | encerra um comentário | #isto é um comentário |
$ | especifica uma variável no shell | $HOME |
cmd |
pega a saída do comando shell | date |
" " | usado para especificar strings | "Mutt o cliente de e-mail" |
Teclas de Navegação
As principais teclas de navegação no mutt são:
Tecla | Função | Descrição |
---|---|---|
j or Down | next-entry | move para o próximo item |
k or Up | previous-entry | move para o item anterior |
z or PageDn | page-down | próxima página |
Z or PageUp | page-up | página anterior |
= or Home | first-entry | vai para o início |
* or End | last-entry | vai para o final |
q | quit | sai do menu |
? | help | ajuda |
Teclas de Edição
Mutt possui um editor que é utilizado para entrada de dados. As teclas são similares ao editor emacs:
Tecla | Função | Descrição |
---|---|---|
^A or <Home> | bol | vai para o início da linha |
^B or <Left> | backward-char | retorna 1 caracter |
Esc B | backward-word | retorna 1 palavra |
^D or <Delete> | delete-char | apaga caracter em cima do cursor |
^E or <End> | eol | move para o final da linha |
^F or <Right> | forward-char | avança 1 caracter |
Esc F | forward-word | avança 1 palavra |
<Tab> | complete | complementa |
^T | complete-query | completa o texto efetuando consulta |
^K | kill-eol | apaga o final de uma linha |
ESC d | kill-eow | apaga a última palavra |
^W | kill-word | apaga a palabra na frente do cursor |
^U | kill-line | apaga toda a linha |
<BackSpace> | backspace | apaga caracter na frente do cursor |
Esc u | upcase-word | converte para caixa alta |
Esc l | downcase-word | converte para caixa baixa |
Esc c | capitalize-word | copia uma palavra |
<Return> | n/a | finaliza edição |
Lendo E-Mails - Index & Pager
O Mutt apresenta dois modos para ler e-mails; o índice de mensagens da caixa de correio, ´index´ e o conteúdo das mensagens, ´pager´.
Index
O ´index´ mostra as mensagens contidas na caixa de correio. Algumas teclas de atalho são atribuída por default são:
Tecla | Descrição |
---|---|
c | muda de caixa de correio |
ESC c | alterna entre modo somente de leitura |
C | copia mensagem para outra caixa de correio |
ESC C | decodifica a mensagem e copia para uma pasta |
ESC s | decodifica a mensagem e salva para uma pasta |
D | deleta mensagens que casam com expressão |
d | apaga mensagem |
F | marca como importante |
l | mostra mensagens de acordo com expressão |
N | marca mensagem como nova |
o | troca o modo de ordenação |
O | ordena reversamente a caixa de correio |
q | salva mudanças e sai |
s | Salva mensagem |
T | marca mensagem que casa com expressão |
U | restaura mensagem de acordo com expressão |
u | restaura mensagem |
v | visualiza anexos |
x | abandona mudanças e sai |
<Return> | mostra mensagem |
<Tab> | pula para próxima mensagem |
@ | mostra o nome do autor e endereço de e-mail |
$ | Salva mudanças na caixa de correio |
/ | procura |
ESC / | procura reversa |
^L | apaga a tecla e redefine |
^T | desmarca mensagens que casem com expressão |
Flags de Status
Algumas flags podem aparecer acompanhando as mensagens, são elas:
Flag | Descrição |
---|---|
D | mensagem está marcada para ser excluída |
d | mensagem possui anexos marcados para exclusão |
K | contém assinatura digital |
N | nova mensagem |
O | mensagem antiga |
P | mensagem criptografada |
r | mensagem de resposta |
S | a mensagem contém uma assinatura digital e foi verificada com sucesso |
s | mensagem contém assinatura digital |
! | Importante |
* | marcada |
As flags seguintes indicam o estado do endereçamento da mensagem:
Flag | Descrição |
---|---|
+ | mensagem de você para você |
T | mensagem para você porém com o campo CC para outros |
C | mensagem com campo CC para você |
F | mensagem tem o campo From de você |
L | mensagem de subscribe numa lista de discussao |
Pager
Caixas de Correio
Ao iniciar o Mutt, ele procura pela caixa postal do usuário do sistema, também chamada de spool de e-mail e fica localizada geralmente em /var/spool/mail/$USER. Para localizar sua caixa postal de sistema, digite o seguinte comando no shell:
$ echo $MAIL
Para trabalhar com e-mails no diretório de usuário, o Mutt utiliza o diretório ~/Mail por default. Algumas pessoas preferem ter o mailspool in diretório de usuário, para isso entre com a seguinte linha no ~/.muttrc:
set spoolfile=~Mail/inbox
.muttrc
No link abaixo você encontrará os arquivos de configurações necessários para configurar o Mutt. Vale a pena baixá-los, analisar e adaptar para seu ambiente.
Palavras Finais
Espero ter alcançado o propósito deste texto, cujo objetivo é somente uma abordagem introdutória do cliente de correio Mutt e suas possíveis integrações. Este texto ainda tem muito a ser acrescentado.
Posso afirmar, que o Mutt é o melhor, mais personalizável e seguro cliente de email que há na atualidade; utilizo-o intensamente.
Este documento ainda está em fase beta, se você possui disponibilidade para acrescentar conteúdo, peço que entre em contato com fredcox@fredcoxjr.net.
Dúvidas, críticas e sugestões também serão bem vindas.