De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.


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

  1. Baixe e importe a minha chave pública:
      $ wget http://www.fredcoxjr.net/artigos/Mutt/sign/pubkey.gpg
      $ gpg --import pubkey.gpg
    
  2. Baixe arquivo de assinatura digital mutt.texto.tar.gz.asc:
      $ wget http://www.fredcoxjr.net/artigos/mutt.texto.tar.gz.asc
    

  3. 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:

http://www.mutt.org/

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:

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:

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.

[http://www.fredcoxjr.net/artigos/mutt/images/fluxo1.png]

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:

  1. 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
    

  2. 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:

  1. 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:

  1. Clique no botão Configure fetchmail.

  1. Clique no botão Novice Configuration

  1. Edite o campo referente a New Server adicionando o seu servidor POP ou IMAP e pressione ENTER.

  1. 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.

  1. 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:

http://www.procmail.org/

Você precisa ter instalado o compilador GCC e as bibliotecas padrões para compilar o Procmail.

Instalação passo a passo:

  1. 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
    

  2. Descompacte e acesse o diretório.

      $ tar -zxvf procmail-3.22.tar.gz
      $ cd procmail-3.22/
    

  3. Compile os sources com os seguintes comandos:

      $ su
      Password:
      $ make
      $ make install
    

  4. 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:

  1. 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:
  1. Linha de ponto (:0)
  2. Linha de Condições (Opcional)
  3. 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:

  1. A primeira linha indica um início de recipe. Note que utilizamos as flags padrão HhB.
  2. A segunda linha indica a condição. Se o email contiver a palavra teste no subject (assunto) então a condição será satisfeita.
  3. 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
  1. 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]
      
    

  2. Descompacte e acesse o diretório dos sources:

      $ tar -zxvf Mail-SpamAssassin-3.0.2.tar.gz
      $ cd Mail-SpamAssassin-3.0.2/
    

  3. 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:

Passos necessários:

  1. Baixe a versão mais recente do Mutt
      $ wget ftp://ftp.mutt.org/mutt/devel/mutt-1.5.9i.tar.gz
    
  2. Descompacte e compile com os seguintes comandos:
      $ tar -zxvf mutt-1.5.9i.tar.gz
      $ ./configure
      $ make
      $ make install
    
  3. 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.

Baixe aqui as minhas configurações do mutt]

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.

Fred Cox

Links

Referências Bibliográficas

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de Fred Cox Junior