<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>

<channel>
	<title>Papel Clepôncio &#187; Programação</title>
	<atom:link href="http://www.wish4web.com.br/blog/theflockers/category/programacao/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.wish4web.com.br/blog/theflockers</link>
	<description>Ejaculação precoce...de idéias</description>
	<pubDate>Sun, 23 Oct 2011 03:36:46 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Mais um encurtador de URL!</title>
		<link>http://www.wish4web.com.br/blog/theflockers/2011/06/27/mais-um-encurtador-de-url/</link>
		<comments>http://www.wish4web.com.br/blog/theflockers/2011/06/27/mais-um-encurtador-de-url/#comments</comments>
		<pubDate>Tue, 28 Jun 2011 02:37:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Cultura]]></category>

		<category><![CDATA[Programação]]></category>

		<category><![CDATA[Software Livre]]></category>

		<category><![CDATA[encurtador]]></category>

		<category><![CDATA[links]]></category>

		<category><![CDATA[shortener]]></category>

		<category><![CDATA[url]]></category>

		<guid isPermaLink="false">http://www.wish4web.com.br/blog/theflockers/?p=224</guid>
		<description><![CDATA[Estava buscando por um encurtador de link alternativo e encontrei o SQIZ.IN. Bem legal! Indico!
http://sqiz.in
]]></description>
			<content:encoded><![CDATA[<p>Estava buscando por um encurtador de link alternativo e encontrei o SQIZ.IN. Bem legal! Indico!</p>
<p><a href="http://sqiz.in">http://sqiz.in</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.wish4web.com.br/blog/theflockers/2011/06/27/mais-um-encurtador-de-url/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Escrevendo um servidor HTTPS em Python</title>
		<link>http://www.wish4web.com.br/blog/theflockers/2010/05/04/escrevendo-um-servidor-https-em-python/</link>
		<comments>http://www.wish4web.com.br/blog/theflockers/2010/05/04/escrevendo-um-servidor-https-em-python/#comments</comments>
		<pubDate>Tue, 04 May 2010 03:19:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Programação]]></category>

		<category><![CDATA[Software Livre]]></category>

		<category><![CDATA[http]]></category>

		<category><![CDATA[python]]></category>

		<category><![CDATA[server]]></category>

		<category><![CDATA[ssl]]></category>

		<guid isPermaLink="false">http://www.wish4web.com.br/blog/theflockers/?p=130</guid>
		<description><![CDATA[Dia desses precisei de um servidor HTTP para implementar algumas funcionalidades que eu precisava. Verificando os que já conhecia, percebi que seria bastente trabalhoso escrever módulos para WebServers como o Lighttpd, Apache ou o Nginx, mesmo apesar deste último ser um pouco mais fácil. Procurei então alguma linguagem interpretada para fazer o que eu precisava.
Pesquisei [...]]]></description>
			<content:encoded><![CDATA[<p>Dia desses precisei de um servidor HTTP para implementar algumas funcionalidades que eu precisava. Verificando os que já conhecia, percebi que seria bastente trabalhoso escrever módulos para WebServers como o Lighttpd, Apache ou o Nginx, mesmo apesar deste último ser um pouco mais fácil. Procurei então alguma linguagem interpretada para fazer o que eu precisava.</p>
<p>Pesquisei bastante em Ruby como o fazê-lo, mas não me senti &#8220;seduzido&#8221; pelas Libs de Ruby que construiam HTTP Servers, e também há aquela velha questão do Ruby ser mono thread. Pesquisei algo relacionado ao Perl mas infelizmente é uma linguagem que não me sinto à vontade para fazer alguma coisa, e sinceramente não gosto muito. No final, acabei escolhendo escrevê-lo em <strong>Python</strong>, pois devo confessar que existem muitas facilidades devido milhares de modulos embutidos na linguagem em sua instalação padrão.</p>
<p>Uma delas é o <strong>BaseHTTPServer</strong>, que constrói facilmente um servidor HTTP básico mas extermamente extensível.</p>
<p>O intuito deste POST é mostrar a facilidade com que se constrói um HTTPServer em Python e ainda por cima, adicionar a camada SSL por cima dele.</p>
<p>Escrevendo seu HTTP Server básico com SSL</p>

<div class="wp_syntax"><div class="code"><pre class="python python" style="font-family:monospace;"><span style="color: #dc143c;">user</span>@host ~$ vim secureServer.<span style="color: black;">py</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">BaseHTTPServer</span> <span style="color: #ff7700;font-weight:bold;">import</span> HTTPServer, BaseHTTPRequestHandler
<span style="color: #ff7700;font-weight:bold;">import</span> ssl
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> classHandler<span style="color: black;">&#40;</span>BaseHTTPRequestHandler<span style="color: black;">&#41;</span>: <span style="color: #ff7700;font-weight:bold;">pass</span>
&nbsp;
server_addr = <span style="color: black;">&#40;</span>127.0.0.1, <span style="color: #ff4500;">443</span><span style="color: black;">&#41;</span>
httpd = HTTPServer<span style="color: black;">&#40;</span>server_addr, classHandler<span style="color: black;">&#41;</span>
httpd.<span style="color: #dc143c;">socket</span> = ssl.<span style="color: black;">wrap_socket</span><span style="color: black;">&#40;</span>httpd.<span style="color: #dc143c;">socket</span>,  \
    certfile=<span style="color: #483d8b;">'cert.pem'</span>, server_side=<span style="color: #008000;">True</span>, \
    ssl_version=ssl.<span style="color: black;">PROTOCOL_SSLv23</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">while</span> <span style="color: #008000;">True</span>:
        httpd.<span style="color: black;">handle_request</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

<p>Viram que simples? Mas para este pequeno protótipo  funcionar corretamente, é preciso criar um certificado SSL. Como é somente teste, vou criar um &#8220;self signed&#8221;.</p>

<div class="wp_syntax"><div class="code"><pre class="perl perl" style="font-family:monospace;">user<span style="color: #0000ff;">@host</span> <span style="color: #339933;">~</span>$ openssl req <span style="color: #339933;">-</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #339933;">-</span>x509 <span style="color: #339933;">-</span>days <span style="color: #cc66cc;">365</span> <span style="color: #339933;">-</span>nodes <span style="color: #339933;">-</span>out cert.pem <span style="color: #339933;">-</span>keyout cert.pem
&nbsp;
Generating a <span style="color: #cc66cc;">1024</span> bit RSA private key
..........................................................<span style="color: #339933;">++++++</span>
.......................<span style="color: #339933;">++++++</span>
writing <span style="color: #000000; font-weight: bold;">new</span> private key to <span style="">'cert.pem'</span>
<span style="color: #339933;">-----</span>
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name <span style="color: #b1b100;">or</span> a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value<span style="color: #339933;">,</span>
If you enter <span style="">'.'</span><span style="color: #339933;">,</span> the field will be left blank.
<span style="color: #339933;">-----</span>
Country Name <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span> letter code<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#91;</span>AU<span style="color: #009900;">&#93;</span><span style="color: #339933;">:</span>BR
State <span style="color: #b1b100;">or</span> Province Name <span style="color: #009900;">&#40;</span>full name<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#91;</span>Some<span style="color: #339933;">-</span>State<span style="color: #009900;">&#93;</span><span style="color: #339933;">:</span>São Paulo
Locality Name <span style="color: #009900;">&#40;</span>eg<span style="color: #339933;">,</span> city<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">:</span>SP
Organization Name <span style="color: #009900;">&#40;</span>eg<span style="color: #339933;">,</span> company<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#91;</span>Internet Widgits Pty Ltd<span style="color: #009900;">&#93;</span><span style="color: #339933;">:</span>Leandro LTDA
Organizational Unit Name <span style="color: #009900;">&#40;</span>eg<span style="color: #339933;">,</span> section<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">:</span>Mail
Common Name <span style="color: #009900;">&#40;</span>eg<span style="color: #339933;">,</span> YOUR name<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">:</span>localhost
Email Address <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">:</span>leandro<span style="color: #0000ff;">@localhost</span></pre></div></div>

<p>Pronto, agora é só testar com o openssl client.</p>

<div class="wp_syntax"><div class="code"><pre class="perl perl" style="font-family:monospace;">user<span style="color: #0000ff;">@host</span> <span style="color: #339933;">~</span>$ openssl s_client <span style="color: #339933;">-</span>host localhost <span style="color: #339933;">-</span>port <span style="color: #cc66cc;">443</span>
CONNECTED<span style="color: #009900;">&#40;</span>00000003<span style="color: #009900;">&#41;</span>
depth<span style="color: #339933;">=</span>0 <span style="color: #339933;">/</span>C<span style="color: #339933;">=</span>BR<span style="color: #339933;">/</span>ST<span style="color: #339933;">=</span>S\xC3\xA3o Paulo<span style="color: #339933;">/</span>L<span style="color: #339933;">=</span>SP<span style="color: #339933;">/</span>O<span style="color: #339933;">=</span>Leandro LTDA<span style="color: #339933;">/</span>OU<span style="color: #339933;">=</span>Mail<span style="color: #339933;">/</span>CN<span style="color: #339933;">=</span>localhost<span style="color: #339933;">/</span>emailAddress<span style="color: #339933;">=</span>leandro<span style="color: #0000ff;">@localhost</span>
verify error<span style="color: #339933;">:</span>num<span style="color: #339933;">=</span><span style="color: #cc66cc;">18</span><span style="color: #339933;">:</span>self signed certificate
verify <span style="color: #000066;">return</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">1</span>
depth<span style="color: #339933;">=</span>0 <span style="color: #339933;">/</span>C<span style="color: #339933;">=</span>BR<span style="color: #339933;">/</span>ST<span style="color: #339933;">=</span>S\xC3\xA3o Paulo<span style="color: #339933;">/</span>L<span style="color: #339933;">=</span>SP<span style="color: #339933;">/</span>O<span style="color: #339933;">=</span>Leandro LTDA<span style="color: #339933;">/</span>OU<span style="color: #339933;">=</span>Mail<span style="color: #339933;">/</span>CN<span style="color: #339933;">=</span>localhost<span style="color: #339933;">/</span>emailAddress<span style="color: #339933;">=</span>leandro<span style="color: #0000ff;">@localhost</span>
verify <span style="color: #000066;">return</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">1</span>
<span style="color: #339933;">---</span>
Certificate chain
 0 <span style="color: #000066;">s</span><span style="color: #339933;">:/</span>C<span style="color: #339933;">=</span>BR<span style="color: #339933;">/</span>ST<span style="color: #339933;">=</span>S\xC3\xA3o Paulo<span style="color: #339933;">/</span>L<span style="color: #339933;">=</span>SP<span style="color: #339933;">/</span>O<span style="color: #339933;">=</span>Leandro LTDA<span style="color: #339933;">/</span>OU<span style="color: #339933;">=</span>Mail<span style="color: #339933;">/</span>CN<span style="color: #339933;">=</span>localhost<span style="color: #339933;">/</span>emailAddress<span style="color: #339933;">=</span>leandro<span style="color: #0000ff;">@localhost</span>
   i<span style="color: #339933;">:/</span>C<span style="color: #339933;">=</span>BR<span style="color: #339933;">/</span>ST<span style="color: #339933;">=</span>S\xC3\xA3o Paulo<span style="color: #339933;">/</span>L<span style="color: #339933;">=</span>SP<span style="color: #339933;">/</span>O<span style="color: #339933;">=</span>Leandro LTDA<span style="color: #339933;">/</span>OU<span style="color: #339933;">=</span>Mail<span style="color: #339933;">/</span>CN<span style="color: #339933;">=</span>localhost<span style="color: #339933;">/</span>emailAddress<span style="color: #339933;">=</span>leandro<span style="color: #0000ff;">@localhost</span>
<span style="color: #339933;">---</span>
Server certificate
<span style="color: #339933;">-----</span><span style="color: #000000; font-weight: bold;">BEGIN</span> CERTIFICATE<span style="color: #339933;">-----</span>
MIIDijCCAvOgAwIBAgIJAKY1XzcnjUW3MA0GCSqGSIb3DQEBBQUAMIGLMQswCQYD
VQQGEwJCUjETMBEGA1UECBQKU8OjbyBQYXVsbzELMAkGA1UEBxMCU1AxFTATBgNV
BAoTDExlYW5kcm8gTFREQTENMAsGA1UECxMETWFpbDESMBAGA1UEAxMJbG9jYWxo
b3N0MSAwHgYJKoZIhvcNAQkBFhFsZWFuZHJvQGxvY2FsaG9zdDAeFw0xMDAxMjEw
MTQ0MThaFw0xMTAxMjEwMTQ0MThaMIGLMQswCQYDVQQGEwJCUjETMBEGA1UECBQK
U8OjbyBQYXVsbzELMAkGA1UEBxMCU1AxFTATBgNVBAoTDExlYW5kcm8gTFREQTEN
MAsGA1UECxMETWFpbDESMBAGA1UEAxMJbG9jYWxob3N0MSAwHgYJKoZIhvcNAQkB
FhFsZWFuZHJvQGxvY2FsaG9zdDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
yCX09Doe3bfFwrmGjAA3cDOUC47vuOVUkWzlnkX2e7nWN7J13amFHtBFXG2YunEs
wPEm5VZMMtjq5fhmKdcw<span style="color: #339933;">+</span>y6U2Lf6iS1Q5vEutuY<span style="color: #339933;">/</span>L2XbHlzctMFbasqkuVO8H0oB
Lqg9zTuRfx<span style="color: #339933;">/</span>BJ7BmhrWZMKYMYbP<span style="color: #339933;">/</span>PbFGejMrhMUzcp0CAwEAAaOB8zCB8DAdBgNV
HQ4EFgQU6s23dwSaSIO2CRXnzSqRCfbJLyQwgcAGA1UdIwSBuDCBtYAU6s23dwSa
SIO2CRXnzSqRCfbJLyShgZGkgY4wgYsxCzAJBgNVBAYTAkJSMRMwEQYDVQQIFApT
w6NvIFBhdWxvMQswCQYDVQQHEwJTUDEVMBMGA1UEChMMTGVhbmRybyBMVERBMQ0w
CwYDVQQLEwRNYWlsMRIwEAYDVQQDEwlsb2NhbGhvc3QxIDAeBgkqhkiG9w0BCQEW
EWxlYW5kcm9AbG9jYWxob3N0ggkApjVfNyeNRbcwDAYDVR0TBAUwAwEB<span style="color: #339933;">/</span>zANBgkq
hkiG9w0BAQUFAAOBgQCl6<span style="color: #339933;">+</span>gzbq4gQfE<span style="color: #339933;">/</span>W5NYCX1S<span style="color: #339933;">/</span>bsNFaGaDoSr8nzibF<span style="color: #339933;">++</span>3NeI
CjgtDciimmSb330AJE1GSC9xqvLF86LV2wvIw3W6eR7<span style="color: #339933;">+</span>YYgGfoPv2eOnGO<span style="color: #339933;">/</span>djsKM
<span style="color: #339933;">/</span>0MvPoUjJPfP9k2RftyYQMaKPMXGtGGCWnlm6bUade9wq4BdBYkKRp42Rb83qQ<span style="color: #339933;">==</span>
<span style="color: #339933;">-----</span>END CERTIFICATE<span style="color: #339933;">-----</span>
subject<span style="color: #339933;">=/</span>C<span style="color: #339933;">=</span>BR<span style="color: #339933;">/</span>ST<span style="color: #339933;">=</span>S\xC3\xA3o Paulo<span style="color: #339933;">/</span>L<span style="color: #339933;">=</span>SP<span style="color: #339933;">/</span>O<span style="color: #339933;">=</span>Leandro LTDA<span style="color: #339933;">/</span>OU<span style="color: #339933;">=</span>Mail<span style="color: #339933;">/</span>CN<span style="color: #339933;">=</span>localhost<span style="color: #339933;">/</span>emailAddress<span style="color: #339933;">=</span>leandro<span style="color: #0000ff;">@localhost</span>
issuer<span style="color: #339933;">=/</span>C<span style="color: #339933;">=</span>BR<span style="color: #339933;">/</span>ST<span style="color: #339933;">=</span>S\xC3\xA3o Paulo<span style="color: #339933;">/</span>L<span style="color: #339933;">=</span>SP<span style="color: #339933;">/</span>O<span style="color: #339933;">=</span>Leandro LTDA<span style="color: #339933;">/</span>OU<span style="color: #339933;">=</span>Mail<span style="color: #339933;">/</span>CN<span style="color: #339933;">=</span>localhost<span style="color: #339933;">/</span>emailAddress<span style="color: #339933;">=</span>leandro<span style="color: #0000ff;">@localhost</span>
<span style="color: #339933;">---</span>
No client certificate CA names sent
<span style="color: #339933;">---</span>
SSL handshake has <span style="color: #000066;">read</span> <span style="color: #cc66cc;">1072</span> bytes <span style="color: #b1b100;">and</span> written <span style="color: #cc66cc;">316</span> bytes
<span style="color: #339933;">---</span>
New<span style="color: #339933;">,</span> TLSv1<span style="color: #339933;">/</span>SSLv3<span style="color: #339933;">,</span> Cipher is AES256<span style="color: #339933;">-</span>SHA
Server public key is <span style="color: #cc66cc;">1024</span> bit
Compression<span style="color: #339933;">:</span> NONE
Expansion<span style="color: #339933;">:</span> NONE
SSL<span style="color: #339933;">-</span>Session<span style="color: #339933;">:</span>
    Protocol  <span style="color: #339933;">:</span> TLSv1
    Cipher    <span style="color: #339933;">:</span> AES256<span style="color: #339933;">-</span>SHA
    Session<span style="color: #339933;">-</span>ID<span style="color: #339933;">:</span> 0DF03B0D70244E8A4E357504AEB010FCCBF02977E1B530FC8E2F47057AB5D949
    Session<span style="color: #339933;">-</span>ID<span style="color: #339933;">-</span>ctx<span style="color: #339933;">:</span>
    Master<span style="color: #339933;">-</span>Key<span style="color: #339933;">:</span> 5E124A87C6BAE38AFF3CA2F78EBDB9A989E988B005AB596D7FCF7D93B48D7FD1C4F1FCAEA325DC48137D0EBC23DDBB4A
    Key<span style="color: #339933;">-</span>Arg   <span style="color: #339933;">:</span> None
    Start Time<span style="color: #339933;">:</span> <span style="color: #cc66cc;">1264038343</span>
    Timeout   <span style="color: #339933;">:</span> <span style="color: #cc66cc;">300</span> <span style="color: #009900;">&#40;</span>sec<span style="color: #009900;">&#41;</span>
    Verify <span style="color: #000066;">return</span> code<span style="color: #339933;">:</span> <span style="color: #cc66cc;">18</span> <span style="color: #009900;">&#40;</span>self signed certificate<span style="color: #009900;">&#41;</span>
<span style="color: #339933;">---</span></pre></div></div>

<p>Pronto, seu HTTPServer com SSL está funcionando. Obviamente, nenhum dos métodos está sendo implementado, mas isto é facilmente de se fazer. O BaseHTTPServer, por padrão não implementa nenhum método, sendo assim, para facilitar você pode extender o SimpleHTTPServer que já implementa os métodos <strong>do_GET</strong> e <strong>do_HEAD</strong>, a única coisa que é necessário fazer é implementar os outros método desejado, como<strong> do_POST</strong>, <strong>do_PUT</strong>, <strong>do_DELETE</strong>, etc.  Verifique a documentação!</p>
<p>É isso aí galera!! </p>
<p>Referencias</p>
<p>http://docs.python.org/library/ssl.html<br />
http://docs.python.org/library/basehttpserver.html</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.wish4web.com.br/blog/theflockers/2010/05/04/escrevendo-um-servidor-https-em-python/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Os atuais MDAs e as linguagens de filtragem de e-mail (parte 3)</title>
		<link>http://www.wish4web.com.br/blog/theflockers/2009/04/20/os-atuais-mdas-e-as-linguagens-de-filtragem-de-e-mail-parte-3/</link>
		<comments>http://www.wish4web.com.br/blog/theflockers/2009/04/20/os-atuais-mdas-e-as-linguagens-de-filtragem-de-e-mail-parte-3/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 03:21:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Programação]]></category>

		<category><![CDATA[Software Livre]]></category>

		<category><![CDATA[Dovecot Cyrus Sieve RFC 3028 5228 5229 5429]]></category>

		<guid isPermaLink="false">http://www.wish4web.com.br/blog/theflockers/?p=22</guid>
		<description><![CDATA[Continuando minha série de Posts sobre linguagens de filtragem de e-mail, escrevo enfim, sobre o Sieve, que é de longe, a mais importante das linguagens de filtragem, devido sua simplicidade, facilidade de aprendizado, e por ser um padrão de linguagem para filtragem de correio.

Assim como nos outros Posts sobre linguagens de filtragem de correio, este [...]]]></description>
			<content:encoded><![CDATA[<p style="margin-bottom: 0in;"><img class="alignleft size-medium wp-image-94" title="sieve375x375" src="http://www.wish4web.com.br/blog/theflockers/wp-content/uploads/2009/04/sieve375x375-300x271.jpg" alt="sieve375x375" width="163" height="148" />Continuando minha série de Posts sobre linguagens de filtragem de e-mail, escrevo enfim, sobre o Sieve, que é de longe, a mais importante das linguagens de filtragem, devido sua simplicidade, facilidade de aprendizado, e por ser um padrão de linguagem para filtragem de correio.</p>
<p><br/></p>
<p style="margin-bottom: 0in;">Assim como nos outros Posts sobre linguagens de filtragem de correio, este último também não tem intenção nenhuma de ensinar como configurá-los em seus servidores, mas sim, falar sobre a linguagem e mostrar alguns exemplos de scripts.<strong></strong></p>
<p><br/></p>
<h3 style="margin-bottom: 0in;"><strong>Sieve: Uma linguagem para filtragem de correio</strong></h3>
<p style="margin-bottom: 0in;">Sieve é uma linguagem de scripts para filtragem de correio eletrônico que, dentre todas conhecidas, é a única que segue um padrão de implementação. Este padrão foi inicialmente definido na RFC3028 e atualizado pelas RFCs 5228, 5229 e 5429, ou seja, qualquer software de correio, pode criar sua própria implementação, e o mesmo script DEVE funcionar em qualquer um destes servidores.</p>
<p><br/></p>
<p style="margin-bottom: 0in;">Existem diversas implementações do padrão, mas as mais conhecidas pela comunidade Open-Source são sem dúvida, as implementações feitas pelo Cyrus IMAP Server e pelo Dovecot. Este segundo, usa o mesmo interpretador Sieve do Cyrus IMAP. A partir da versão 1.2 (ainda em Release Candidate) do Dovecot, o interpretador Sieve foi totalmente re-escrito.</p>
<p><br/></p>
<p style="margin-bottom: 0in;">A linguagem Sieve suporta a maioria das features que as outras linguagens já mostradas aqui, com uma exceção, que é a execução de comandos de sistema (vide Courier maildropfilter). O fato de não existir esta feature não deixa a linguagem mais fraca, mas sim mais segura, pois uma das razões que contribuiram para criação do padrão, é definir uma forma segura da manipulação de scripts pelo próprio usuário.</p>
<p><br/></p>
<h3 style="margin-bottom: 0in;">Sieve Scripts</h3>
<p style="margin-bottom: 0in;">Agora que já sabemos um pouco sobre a linguagem Sieve, vamos conhecer o que é possível fazer, e como podemos usar a linguagem Sieve para nos auxiliar.</p>
<p style="margin-bottom: 0in;">A maioria das features do Sieve, podem ser incluídas em seu script através do comando “require”, assim, é possível que você carregue somente as funções que vai utilizar, agilizando o parsing do script.</p>
<p style="margin-bottom: 0in;">Outro ponto importante é que a linguagem suporta internacionalização, ou seja, você pode escrever seus scripts em UTF-8. Nota que também existem extensões para o Sieve que também possuem RFCs relacionadas.  Aqui, falaremos sobre algumas extensões, como “fileinto”, “vacation” e “regex”.</p>
<p><br/></p>
<h3>Exemplos de scripts:</h3>
<p style="margin-bottom: 0in;">Consideremos nossa mensagem de correio:</p>
<p><br/></p>

<div class="wp_syntax"><div class="code"><pre class="php php" style="font-family:monospace;">From<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;Spammer&quot;</span><span style="color: #339933;">&lt;</span>spammer<span style="color: #339933;">@</span>viagra<span style="color: #339933;">.</span>com<span style="color: #339933;">&gt;</span>
<span style="color: #990000;">Date</span><span style="color: #339933;">:</span> Sun<span style="color: #339933;">,</span> Apr <span style="color: #cc66cc;">19</span> <span style="color: #cc66cc;">2009</span>  <span style="color: #cc66cc;">18</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">36</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">49</span> <span style="color: #339933;">-</span><span style="color: #208080;">0300</span>
X<span style="color: #339933;">-</span>Spam<span style="color: #339933;">-</span>Flag<span style="color: #339933;">:</span> Yes
Subject<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span> SPAM <span style="color: #009900;">&#93;</span> Testando um script Sieve
&nbsp;
Que tal testarmos alguns Sieve Scripts?</pre></div></div>

<p><br/></p>
<p style="margin-bottom: 0in;">Vamos testar as seguintes simples condições, que são plausíveis no dia-a-dia:</p>
<p><br/></p>
<blockquote>
<ol>
<li>Verificar se a mensagem tem a tag [ SPAM ] e escolher uma ação a tomar;</li>
<li>Auto-resposta;</li>
<li>Verificar tamanho da mensagem e escolher uma ação a tomar;</li>
<li>Verificar o remetente da mensagem e escolher uma ação a tomar;</li>
</ol>
</blockquote>
<p><br/></p>
<h4>1. Verificar se a mensagem tem a tag [ SPAM ] e escolher uma ação a tomar (descartar ou movê-la para uma outra pasta);</h4>
<p style="margin-bottom: 0in;">O primeiro passo é carregar os plugins a serem usados:</p>
<p><br/></p>

<div class="wp_syntax"><div class="code"><pre class="php php" style="font-family:monospace;"><span style="color: #b1b100;">require</span> <span style="color: #009900;">&#91;</span>“fileinto”<span style="color: #339933;">,</span> “regex”<span style="color: #009900;">&#93;</span>;</pre></div></div>

<p style="margin-bottom: 0in;">Logo após, verificamos se a mensagem pussui tag SPAM ou o header “X-Spam-Flag: Yes”. Exemplificarei os dois casos:</p>
<p><br/></p>
<p style="margin-bottom: 0in;">Pelo header:</p>
<p><br/></p>

<div class="wp_syntax"><div class="code"><pre class="php php" style="font-family:monospace;"><span style="color: #b1b100;">if</span> <span style="color: #990000;">header</span> <span style="color: #339933;">:</span>contains “X<span style="color: #339933;">-</span>Spam<span style="color: #339933;">-</span>Flag” “Yes” <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;"># move para a pasta SPAM</span>
    fileinto “SPAM”;
    discard;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><br/></p>
<p style="margin-bottom: 0in;">Pelo Assunto via regex:</p>
<p><br/></p>

<div class="wp_syntax"><div class="code"><pre class="php php" style="font-family:monospace;"><span style="color: #b1b100;">if</span> <span style="color: #990000;">header</span> <span style="color: #339933;">:</span>regex “subject” “\<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">.</span><span style="color: #009900;">&#41;</span>?SPAM<span style="color: #009900;">&#40;</span><span style="color: #339933;">.</span><span style="color: #009900;">&#41;</span>?\<span style="color: #009900;">&#93;</span>” <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;"># neste exemplo, quero descartar a mensagem.</span>
    discard;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><br/></p>
<h4>2. Auto-resposta de Férias</h4>
<p style="margin-bottom: 0in;">Novamente, o primeiro passo é carregar os plugins:</p>
<p><br/></p>

<div class="wp_syntax"><div class="code"><pre class="php php" style="font-family:monospace;"><span style="color: #b1b100;">require</span> <span style="color: #009900;">&#91;</span>“fileinto”<span style="color: #339933;">,</span> “vacation”<span style="color: #339933;">,</span> “regex”<span style="color: #009900;">&#93;</span>;</pre></div></div>

<p><br/></p>
<p style="margin-bottom: 0in;">Caso a mensagem for da lista “Postfix-BR”, não enviaremos a auto-resposta, mas armazenaremos em uma pasta específica.</p>
<p><br/></p>

<div class="wp_syntax"><div class="code"><pre class="php php" style="font-family:monospace;"><span style="color: #b1b100;">if</span> <span style="color: #990000;">header</span> <span style="color: #339933;">:</span>regex “list<span style="color: #339933;">-</span>id” “Grupo<span style="color: #339933;">.*</span>Postfix<span style="color: #339933;">.*</span>Brasil” <span style="color: #009900;">&#123;</span>
    fileinto <span style="color: #0000ff;">&quot;Listas&quot;</span>;
    stop;
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;"># não enviará novamente para o mesmo remetente mais de uma vez</span>
    <span style="color: #666666; font-style: italic;"># até que se cumpra o período de 30 dias de férias.</span>
    <span style="color: #666666; font-style: italic;"># Seu script tem que estar em UTF-8, por causa da acentuação</span>
         vacation <span style="color: #339933;">:</span>days <span style="color: #cc66cc;">30</span>
                 “Estou de férias<span style="color: #339933;">.</span> Envie novamente para fulano<span style="color: #339933;">@</span>ciclano<span style="color: #339933;">.</span>com”;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><br/></p>
<p style="margin-bottom: 0in;">Auto-resposta sempre que receber um e-mail:</p>

<div class="wp_syntax"><div class="code"><pre class="php php" style="font-family:monospace;">vacation <span style="color: #339933;">:</span>subject “Recebido” “Sua mensagem foi recebida com sucesso”;</pre></div></div>

<p><br/></p>
<h4>3. Verificar tamanho da mensagem e escolher uma ação a tomar</h4>
<p><br/></p>

<div class="wp_syntax"><div class="code"><pre class="php php" style="font-family:monospace;"><span style="color: #b1b100;">require</span> “fileinto”;
&nbsp;
<span style="color: #b1b100;">if</span> size <span style="color: #339933;">:</span>over 5M <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;"># salva na pasta BigMessages</span>
    fileinto “BigMessages”;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><br/></p>
<h4>4. Verificar o remetente da mensagem e escolher uma ação a tomar</h4>
<p style="margin-bottom: 0in;">Neste exemplo, todas as mensagens vindas de “spammer@viagra.com&#8221; ou “Spammer” recebam a flag “Junk” e também a flag \\Deleted:</p>
<p><br/></p>

<div class="wp_syntax"><div class="code"><pre class="php php" style="font-family:monospace;"><span style="color: #b1b100;">require</span> <span style="color: #0000ff;">&quot;imapflags&quot;</span>;
&nbsp;
<span style="color: #b1b100;">if</span> addres <span style="color: #339933;">:</span>matches “from” “spammer<span style="color: #339933;">@</span>viagra<span style="color: #339933;">.</span>com” <span style="color: #009900;">&#123;</span>
    setflag <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\\</span>Deleted&quot;</span>;
    addflag “Junk”;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><br/></p>
<p style="margin-bottom: 0in;">ou</p>
<p><br/></p>

<div class="wp_syntax"><div class="code"><pre class="php php" style="font-family:monospace;"><span style="color: #b1b100;">require</span> <span style="color: #0000ff;">&quot;imapflags&quot;</span>;
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #990000;">header</span> <span style="color: #339933;">:</span>matches “from” “Spammer” <span style="color: #009900;">&#123;</span>
    setflag <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\\</span>Deleted&quot;</span>;
    addflag “Junk”;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><br/></p>
<p style="margin-bottom: 0in;">Enfim, estes foram alguns simplíssimos exemplos de uso do Sieve. Espero que este pequeno Post te abra o “apetite” por esta pequena, mas eficiente linguagem de filtragem, que cresce a cada dia mais, e em breve, prevalecerá na maioria dos MTAs conhecidos do mercado.</p>
<p><br/></p>
<p style="margin-bottom: 0in;">Em breve, farei outro Post falando sobre o Dovecot ManageSieve, que é uma ótima ferramenta para gerenciar scripts Sieve e também detalharei como implementá-lo.</p>
<p><br/></p>
<p style="margin-bottom: 0in;">Até lá!</p>
<p><br/></p>
<h3>Referências</h3>
<p>http://wiki.dovecot.org/LDA/Sieve: <a href="http://wiki.dovecot.org/LDA/Sieve">http://wiki.dovecot.org/LDA/Sieve</a></p>
<p>RFCs 3028, 5228, 5229 e 5429: <a href="http://ietfreport.isoc.org/rfc/rfc3028.txt">http://ietfreport.isoc.org/rfc/rfc3028.txt</a>, <a href="http://ietfreport.isoc.org/rfc/rfc5228.txt">http://ietfreport.isoc.org/rfc/rfc5228.txt</a>, <a href="http://ietfreport.isoc.org/rfc/rfc5229.txt">http://ietfreport.isoc.org/rfc/rfc5229.txt</a>, <a href="http://ietfreport.isoc.org/rfc/rfc5429.txt">http://ietfreport.isoc.org/rfc/rfc5429.txt</a></ol>
]]></content:encoded>
			<wfw:commentRss>http://www.wish4web.com.br/blog/theflockers/2009/04/20/os-atuais-mdas-e-as-linguagens-de-filtragem-de-e-mail-parte-3/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Os atuais MDAs e as linguagens de filtragem de e-mail (parte 2)</title>
		<link>http://www.wish4web.com.br/blog/theflockers/2008/12/05/os-atuais-mdas-e-as-linguagens-de-filtragem-de-e-mail-parte-2/</link>
		<comments>http://www.wish4web.com.br/blog/theflockers/2008/12/05/os-atuais-mdas-e-as-linguagens-de-filtragem-de-e-mail-parte-2/#comments</comments>
		<pubDate>Fri, 05 Dec 2008 19:08:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Programação]]></category>

		<category><![CDATA[Software Livre]]></category>

		<guid isPermaLink="false">http://www.wish4web.com.br/blog/theflockers/archives/15</guid>
		<description><![CDATA[Nesta segunda parte, venho mostrar aquele que é na minha opinião, o mais completo MDA para uso geral, O Courier-Maildrop.
À primeira vista, sei que este comentário parece tendencioso, mas independente de minha opinião pessoal, acho importante que se saiba as capacidades deste MDA antes de fazer sua escolha.
Novamente contarei um pouco de história, falando sobre [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.wish4web.com.br/blog/theflockers/wp-content/uploads/2008/12/email.png" alt="email.png" style="display: block; float: left" height="221" width="221" />Nesta segunda parte, venho mostrar aquele que é na minha opinião, o mais completo MDA para uso geral, O Courier-Maildrop.</p>
<p>À primeira vista, sei que este comentário parece tendencioso, mas independente de minha opinião pessoal, acho importante que se saiba as capacidades deste MDA antes de fazer sua escolha.</p>
<p>Novamente contarei um pouco de história, falando sobre o seu crescimento e amadurecimento. Trago também novos exemplos para mostrar aquilo que é o mínimo que a maildropfilter pode fazer.</p>
<p><strong>Courier-Maildrop, o canivete suiço</strong></p>
<p>Este MDA Surgiu em 1998, inicialmente como parte do <em><strong>Courier Mail Server</strong></em>, mas logo teve seu release <em>standalone</em>. Com o passar dos anos, foi se tornando um dos MDAs mais flexíveis e logo tornou-se também um dos mais usados, tendo como concorrente direto o vdeliver (parte do software vmailmgr, o qual não vou abordar) em servidores com <em>Qmail</em>. Com o advento do <em>Postfix</em>, teve um significante aumento em sua difusão, pois trata-se de uma alternativa eficaz para usuários virtuais. Durante uns bons anos foi considerada o melhor para este fim, devido sua flexibilidade. Em relação à sua linguagem para filtros, a maildropfilter é uma linguagem extremamente flexível e poderosa. Possui uma sintaxe muito parecida com <em>Perl</em> ou <em>PHP</em> e também características do <em>POSIX Shell Script</em>, e por isso podemos considerá-la extremamente intuitiva e com uma suave curva de aprendizado.</p>
<p>A maildropfilter não é somente uma linguagem que possibilita criar regras para filtragem de mensagens, mas sim, além dessa que é sua funcionalidade básica, é um processador de regras de negócio. Diferentemente do procmail e o <strong><em>Dovecot LDA</em></strong> (que veremos no próximo artigo), o maildrop é o único que por possuir realmente uma linguagem de programação embutida, pode proporcionar algo assim.</p>
<p>Da mesma forma que os outros MDAs, o maildrop inicia seu trabalho a partir de expressões regulares (PCRE) e finaliza seu trabalho quando encontra a declaração “to”. Inicia com diversas variáveis pré-definidas, e entre elas algumas importantes são: <strong>DEFAULT</strong> (Mailbox padrão para entrega. Para utilizar maildir, “Maildir/”), <strong>FROM</strong>, <strong>LOGNAME</strong> e <strong>SENDMAIL</strong>. Muitas outras estão disponíveis vide “<em>man maildropfilter</em>”.</p>
<p>Uma feature extremamente útil na minha opinião, é a capacidade de executar comandos de sistema. A maildropfilter o faz de duas formas: Através do comando <strong>xfilter</strong> ou da forma Unix like de receber saída de comandos, com as aspas invertidas. Ex. <strong>DIR=`ls`</strong>.</p>
<p>Podemos considerar a maildropfilter é uma linguagem completa, pois ela conta com os condicionais <strong>if</strong> e <strong>else</strong>, os laços <strong>while</strong>, <strong>for</strong> e <strong>foreach</strong>, operadores lógicos e bitwise e operadores de comparação, semelhantes ao POSIX Shell e Perl. Além disso, conta com comandos específicos para ajudar na filtragem. Veremos estes comandos nos exemplos à seguir.</p>
<p><strong>Exemplos:</strong></p>
<p>1. Filtrar todas as mensagens com Assunto ***SPAM*** para a pasta Mala Direta:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="perl perl" style="font-family:monospace;"><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #009966; font-style: italic;">/^Subject:.*SPAM.*/</span> <span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;"># Ao processar com sucesso o to o maildrop sai com EX_OK.</span>
    <span style="color: #666666; font-style: italic;"># Em caso de erro EX_TEMPFAIL.</span>
    to “<span style="color: #0000ff;">$MAILDIR</span><span style="color: #339933;">/</span>.Mala Direta<span style="color: #339933;">/</span>”
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>2. Se a mensagem vier de “Grupo Email” verificar o assunto e se caso for “Teste do Maildrop” mover para a pasta “Grupo Email”:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="perl perl" style="font-family:monospace;"><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/^From:.*GruposEmail.*/</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/^Subject:.*Teste.do.Maildrop.*/</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        to “<span style="color: #0000ff;">$MAILDIR</span><span style="color: #339933;">/</span>Grupo Email<span style="color: #339933;">/</span>”
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>3. Verificar no arquivo .config se o usuário possui o serviço de filtro de mensagens, e caso positivo, executar os filtros deste usuário e logar que será executado o filtro:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="perl perl" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># seta local do logfile. Usuário rodando maildrop</span>
<span style="color: #666666; font-style: italic;"># precisa de permissão de escrita no arquivo.</span>
logfile “<span style="color: #339933;">/</span>var<span style="color: #339933;">/</span><span style="color: #000066;">log</span><span style="color: #339933;">/</span>maildrop.<span style="color: #000066;">log</span>”
&nbsp;
<span style="color: #666666; font-style: italic;"># o comando lookup procura por patterns dentro de arquivos.</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>lookup<span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/^filterpref/</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$HOME</span><span style="color: #339933;">/</span>.config<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;"># grava no logfile.</span>
    <span style="color: #000066;">log</span> “Este login possui filtros<span style="color: #339933;">,</span> executando”
    include <span style="color: #0000ff;">$HOME</span><span style="color: #339933;">/</span>.myfilters
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>4. Verifica se o remetente está na blacklist</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="perl perl" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># a maildropfilter possui pattern matching, sendo assim você</span>
<span style="color: #666666; font-style: italic;"># pode usar o resultado da expressão regular no seu script.</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/^From:s*(.*)/</span> <span style="color: #339933;">&amp;&amp;</span> lookup<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">$MATCH1</span><span style="color: #339933;">,</span> “blacklist.txt”<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;"># extrai o endereço RFC2822 do resultado da expressão.</span>
    ADDR<span style="color: #339933;">=</span>getaddr<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$MATCH1</span><span style="color: #009900;">&#41;</span>
    <span style="color: #000066;">log</span> “maildrop<span style="color: #339933;">:</span> <span style="color: #0000ff;">$ADDR</span> is on blacklist <span style="color: #009900;">&#40;</span>dropped<span style="color: #009900;">&#41;</span>”
    <span style="color: #000066;">exit</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Muitos outros exemplos e a documentação completa do maildrop e da maildropfilter podem ser conseguidas via o comando <em>&#8220;man maildrop&#8221;</em> e <em>&#8220;man maildropex&#8221;</em>, ou na página do <strong>Courier-Maildrop</strong>.</p>
<p>Como visto nos exemplos, o maildrop é um filtro avançado e o mais indicado quando é necessário colocar regras de negócio no procedimento de entrega dos e-mails. Lógicamente, se a sua única intenção é efetuar filtragens simples, você pode optar por outro MDA menos robusto. Isto também não significa que nestes casos você não deva o usar, pois a escolha também depende da combinação usada na instalação de seu servidor. Normalmente, se você utiliza <strong>Courier-IMAP</strong>, a melhor escolha é sempre o maildrop.</p>
<p>Espero que este artigo também tenha sido esclarecedor e como é de praxe, se você quiser conhecer mais sobre este MDA, acesse o site do Courier-Maildrop e também leia suas páginas de manual. Te garanto que é a melhor leitura pra quem quer aprender sobre este cara.</p>
<p>No próximo artigo, falarei sobre o Dovecot LDA, esse que é a coqueluxe do momento, e também sobre a história do Sieve. Até lá!</p>
<p><strong>Bibliografia</strong></p>
<p><strong>maildrop documentation:</strong> http://www.courier-mta.org/maildrop/documentation.html<br />
<strong>Páginas do manual</strong>: man maildropfilter, man maildropex</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wish4web.com.br/blog/theflockers/2008/12/05/os-atuais-mdas-e-as-linguagens-de-filtragem-de-e-mail-parte-2/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Os atuais MDAs e as linguagens de filtragem de e-mail.</title>
		<link>http://www.wish4web.com.br/blog/theflockers/2008/11/29/os-atuais-mdas-e-as-linguagens-de-filtragem-de-e-mail/</link>
		<comments>http://www.wish4web.com.br/blog/theflockers/2008/11/29/os-atuais-mdas-e-as-linguagens-de-filtragem-de-e-mail/#comments</comments>
		<pubDate>Sat, 29 Nov 2008 20:47:22 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Programação]]></category>

		<category><![CDATA[Software Livre]]></category>

		<guid isPermaLink="false">http://www.wish4web.com.br/blog/theflockers/?p=14</guid>
		<description><![CDATA[Existem vários assuntos interessantes dentro do universo dos servidores de e-mail, um deles é a concorrência entre diversos tipos de MDA (mail delivery agent). Frequentemente este assunto é motivo de boas discussões, e nessas discussões a pergunta que se sobressai é: Qual a melhor escolha entre por exemplo o Courier-Maildrop, Dovecot LDA ou Procmail?

O intuito [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.wish4web.com.br/blog/theflockers/wp-content/uploads/2008/12/ip_icon_03_mailsend.png" alt="ip_icon_03_mailsend.png" style="display: block; float: left" height="219" width="219" />Existem vários assuntos interessantes dentro do universo dos servidores de e-mail, um deles é a concorrência entre diversos tipos de <strong>MDA</strong> (mail delivery agent). Frequentemente este assunto é motivo de boas discussões, e nessas discussões a pergunta que se sobressai é: Qual a melhor escolha entre por exemplo o <strong>Courier-Maildrop, Dovecot LDA </strong>ou<strong> Procmail</strong>?<br />
<br clear="left" /></p>
<p>O intuito deste texto não é concluir qual o melhor MDA do momento, mas sim mostrar suas diferenças, explicar um pouco sobre a linguagem que cada MDA implementa e,  quem sabe, poder ajudar o leitor a decidir qual é o mais adequado para uso em seu ambiente. Farei uma abordagem cronológica, ou seja, dos três escolhidos, do primeiro a surgir até o mais atual, e neste primeiro post vou falar um pouco sobre o já bastante conhecido Procmail.</p>
<p><strong>Um overview sobre o Procmail.</strong></p>
<p>Dos agentes de entrega escolhidos, o Procmail é o mais antigo deles. Teve seu release 1.0 em 1990, e inicialmente seu uso mais comum foi como MDA para o <strong><em>Sendmail</em></strong>. Em relação à linguagem embutida no Procmail para processamento das mensagens, podemos dizer que foi de certa forma influenciada por este atrelamento com o Sendmail, pois quando olharmos um arquivo “<strong><em>procmailrc</em></strong>”, é provável que tomaremos um pequeno susto do tipo daquele que tomávamos ao ler um “<strong><em>sendmail.cf</em></strong>”. Apesar de não ser difícil de trabalhar com o procmail,  a sintaxe de sua linguagem não pode ser considerada intuitiva ao primeiro olhar.</p>
<p>O procmail trabalha principalmente com processamento de mensagens através de expressões regulares, no caso do procmail, seguindo o padrão <em><strong>POSIX</strong></em>. O procmail trabalha com um conceito chamado “recipe”, e cada recipe por padrão deve ser iniciado pelo caracter “:” (dois pontos) e o digito 0 (zero). A sintaxe exata do procmail deve seguir o seguinte padrão:</p>

<div class="wp_syntax"><div class="code"><pre class="perl perl" style="font-family:monospace;"><span style="color: #339933;">:</span>0<span style="color: #009900;">&#91;</span> flags<span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#91;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #000066;">local</span> lockfile name<span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#93;</span><span style="color: #339933;">&lt;</span>uma ou mais condições <span style="color: #009900;">&#40;</span>por linha<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #339933;">&lt;</span>ação<span style="color: #339933;">&gt;</span></pre></div></div>

<p><strong>FLAGS</strong></p>
<p>As flags principais do procmail são:</p>
<p><strong>H</strong> - processa o header;<br />
<strong>B </strong>- processa o body;<br />
<strong>D</strong> - inicia o recipe em case sensitive mode;<br />
<strong>c </strong>- faz uma cópia carbono;</p>
<p><strong>ACTIONS</strong></p>
<p>São simples ações executadas pelo procmail:</p>
<p><strong>!</strong> - encaminha a mensagem para um endereço específico;<br />
<strong>|</strong>  - Envia a saída (stdout) para determinado programa;<br />
<strong>{</strong> - inicia um próximo bloco de “recipes” (necessita ao mínimo um espaço após o caracter);</p>
<p>O procmail também permite que sejam extraídas diversas variáveis de ambiente que podem ser usadas como facilitadores dentro de seu filtro, principalmente as varíaveis LOGNAME, SHELL, HOME, HOST (todas são auto-explicativas).</p>
<p>Abaixo, mostrarei alguns exemplos de uso do procmail. Exemplos mais complexos estão disponíveis através do simples comando “man procmailex”.</p>
<p><strong>Exemplos:</strong></p>
<p>1. Separa todas as mensagens com assunto: ***SPAM*** na pasta Mala Direta:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="perl perl" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># neste caso, a pasta é formato mbox. Maildir necessita do “/”</span>
<span style="color: #339933;">:</span>0H ^Subject<span style="color: #339933;">:</span>.<span style="color: #339933;">*</span>SPAM.<span style="color: #339933;">*</span> Mala Direta</pre></td></tr></table></div>

<p>2. Efetuda cópia carbono das mensagens com assunto “Todos” para o destinatário foo@bar:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="perl perl" style="font-family:monospace;"><span style="color: #339933;">:</span>0H ^Subject<span style="color: #339933;">:</span>.<span style="color: #339933;">*</span>Todos  <span style="color: #009900;">&#123;</span>
 <span style="color: #339933;">:</span>0 c
 <span style="color: #339933;">!</span> foo<span style="color: #0000ff;">@bar</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>3. Auto-resposta:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="perl perl" style="font-family:monospace;"><span style="color: #339933;">:</span>0 c
| <span style="color: #009900;">&#40;</span>formail <span style="color: #339933;">-</span>A”Subject<span style="color: #339933;">:</span> Mensagem recebida”; 
 echo “Sua mensagem foi recebida<span style="color: #339933;">,</span> logo entrarei em contato<span style="color: #339933;">!</span>”;
 echo “<span style="color: #339933;">--</span>”; cat <span style="color: #0000ff;">$HOME</span><span style="color: #339933;">/</span>.signature
<span style="color: #009900;">&#41;</span> | <span style="color: #0000ff;">$SENDMAIL</span> <span style="color: #339933;">-</span>oi <span style="color: #339933;">-</span>t</pre></td></tr></table></div>

<p>Como vimos nestes exemplos, o procmail é uma ótima solução para filtragem simples. Sua linguagem apesar de incomum, é provavelmente a de mais rápido processamento por não necessitar de análise léxica complexa. E uma informação interessante sobre procmail: Sim! É possível usá-lo com usuários virtuais! Só que infelizmente, ele não te dá uma flexibilidade tão grande, visto que não suporta nenhum tipo de base de usuários, funcionando basicamente com dados disponíveis através  de variáveis de ambiente.</p>
<p>Por ora conhecemos um pouco do Procmail. Se esse pequeno artigo te fez se interessar por este MDA, o primeiro passo é descobrir mais sobre ele. Informações sobre ele podem ser conseguidas nas páginas do manual, ou então no site do procmail.</p>
<p>No próximo post vou abordar o MDA Courier-Maildrop. Novamente um pouco de história e exemplos de uso deste que é o mais completo MDA e pode ser considerado o canivete suiço no mundo da filtragem de e-mail.</p>
<p><strong>Referências bibliográficas</strong></p>
<p>procmail.org - <a href="http://www.procmail.org">http://www.procmail.org</a>/ - Acesso em 28/11/2008.<br />
Paginas do manual -  (man procmail, man procmailex) – 29/11/2008.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wish4web.com.br/blog/theflockers/2008/11/29/os-atuais-mdas-e-as-linguagens-de-filtragem-de-e-mail/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>

