Otavio FernandesPublicado em 01/03/2010
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.
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:
Rapidamente, chegamos a conclusão: precisamos de ferramentas flexíveis o suficiente para lidar com esta demanda.
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.
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.
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:
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:
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
Otavio Fernandes (otaviof) otaviof@gmail.com