Otavio Fernandes

O email além do enviar e receber
Publicado em 01/01/2010

O email além do enviar e receber

Introdução

No mundo corporativo uma das ferramentas mais exigidas é o email. Este tem base no protocolo SMTP, este teve sua última grande alteração em agosto de 1982, ou seja, estamos lidando com algo de quase 30 anos, e sabemos que no mundo da tecnologia este período representa uma eternidade. Porem, a tecnologia com o propósito de entregar mensagens eletrônicas é muito mais antiga, o que pode dificultar ainda mais as coisas.

Com este conhecimento, podemos refletir um pouco sobre como agregar valor, através da tecnologia, para um dos pilares no mundo corporativo.

Enviar e receber não basta

Até pouco tempo, estas ações eram mais do que suficientes para uma corporação. Nada mais era necessário, apenas que as mensagens fossem entregues de forma veloz. Atualmente, as mais diversas "features" estão tomando espaço, por exemplo:

  • Evitar os Malwares (Spam, Vírus, Phishing, etc);
  • Cópias Ocultas;
  • Auditorias;
  • Garantias de entrega;
  • Criptografia;
  • Regras por conteúdo;
  • Integrar-se com outras aplicações;

Rapidamente, chegamos a conclusão: precisamos de ferramentas flexíveis o suficiente para lidar com esta demanda.

Perl e Email

Perl é uma linguagem de programação extremamente competente, e vira sinônimo quando falamos do tratamento de texto, e-mail nada mais é o do que texto. Perl é a linguagem mais completa quando o assunto é tratar tudo o que está relacionado ao email, graças a sua longa história na computação, nos ambientes unix-like, e, principalmente, porque Perl cresceu lado-a-lado com a internet, ou seja, com os protocolos relacionados ao e-mail.

Uma busca rápida na CPAN (Comprehensive Perl Archive Network, o maior repositório de módulos do mundo), reafirma o paragrafo acima: a palavra "email" retorna 4585 referências. De forma geral, temos aproximadamente mais de quatro mil opções para lidar com e-mail, e observe que não estamos incluindo nada específico sobre os outros procolos relacionados.

Ao aplicar as regras

Após alguns anos lidando com e-mail, pude observar as necessidades e os erros cometidos na hora de fazer a triagem do correio eletrônico. Geralmente, o desenvolvedor/sysadmin escolhe o momento da entrega da mensagem para fazer isso. A entrega do e-mail é feita por uma ferramenta denominada MDA (Mail Delivery Agent). Porem, este período não cobre o envio de mensagens, e obviamente, nós não queremos ter retrabalho.

Portanto, o momento ideal para fazer esta triagem (ou filtragem) é durante o transporte da mensagem, o qual é feito pelo MTA (Mail Transfer Agent). Para esta tarefa, eu gostaria de destacar o projeto Qpsmtpd.

Qpsmtpd (http://smtpd.develooper.com/)

Há pouco tempo atrás eu estava pesquisando ferramentas para o meu projeto atual, e me deparei com o Qpsmtpd. Sinceramente, fiquei muito supreso com a modularidade deste projeto, ele de muitas formas lhe dá a oportunidade de intervir no fluxo de uma mensagem.

Neste projeto eu destaco:

  • Competente para lidar com o fluxo de mensagens vindas da internet. Este fato adiciona uma grande complicação ao software, porque existe muitos cuidados necessários para lidar com este tipo de trafego, tanto para evitar emails indesejados como para proteger o ambiente da aplicação;
  • Extremamente plugável. Geralmente, os projetos feitos para ter plugins, fazem uma base para receber o novo código, porem, esta base não segue as mesmas regras/políticas aplicadas para os plugins. Porem, no Qpsmtpd isso não é verdade, a mesma estrutura do software é a mesma dos plugins, ou seja, adiciona muita flexíbilidade e um design simples para a aplicação;
  • O design simples e plugável colabora para o desempenho, o qual é considerado excelente. Este projeto é o utilizado para receber as mensagens dos hosts: apache.org e cpan.org, entre muitos outros;
  • Tem um ótimo suporte a grandes estruturas, podendo trabalhar com um Fork Server (onde os novos processo são alocados sobre demanda) ou Pre-Fork (no qual os novos processos nascem junto com o daemon pai). Também dá suporte ao daemon para trabalhar de forma assincrona;

Plugin Exemplo

Este exemplo foi utilizado em uma apresentação sobre o software (http://develooper.com/talks/qpsmtpd-lt-oscon-2007.pdf).

sub hook_quit { my $qp = shift->qp;

    # if she talks EHLO she is probably too # sophisticated to enjoy the fun,
    # so skip it.
    return (DECLINED)
        if ( $qp->connection->hello or '' ) eq "ehlo";

    my $fortune = '/usr/games/fortune';
    return DECLINED
        unless -e $fortune;

    my @fortune = `$fortune -s`;
    @fortune = map { chop; s/^/ \/ /; $_ } @fortune;
    $qp->respond( 221, $qp->config('me') . " closing connection.", @fortune );

    return DONE;
}

Também existem muitos outros plugins já disponíveis para o projeto:

  • Authentication;
  • Check OS of connecting client;
  • Clam-AV;
  • DNSBL;
  • Domain-keys;
  • Greylisting;
  • Spamassassin;
  • TLS (SSL, Transport Level Security);

Conclusão

Existem outras ferramentas qualificadas para esta tarefa. Também destaco o Amavisd-New, vide apresentação para o YAPC::Brasil::2009: http://www.slideshare.net/otaviof/extendendo-o-amavisd-new

AUTHOR

Otavio Fernandes (otaviof) otaviof@gmail.com

blog comments powered by Disqus