<?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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ataraxia! &#187; email</title>
	<atom:link href="http://www.ataraxia.com.br/posts/tag/email/feed" rel="self" type="application/rss+xml" />
	<link>http://www.ataraxia.com.br</link>
	<description>O estado da arte em TI</description>
	<lastBuildDate>Sun, 17 Jul 2011 21:36:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Envio de emails em massa</title>
		<link>http://www.ataraxia.com.br/posts/envio-de-emails-em-massa</link>
		<comments>http://www.ataraxia.com.br/posts/envio-de-emails-em-massa#comments</comments>
		<pubDate>Thu, 24 Dec 2009 17:01:11 +0000</pubDate>
		<dc:creator>Bruno Lustosa</dc:creator>
				<category><![CDATA[email]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[smtp]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://www.ataraxia.com.br/?p=367</guid>
		<description><![CDATA[Venho trabalhando em um projeto de envio de emails em massa, e como passei por muitos problemas para conseguir melhorar a taxa de entrega dos emails, queria compartilhar algumas dicas. Antes de mais nada, quero deixar bem claro: sou totalmente contra o SPAM. Por mim, podiam condenar cada spammer do mundo a uma morte bem [...]]]></description>
			<content:encoded><![CDATA[<p>Venho trabalhando em um projeto de envio de emails em massa, e como passei por muitos problemas para conseguir melhorar a taxa de entrega dos emails, queria compartilhar algumas dicas.<br />
Antes de mais nada, quero deixar bem claro: sou totalmente contra o <a href="http://pt.wikipedia.org/wiki/Spam">SPAM</a>. Por mim, podiam condenar cada spammer do mundo a <del datetime="2009-12-24T15:47:49+00:00">uma morte bem lenta e dolorosa</del> prisão. Hoje em dia, spam é um problema mundial, e boa parte dos problemas que precisamos enfrentar só existe porque existe spam. Por exemplo, não precisaríamos ficar nos preocupando em criar emails tomando todo tipo de cuidado com palavras e marcações se não existissem filtros antispam.<br />
Porem, assim como spammers fazem envio de email em massa (usando técnicas muitas vezes inescrupulosas), existem empresas que tem a necessidade legítima de fazer envio de emails em massa. Por exemplo, assinantes de um site podem querer receber uma newsletter semanal, ou um email com promoções de uma loja online. São usos aceitáveis, e a grande diferença entre email marketing e spam é que no primeiro caso houve o consentimento do usuário em receber o email.<br />
Enfim&#8230; agora que já deixei claro que esse artigo não tem a intenção de ajudar spammers, vamos aos pontos.</p>
<h2>IPs usados no envio</h2>
<p>Tente fazer os seus envios usando poucos endereços IPs, e que sejam consistentes. Se os seus emails estão saindo de vários IPs de redes diferentes, os servidores de destino podem achar que seu sistema está falsificando os IPs de envio, ou usando alguma rede para fazer o envio (botnets, por exemplo). Com isso, sua chance de ter o email marcado como spam aumenta bastante.<br />
Se você se limita a fazer o envio a partir de um único IP, ou poucos IPs, não vai sofrer com esse tipo de problema. Além disso, os provedores agora trabalham com o conceito de &#8220;reputação&#8221; de um IP. Ou seja, se você envia emails consistentemente através de um IP, e esses emails tem taxa de reclamação baixa, a tendência é que a reputação suba.</p>
<h2>DNS reverso</h2>
<p>O sistema de <acronym title="Domain Name System">DNS</acronym> serve para traduzir nomes para IPs. Por exemplo, quando digita &#8220;www.ataraxia.com.br&#8221; no seu navegador, ele é traduzido para um endereço IP (no momento em que escrevo, 75.119.213.142). Hoje em dia, o DNS é essencial para o funcionamento da Internet.<br />
Assim como existe a tradução de nomes para IPs, tambem existe a tradução inversa, ou seja, de IPs para nomes. E é importantíssimo que o endereço IP do seu servidor de email possa ser traduzido de volta para o nome dele.<br />
Servidores que não tem DNS reverso cadastrado e apontando de volta para ele mesmo normalmente não conseguem mandar email de forma consistente, pois a maior parte dos filtros já barra a conexão antes mesmo de receber a mensagem. Ou seja, o conteúdo nem mesmo é analisado.</p>
<h2>Use um remetente consistente</h2>
<p>O remetente é o nome e email que aparecem para quem recebe o email. Tente usar o mesmo para a campanha inteira. Colocar nomes e emails diferentes para cada email que sai é mais um indício de spam, pois spammers falsificam essas informações para tentar ocultar sua identidade. Coloque no remetente algo que deixe bem claro quem você é.</p>
<h2>Publique registros SPF</h2>
<p>O <acronym title="Sender Policy Framework">SPF</acronym> é um framework que utiliza registros DNS para divulgar informações sobre permissão de envio de emails, e tem a intenção de combater o envio de emails falsificados.<br />
Um registro SPF indica para o mundo quem tem permissão de mandar emails usando um domínio. E como quem tem controle sobre um domínio e seus registros é normalmente a organização detentora da marca, seria uma forma da organização dizer: &#8220;somente os servidores X, Y e Z podem mandar email usando minha marca&#8221;.<br />
Todos os grandes provedores checam registros SPF, e um email que falhe nessa checagem já é mais um indicativo de possível falsificação de email.<br />
Não vou colocar um tutorial sobre SPF nesse artigo, pois foge um pouco do escopo, mas para saber mais sobre a tecnologia, e como implementar, basta visitar o site <a href="http://www.openspf.org/">http://www.openspf.org/</a>. Existe tambem um ótimo <a href="http://old.openspf.org/wizard.html">assistente para geração do registro SPF</a> para publicação no servidor DNS.</p>
<h2>Assinaturas DomainKeys e DKIM</h2>
<p><a href="http://en.wikipedia.org/wiki/DomainKeys">DomainKeys</a> é uma tecnologia que usa criptografia para verificar o domínio de quem enviou a mensagem, e a integridade das mensagens. É usada principalmente pelo <a href="http://www.yahoo.com/">Yahoo!</a>, e foi usada como base pelo <acronym title="Internet Engineering Task Force">IETF</acronym> para o desenvolvimento do <a href="http://www.dkim.org/">DKIM</a> (DomainKeys Identified Mail), sucessor do DomainKeys.<br />
A idéia é usar duas chaves, uma pública e uma privada. A chave privada fica guardada no servidor que faz o envio, e cada email é assinado digitalmente usando essa chave privada. A chave pública é disponibilizada via DNS, e qualquer um que receba um email assinado usando a DomainKeys e/ou DKIM pode verificar se a mensagem foi realmente enviada por um servidor autorizado, checando a assinatura através da chave pública.<br />
Além disso, a assinatura garante também que a mensagem não foi modificada em trânsito, pois caso tenha sido modificada, a assinatura não vai conferir.<br />
Embora o DKIM tenha vindo para ser o sucessor do DomainKeys, a maior parte dos grandes provedores checam as duas assinaturas, então não existe problema em assinar a mensagem duas vezes, pois ambas coexistem sem problema.</p>
<h2>Lista de emails</h2>
<p>Qualquer email que esteja na sua lista deve ter dado a permissão explícita para que você faça o envio de emails. Qualquer inscrição deve preferencialmente utilizar o mecanismo de &#8220;double opt-in&#8221;, ou seja, a pessoa coloca seu email em um formulário no seu site, você envia um email de confirmação com um link, e só adiciona a pessoa na sua lista após essa confirmação. Isso evita a adição de pessoas que não pediram para ser cadastradas, e com isso, evita reclamações.</p>
<h2>Manutenção da lista</h2>
<p>A regra número 1 é bem simples: respeite seus usuários. Se alguem não quer mais receber seus emails, não envie mais. Vai ser um usuário a menos gerando reclamações. Não vale a pena forçar seus emails goela abaixo dos usuários.<br />
Todo email que você enviar deve conter um link para que o usuário possa sair da lista. Esse link deve funcionar, de preferência de forma automática e imediata.<br />
Além disso, qualquer email que gere um &#8220;bounce&#8221; deve ser removido da lista, caso seja um erro permanente (por exemplo, &#8220;email inexistente&#8221;). Erros não permanentes (por exemplo, &#8220;caixa postal cheia&#8221;) devem ser removidos caso persistam por alguns envios.</p>
<h2>Formato do email</h2>
<p>Todas as mensagens devem seguir o padrão descrito na <a href="http://tools.ietf.org/html/rfc5322">RFC 5322</a>. Esse padrão é o sucessor da <a href="http://tools.ietf.org/html/rfc2822">RFC 2822</a>, que por sua vez é o sucessor da <a href="http://tools.ietf.org/html/rfc822">RFC 822</a>. Esse padrão descreve o formato que um email deve seguir.<br />
Caso envie emails em HTML, siga os padrões descritos pelo <a href="http://www.w3c.org/">W3C</a>.<br />
Adicione sempre o cabeçalho &#8220;Precedence: bulk&#8221;, para sinalizar ao servidor de destino de que seu email faz parte de um envio em massa. Isso ajuda o servidor que recebe a priorizar melhor a entrega das mensagens, caso esteja sobrecarregado.<br />
O assunto do email deve ser relevante, e ter relação com o conteúdo da mensagem.</p>
<h2>O email em si</h2>
<p>Evite uso de palavras chaves normalmente associadas a spam. Evite o uso de pontuação em excesso, como por exemplo, muitas exclamações.<br />
Caso esteja enviando email em HTML, não esqueça de fazer tambem uma versão em texto puro, para quem não lê HTML. Por exemplo, muitos dispositivos móveis não lêem emails em HTML. Além disso, emails somente em HTML muitas vezes ganham uma pontuação nos sistemas antispam.<br />
No HTML, evite colocar somente imagens. Tente manter uma boa proporção de texto para imagem. Siga os padrões da W3C, colocando o atributo &#8220;alt&#8221; nas imagens. Além disso, lembre-se que por padrão, os grandes provedores não exibem imagens externas por padrão, então caso seu email contenha somente imagens, existe uma boa probabilidade do email não ser lido.</p>
<h2>Blacklists e whitelists</h2>
<p>Tente fazer monitoramento constante nas várias listas negras existentes na Internet. Caso seu servidor seja listado, começará a ter problemas de entrega, pois qualquer servidor configurado para checar a lista negra irá barrar sua conexão. Tente trabalhar de forma a evitar a entrada nessas listas, e caso entre, tente corrigir o problema e providenciar a saída o mais rápido possível.<br />
Assim como existem as listas negras, existem tambem listas brancas, de servidores que foram cuidadosamente verificados, e que fazem envio de email de forma responsável. A mais famosa é a certificação <a href="https://www.senderscore.org/">SenderScore</a> da <a href="http://www.returnpath.net/">ReturnPath</a>. Existe um custo, mas por sua vez, uma vez certificado, basta manter as boas práticas para conseguir melhores taxas de entrega para grandes provedores, como Hotmail e Yahoo!.</p>
<h2>Conclusão</h2>
<p>Resumindo: mandar emails para a Internet de forma consistente é um verdadeiro inferno hoje em dia. E acredite, você certamente terá problema de entregas uma hora ou outra. Não tem muito pra onde fugir. Mas seguindo essas regras (simples?), dá pra se manter o nível de rejeição em um patamar aceitável.<br />
Alguem tem alguma dica extra? Postem nos comentários!</p>
<h3  class="related_post_title">Artigos relacionados</h3><ul class="related_post"><li><a href="http://www.ataraxia.com.br/posts/evitando-spam-em-formularios" title="Evitando spam em formulários">Evitando spam em formulários</a></li><li><a href="http://www.ataraxia.com.br/posts/evitando-fornecer-seu-email-verdadeiro" title="Evitando fornecer seu email verdadeiro">Evitando fornecer seu email verdadeiro</a></li><li><a href="http://www.ataraxia.com.br/posts/otimizacao-de-sites-parte-2-compressao" title="Otimização de sites, parte 2 &#8211; Compressão">Otimização de sites, parte 2 &#8211; Compressão</a></li><li><a href="http://www.ataraxia.com.br/posts/otimizacao-em-php-parte-1-minify" title="Otimização em PHP, parte 1: Minify">Otimização em PHP, parte 1: Minify</a></li><li><a href="http://www.ataraxia.com.br/posts/acessando-sites-fora-do-ar" title="Acessando sites fora do ar">Acessando sites fora do ar</a></li><li><a href="http://www.ataraxia.com.br/posts/envio-de-emails-em-php" title="Envio de emails em PHP">Envio de emails em PHP</a></li><li><a href="http://www.ataraxia.com.br/posts/seguranca-no-envio-de-emails" title="Segurança no envio de emails em PHP">Segurança no envio de emails em PHP</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.ataraxia.com.br/posts/envio-de-emails-em-massa/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Evitando spam em formulários</title>
		<link>http://www.ataraxia.com.br/posts/evitando-spam-em-formularios</link>
		<comments>http://www.ataraxia.com.br/posts/evitando-spam-em-formularios#comments</comments>
		<pubDate>Thu, 29 Jan 2009 11:00:56 +0000</pubDate>
		<dc:creator>Bruno Lustosa</dc:creator>
				<category><![CDATA[email]]></category>
		<category><![CDATA[segurança]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://blog.ataraxia.com.br/?p=177</guid>
		<description><![CDATA[Muitas vezes, nossos sites possuem algum formulário de contato. Algo como um &#8220;Fale Conosco&#8221;, ou alguma outra forma genérica de contato. O importante é que o visitante acessa o formulário, preenche os dados e submete. Normalmente, esses dados são enviados a alguem por email. Até aí, tudo muito bonito. Funciona muito bem. Porém, os spammers [...]]]></description>
			<content:encoded><![CDATA[<p>Muitas vezes, nossos sites possuem algum formulário de contato. Algo como um &#8220;Fale Conosco&#8221;, ou alguma outra forma genérica de contato. O importante é que o visitante acessa o formulário, preenche os dados e submete. Normalmente, esses dados são enviados a alguem por email.</p>
<p>Até aí, tudo muito bonito. Funciona muito bem. Porém, os spammers acharam uma forma de propagar links para sites de origem duvidosa através destes formulários. Então, bolaram robôes que varrem a Internet em busca de formulários como estes. Ao encontrar um formulário, preenchem automaticamente todos os campos, e submetem os dados.</p>
<p>O resultado disso é o recebimento de várias mensagens inúteis com links muitas vezes utilizados pra disseminar vírus e outras ameaças.</p>
<p>Uma das formas de se resolver isso é colocando um <acronym title="Completely Automated Turing Test To Tell Computers and Humans Apart">CAPTCHA</acronym>, aquelas imagens com letras tortas que teoricamente só um humano consegue decifrar. Alguns dos problemas com os CAPTCHAs: as vezes, o CAPTCHA é fraco, e é possível se usar um programa para quebrá-lo. Já aconteceu algumas vezes com serviços grandes, como Hotmail e Gmail. Outro problema, é que as vezes as letras ficam tão tortas que nem um humano consegue decifrar de primeira. Eu mesmo já tentei fazer um cadastro no BOL, e só consegui lá pra quarta ou quinta tentativa.</p>
<p>Uma outra forma, mais simples, consiste em se colocar no formulário um campo escondido via CSS. O formulário ficaria mais ou menos assim:</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">form</span> <span style="color: #000066;">action</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;/email/send&quot;</span> <span style="color: #000066;">method</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;post&quot;</span>&gt;</span>
Nome: <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;nome&quot;</span> <span style="color: #66cc66;">/</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">br</span> <span style="color: #66cc66;">/</span>&gt;</span>
Email: <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;email&quot;</span> <span style="color: #66cc66;">/</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">br</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;vazio&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #000066;">style</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;display:none&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;submit&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Enviar&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">form</span>&gt;</span></pre></div></div>

<p>Notem que o formulário possui um campo chamado <em>vazio</em>, que está escondido através do estilo &#8220;<em>display:none</em>&#8220;. A técnica é simples: o script que processa o post do formulário, verifica se este campo está preenchido ou não. Se estiver, muito provavelmente se trata de um robô fazendo spam, já que a princípio este campo não deveria nunca ser exibido na tela, e portanto não poderia ser preenchido.</p>
<p>Embora não seja 100% eficaz e peque um pouco pela falta de acessibilidade (já que dependendo do dispositivo que acesse o celular, o campo pode aparecer), ainda assim se trata de mais uma opção, ao meu ver, menos obstrusiva que um CAPTCHA.</p>
<p>NOTAS:</p>
<ul>
<li>O HTML acima está simples, sem seguir nenhum padrão, só para efeitos de demonstração da técnica. Deveria usar tags como &lt;fieldset&gt; e &lt;label&gt; para manter o formulário bonitinho;</li>
<li>O <em>style</em> não deveria estar explícito no campo, e sim externo em um CSS, setando o display pra hidden ou através de uma classe ou através de um ID.</li>
</ul>
<p>Já faço uso desta técnica em alguns sites que recebiam um volume considerável de spam automático, e hoje o nível caiu pra 0.</p>
<p>Outro aspecto do envio de email que também é extramamente importante é em relação ao <a href="http://www.ataraxia.com.br/posts/seguranca-no-envio-de-emails">spam envolvendo a manipulação dos cabeçalhos do email</a>, como já descrito em um outro artigo.</p>
<h3  class="related_post_title">Artigos relacionados</h3><ul class="related_post"><li><a href="http://www.ataraxia.com.br/posts/envio-de-emails-em-massa" title="Envio de emails em massa">Envio de emails em massa</a></li><li><a href="http://www.ataraxia.com.br/posts/evitando-fornecer-seu-email-verdadeiro" title="Evitando fornecer seu email verdadeiro">Evitando fornecer seu email verdadeiro</a></li><li><a href="http://www.ataraxia.com.br/posts/seguranca-no-envio-de-emails" title="Segurança no envio de emails em PHP">Segurança no envio de emails em PHP</a></li><li><a href="http://www.ataraxia.com.br/posts/evitando-sql-injection-em-php" title="Evitando SQL injection em PHP">Evitando SQL injection em PHP</a></li><li><a href="http://www.ataraxia.com.br/posts/criando-captchas-em-php" title="Criando CAPTCHAs em PHP">Criando CAPTCHAs em PHP</a></li><li><a href="http://www.ataraxia.com.br/posts/os-10-piores-captchas-do-mundo" title="Os 10 piores CAPTCHAs do mundo">Os 10 piores CAPTCHAs do mundo</a></li><li><a href="http://www.ataraxia.com.br/posts/envio-de-emails-em-php" title="Envio de emails em PHP">Envio de emails em PHP</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.ataraxia.com.br/posts/evitando-spam-em-formularios/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Envio de emails em PHP</title>
		<link>http://www.ataraxia.com.br/posts/envio-de-emails-em-php</link>
		<comments>http://www.ataraxia.com.br/posts/envio-de-emails-em-php#comments</comments>
		<pubDate>Wed, 31 Dec 2008 02:05:17 +0000</pubDate>
		<dc:creator>Bruno Lustosa</dc:creator>
				<category><![CDATA[programação]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.ataraxia.com.br/?p=106</guid>
		<description><![CDATA[Uma classe que já venho usando a muito tempo, e que cumpre de forma excelente todos os "buracos" deixados pela função mail() é a PHP Mailer. Coloquei "buracos" entre aspas, pois é possível fazer tudo isso usando apenas a função mail(), só que dá um bocado de trabalho extra, pois todo o trabalho de criação dos cabeçalhos, de codificação da mensagem e anexação de arquivos terá que ser feita manualmente.]]></description>
			<content:encoded><![CDATA[<p>Um tópico que sempre traz muitas dúvidas é o envio de emails em PHP. A linguagem traz a função <em><a href="http://br2.php.net/manual/en/function.mail.php">mail()</a></em>, que serve justamente para isto. E de fato, para o envio de emails simples, ela resolve o problema de forma espetacular. A função tem a seguinte forma:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #990000;">mail</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$para</span><span style="color: #339933;">,</span> <span style="color: #000088;">$assunto</span><span style="color: #339933;">,</span> <span style="color: #000088;">$mensagem</span><span style="color: #339933;">,</span> <span style="color: #000088;">$cabecalhos</span><span style="color: #339933;">,</span> <span style="color: #000088;">$parametros</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Sendo que os cabeçalhos e os parâmetros são opcionais. A função é bem auto-explicativa, e não tem muito o que falar.</p>
<p>O problema surge justamente quando queremos algo a mais, como por exemplo:</p>
<ul>
<li>Anexar arquivos;</li>
<li>Emails em HTML (ou em texto <strong>e</strong> HTML);</li>
<li>Assinar digitalmente o email;</li>
<li>Colocar acentos no assunto ou no corpo (é necessário codificar pra ficar 100% compatível);</li>
<li>Autenticar em um servidor <acronym title="Simple Mail Transfer Protocol">SMTP</acronym>;</li>
<li>entre outras coisas&#8230;</li>
</ul>
<h4>Sai a função mail(), entra a classe PHPMailer</h4>
<p>Uma classe que já venho usando a muito tempo, e que cumpre de forma excelente todos os &#8220;buracos&#8221; deixados pela função mail() é a PHP Mailer. Coloquei &#8220;buracos&#8221; entre aspas, pois é possível fazer tudo isso usando apenas a função mail(), só que dá um bocado de trabalho extra, pois todo o trabalho de criação dos cabeçalhos, de codificação da mensagem e anexação de arquivos terá que ser feita manualmente.</p>
<p>A classe para o PHP 5/6 pode ser baixada <a href="http://sourceforge.net/project/showfiles.php?group_id=26031&#038;package_id=252700">diretamente do SourceForge</a>, e a instalação é bem simples, pois a classe principal está em apenas um arquivo, chamado class.phpmailer.php. Existem 2 arquivos extras, com classes para uso em SMTP e <acronym title="Post Office Protocol v3">POP3</acronym>, mas que não são necessárias caso não se utilize servidores SMTP ou POP3 externos.</p>
<h4>Usando a classe</h4>
<p>Uma vez copiada, basta darmos um <em>include</em> ou um <em>require</em>, e teremos a classe disponível para ser instanciada. Um exemplo bem simples:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000088;">$mail</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> PHPMailer<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$mail</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">IsMail</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>                         <span style="color: #666666; font-style: italic;">// Usando como backend a função mail()</span>
<span style="color: #000088;">$mail</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">From</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;bruno@lustosa.net&quot;</span><span style="color: #339933;">;</span>       <span style="color: #666666; font-style: italic;">// Email de quem envia a mensagem</span>
<span style="color: #000088;">$mail</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Sender</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$mail</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">From</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$mail</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">FromName</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;Bruno Lustosa&quot;</span><span style="color: #339933;">;</span>       <span style="color: #666666; font-style: italic;">// Nome de quem envia a mensagem</span>
<span style="color: #000088;">$mail</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">AddAddress</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;nobody@example.com&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Quem irá receber. Posso chamar mais vezes</span>
<span style="color: #000088;">$mail</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Subject</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;Assunto da mensagem&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$mail</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">IsHTML</span><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>                     <span style="color: #666666; font-style: italic;">// Estou enviando um email em HTML</span>
<span style="color: #000088;">$mail</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Body</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&lt;b&gt;email em html&lt;/b&gt;&quot;</span><span style="color: #339933;">;</span>    <span style="color: #666666; font-style: italic;">// Este é o email, em HTML</span>
<span style="color: #000088;">$mail</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">AltBody</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;email em texto&quot;</span><span style="color: #339933;">;</span>       <span style="color: #666666; font-style: italic;">// Email alternativo, em texto puro</span>
<span style="color: #000088;">$mail</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">CharSet</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;utf-8&quot;</span><span style="color: #339933;">;</span>                <span style="color: #666666; font-style: italic;">// A codificação usada no email</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$mail</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Send</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">print</span> <span style="color: #0000ff;">&quot;Email enviado com sucesso.&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Pronto. De forma bem simples, consegui enviar um email que me daria um trabalhão se eu fosse montar manualmente. O PHPMailer, neste caso, age como um &#8220;formatador&#8221; do email, gerando todos os cabeçalhos e fazendo toda a codificação necessária, e no fim, chamando a função <em>mail()</em> para fazer o envio (pois chamei o método <em>IsMail()</em>). Ao invés de passar para a função <em>mail()</em>, poderia usar um servidor SMTP externo chamando o método <em>IsSMTP()</em> e indicando o servidor em $mail->Host.</p>
<p>Algumas explicações:</p>
<ul>
<li>Estou setando o cabeçalho <em>Sender</em> para o mesmo valor que o <em>From</em>, pois alguns servidores colocam o Sender automaticamente caso ele não seja setado, e nem sempre ele coloca o valor que queremos.</li>
<li>A chamada a <em>AddAddress()</em> poderia estar dentro de um loop, por exemplo, buscando emails diretamente de um banco de dados, ou de outro lugar. Vale lembrar que assim como temos o <em>AddAddress()</em>, que adiciona o email no &#8220;Para&#8221;, também temos o <em>AddCC()</em>, que adiciona o email no campo &#8220;<acronym title="Carbon Copy">Cc</acronym>&#8221; e o <em>AddBCC()</em>, que adiciona no &#8220;<acronym title="Blind Carbon Copy">Bcc</acronym>&#8221; (ou &#8220;<acronym title="Com Cópia Oculta">Cco</acronym>&#8220;).</li>
<li>Emails somente em HTML tem mais chance de cair em um antispam do que um email que contenha HTML e texto. Além disso, se o destinatário não tiver como ler HTML, não terá como ler a mensagem. Por estes dois motivo que é sempre recomendável criar uma versão em texto do email que será enviado.</li>
</ul>
<p>A classe possui inúmeras <a href="http://phpmailer.codeworxtech.com/index.php?pg=properties">propriedades</a> e <a href="http://phpmailer.codeworxtech.com/index.php?pg=methods">métodos</a> além dos listados neste exemplo, que podem ser usados para fazer (quase?) tudo que um cliente de email faz. Além disso, junto com a classe, existe uma pasta chamada &#8220;examples&#8221; com alguns exemplos de como fazer outras coisas, como utilizar o SMTP do Gmail, anexar imagens, referenciar as imagens anexadas de dentro do email em HTML, etc.</p>
<h3  class="related_post_title">Artigos relacionados</h3><ul class="related_post"><li><a href="http://www.ataraxia.com.br/posts/seguranca-no-envio-de-emails" title="Segurança no envio de emails em PHP">Segurança no envio de emails em PHP</a></li><li><a href="http://www.ataraxia.com.br/posts/agendando-eventos-no-wordpress" title="Agendando eventos no WordPress">Agendando eventos no WordPress</a></li><li><a href="http://www.ataraxia.com.br/posts/removendo-o-generator-do-wordpress" title="Removendo o &#8220;generator&#8221; do Wordpress">Removendo o &#8220;generator&#8221; do Wordpress</a></li><li><a href="http://www.ataraxia.com.br/posts/envio-de-emails-em-massa" title="Envio de emails em massa">Envio de emails em massa</a></li><li><a href="http://www.ataraxia.com.br/posts/escrevendo-plugins-para-o-wordpress" title="Escrevendo plugins para o Wordpress">Escrevendo plugins para o Wordpress</a></li><li><a href="http://www.ataraxia.com.br/posts/evitando-sql-injection-em-php" title="Evitando SQL injection em PHP">Evitando SQL injection em PHP</a></li><li><a href="http://www.ataraxia.com.br/posts/criando-captchas-em-php" title="Criando CAPTCHAs em PHP">Criando CAPTCHAs em PHP</a></li><li><a href="http://www.ataraxia.com.br/posts/pegadinhas-no-php" title="Pegadinhas no PHP">Pegadinhas no PHP</a></li><li><a href="http://www.ataraxia.com.br/posts/otimizacao-em-php-parte-1-minify" title="Otimização em PHP, parte 1: Minify">Otimização em PHP, parte 1: Minify</a></li><li><a href="http://www.ataraxia.com.br/posts/precedencia-no-php" title="Precedência no PHP">Precedência no PHP</a></li><li><a href="http://www.ataraxia.com.br/posts/evitando-spam-em-formularios" title="Evitando spam em formulários">Evitando spam em formulários</a></li><li><a href="http://www.ataraxia.com.br/posts/imprimindo-em-formularios-continuos-em-php" title="Imprimindo em formulários contínuos em PHP">Imprimindo em formulários contínuos em PHP</a></li><li><a href="http://www.ataraxia.com.br/posts/xml-no-php-com-xml_serializer-parte-2-de-2" title="XML no PHP com XML_Serializer, parte 2 de 2">XML no PHP com XML_Serializer, parte 2 de 2</a></li><li><a href="http://www.ataraxia.com.br/posts/xml-no-php-com-xml_serializer-parte-1-de-2" title="XML no PHP com XML_Serializer, parte 1 de 2">XML no PHP com XML_Serializer, parte 1 de 2</a></li><li><a href="http://www.ataraxia.com.br/posts/validacao-de-dados-em-php" title="Validação de dados em PHP">Validação de dados em PHP</a></li><li><a href="http://www.ataraxia.com.br/posts/evitando-fornecer-seu-email-verdadeiro" title="Evitando fornecer seu email verdadeiro">Evitando fornecer seu email verdadeiro</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.ataraxia.com.br/posts/envio-de-emails-em-php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Evitando fornecer seu email verdadeiro</title>
		<link>http://www.ataraxia.com.br/posts/evitando-fornecer-seu-email-verdadeiro</link>
		<comments>http://www.ataraxia.com.br/posts/evitando-fornecer-seu-email-verdadeiro#comments</comments>
		<pubDate>Mon, 29 Dec 2008 10:16:12 +0000</pubDate>
		<dc:creator>Bruno Lustosa</dc:creator>
				<category><![CDATA[email]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://blog.ataraxia.com.br/?p=80</guid>
		<description><![CDATA[Como todos nós, que usamos o email no nosso dia a dia já sabemos, é praticamente impossível manter nossa caixa postal livre do spam. Porém, podemos usar algumas técnicas para tentar diminuir o nível de spam que chega até nós. Para começar, precisamos entender como os spammers conseguem nossos emails. Existem várias formas: Através de [...]]]></description>
			<content:encoded><![CDATA[<p>Como todos nós, que usamos o email no nosso dia a dia já sabemos, é praticamente impossível manter nossa caixa postal livre do spam. Porém, podemos usar algumas técnicas para tentar diminuir o nível de spam que chega até nós.</p>
<p>Para começar, precisamos entender como os spammers conseguem nossos emails. Existem várias formas:</p>
<dl>
<dt>Através de força bruta:</dt>
<dd>Combinam-se várias palavras, nomes, etc e tentam-se esses nomes em vários serviços de email. Por exemplo, apenas com o nome &#8220;bruno&#8221;, poderíamos tentar bruno@gmail.com, bruno@hotmail.com, bruno@yahoo.com, e por aí vai. Se a lista de nomes e sobrenomes é grande, a quantidade de combinações cresce bem rápido.</dd>
<dt>Minerando a rede:</dt>
<dd>Os spammers usam programas especiais,  chamados <em>harversters</em>, que varrem sites inteiros em busca de endereços de email. Sabe aquele seu amigo, que insiste em mandar email pra alguem com cópia pra deus e o mundo? Pois bem, se um email daqueles para em algum site, é um prato cheio para o spammer, que de cara consegue dezenas, ou até centenas de emails de uma só vez.</dd>
<dt>Comprando listas:</dt>
<dd>Muitos sites onde nos cadastramos não respeitam nossa privacidade, e vendem suas bases de dados cadastrais para terceiros.</dd>
</dl>
<p>Em relação à força bruta, não há muito o que podemos fazer, além de ignorar os emails que chegam. <strong>Nunca</strong> se deve responder nem clicar em nenhum link do spam, pois fazendo isto você pode estar confirmando que o seu email é válido.</p>
<p>Contra a mineração, só mesmo educando as pessoas para que não mandem email usando cópia carbono (&#8220;<acronym title="Cópia Carbono">Cc</acronym>&#8220;), e sim usando cópia carbono oculta (&#8220;<acronym title="Cópia Carbono Oculta">Cco</acronym>&#8220;, ou &#8220;<acronym title="Blind Carbon Copy">Bcc</acronym>&#8220;).</p>
<p>Algo que realmente podemos fazer é evitar dar nosso endereço de email para sites que não são confiáveis. Quais sites não são confiáveis? A princípio, <strong>todos</strong>. Desconfie de tudo e de todos.</p>
<p>Se tudo o que você quer de um site é fornecer seu email para conseguir um acesso, um link, uma senha, ou qualquer coisa que seja enviada por email, uma boa alternativa é o <a href="http://10minutemail.com">10minutemail.com</a>. Através desse site, podemos conseguir um email temporário, válido por 10 minutos, e usá-lo em qualquer site. Qualquer email que o site mande para este endereço fica disponível através de um webmail bem simples, e normalmente, 10 minutos é tempo suficiente para que você receba um email de um site, contendo, por exemplo, um link para ativação de cadastro.</p>
<h4>Como fazer</h4>
<p>Ao abrir o site <a href="http://10minutemail.com">10minutemail.com</a>, aparecerá uma tela explicando o porque do site existir, e um link, logo abaixo do segundo parágrafo chamado &#8220;Obter meu endereço no 10 Minute Mail.. &#8220;. Basta clicar neste link, e o site te informará o seu email temporário.</p>
<p>Agora basta usar e abusar deste email. Se alguma mensagem for enviada para ele, aparecerá na tela. Se precisar de mais tempo, clique no link &#8220;Me dê mais 10 minutos!&#8221;, e você terá mais tempo.</p>
<p>Com isso, você evita de fornecer seu email verdadeiro para sites que poderiam potencialmente vender o seu cadastro para terceiros. Enquanto não existe uma forma de se <del datetime="2008-12-29T00:43:35+00:00">espancar</del> punir spammers, o que podemos fazer é tentar evitar que nossos emails caiam em suas mãos.</p>
<h3  class="related_post_title">Artigos relacionados</h3><ul class="related_post"><li><a href="http://www.ataraxia.com.br/posts/envio-de-emails-em-massa" title="Envio de emails em massa">Envio de emails em massa</a></li><li><a href="http://www.ataraxia.com.br/posts/evitando-spam-em-formularios" title="Evitando spam em formulários">Evitando spam em formulários</a></li><li><a href="http://www.ataraxia.com.br/posts/envio-de-emails-em-php" title="Envio de emails em PHP">Envio de emails em PHP</a></li><li><a href="http://www.ataraxia.com.br/posts/seguranca-no-envio-de-emails" title="Segurança no envio de emails em PHP">Segurança no envio de emails em PHP</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.ataraxia.com.br/posts/evitando-fornecer-seu-email-verdadeiro/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Segurança no envio de emails em PHP</title>
		<link>http://www.ataraxia.com.br/posts/seguranca-no-envio-de-emails</link>
		<comments>http://www.ataraxia.com.br/posts/seguranca-no-envio-de-emails#comments</comments>
		<pubDate>Sun, 28 Dec 2008 22:40:18 +0000</pubDate>
		<dc:creator>Bruno Lustosa</dc:creator>
				<category><![CDATA[programação]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[segurança]]></category>

		<guid isPermaLink="false">http://blog.ataraxia.com.br/?p=44</guid>
		<description><![CDATA[Muitas aplicações, e a maioria dos sites, qualquer que seja a linguagem em que tenha sido desenvolvido, precisa enviar emails, seja para contato do visitante, ou para enviar o link para um amigo, ou até mesmo como confirmação de um formulário qualquer. Porém, se não forem tomados os devidos cuidados, sua aplicação pode ser explorada, [...]]]></description>
			<content:encoded><![CDATA[<p>Muitas aplicações, e a maioria dos sites, qualquer que seja a linguagem em que tenha sido desenvolvido, precisa enviar emails, seja para contato do visitante, ou para enviar o link para um amigo, ou até mesmo como confirmação de um formulário qualquer.</p>
<p>Porém, se não forem tomados os devidos cuidados, sua aplicação pode ser explorada, e seu servidor pode passar a ser mais uma ferramente nas mãos dos spammers, pronto pra ficar enviando todo tipo de lixo pra meio mundo.</p>
<p>O principal problema com isso, além do fato do seu servidor passar a disseminar a praga que é o spam, é que seu servidor pode cair em algumas das listas negras, e com isso você passa a não conseguir mais enviar emails legítimos pra quem usa as tais listas pra se proteger contra o spam.</p>
<p>Resumindo: é uma dor de cabeça que você não quer ter.</p>
<p>Os cuidados que você precisa tomar no PHP pra não acabar com um problema desses é bem simples. Vamos ver, passo a passo, como normalmente é feito o envio de emails através do PHP, e onde podemos melhorá-lo.</p>
<p>Um formulário típico de contato de algum site, poderia ter a forma abaixo:</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">form</span> <span style="color: #000066;">action</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;envia.php&quot;</span> <span style="color: #000066;">method</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;post&quot;</span>&gt;</span>
Nome: <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;nome&quot;</span> <span style="color: #66cc66;">/</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">br</span> <span style="color: #66cc66;">/</span>&gt;</span>
Email: <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;email&quot;</span> <span style="color: #66cc66;">/</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">br</span> <span style="color: #66cc66;">/</span>&gt;</span>
Mensagem: <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">textarea</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;mensagem&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">textarea</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">br</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;submit&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">form</span>&gt;</span></pre></div></div>

<p>Ou seja, com o formulário acima, o usuário coloca seu nome, seu email, e a mensagem que deseja enviar. Ao se clicar no botão de submit, os dados são passados para o script envia.php, que tem a tarefa de enviar um email com a mensagem do usuário. Esse script, muitas vezes é implementado da seguinte forma, usando a função mail() do PHP:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000088;">$para</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;equipe@site.com.br&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$assunto</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;Contato do site&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$msg</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'mensagem'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$headers</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;From: <span style="color: #006699; font-weight: bold;">{$_POST['nome']}</span> &lt;<span style="color: #006699; font-weight: bold;">{$_POST['email']}</span>&gt;&quot;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">mail</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$para</span><span style="color: #339933;">,</span> <span style="color: #000088;">$assunto</span><span style="color: #339933;">,</span> <span style="color: #000088;">$msg</span><span style="color: #339933;">,</span> <span style="color: #000088;">$headers</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Tudo muito bonito. O usuário envia seu nome, email e a mensagem, e o script PHP manda um email para equipe@site.com.br com o conteúdo do email. Estaria perfeito se não fosse pela montagem do cabeçalho From. O grande problema está em não tratar esses dados que foram enviados pelo usuário. Se o usuário faz o envio normalmente, teríamos um email mais ou menos assim (estou ignorando alguns cabeçalhos para simplificar o exemplo):</p>

<div class="wp_syntax"><div class="code"><pre class="email" style="font-family:monospace;"><span style="color: #000040;"><span style="color: #800000; font-weight: bold;">From</span><span style="color: #66cc66;">:</span> Bruno Lustosa <span style="color: #66cc66;">&lt;</span><span style="color: #0000FF;">bruno@lustosa.net</span><span style="color: #66cc66;">&gt;</span></span>
<span style="color: #000040;"><span style="color: #800000; font-weight: bold;">To</span><span style="color: #66cc66;">:</span> <span style="color: #0000FF;">equipe@site.com.br</span></span>
<span style="color: #000040;"><span style="color: #800000; font-weight: bold;">Subject</span><span style="color: #66cc66;">:</span> Contato do site</span>
&nbsp;
Olá, aqui vai a minha mensagem.</pre></div></div>

<p>Nesse caso, postei meu nome, meu email, e a mensagem acima é enviada para a equipe do site. Porém, como o usuário tem o controle sobre o que entra no cabeçalho da mensagem, ele pode ser um pouco sacana, e colocar uma quebra de linha no nome dele, com algumas coisas depois. Por exemplo, se no lugar do meu nome eu coloco &#8220;Buy Viagra &lt;xx@xx.com&gt;nBcc: email1, email2, email3&#8243; e na mensagem eu coloco algo sobre venda de viagra, teríamos o seguinte email montado:</p>

<div class="wp_syntax"><div class="code"><pre class="email" style="font-family:monospace;"><span style="color: #000040;"><span style="color: #800000; font-weight: bold;">From</span><span style="color: #66cc66;">:</span> Buy Viagra <span style="color: #66cc66;">&lt;</span><span style="color: #0000FF;">xx@xx.com</span><span style="color: #66cc66;">&gt;</span></span>
<span style="color: #000040;">Bcc<span style="color: #66cc66;">:</span> email1, email2, email3</span>
<span style="color: #000040;"><span style="color: #800000; font-weight: bold;">To</span><span style="color: #66cc66;">:</span> <span style="color: #0000FF;">equipe@site.com.br</span></span>
<span style="color: #000040;"><span style="color: #800000; font-weight: bold;">Subject</span><span style="color: #66cc66;">:</span> Contato do site</span>
&nbsp;
Compre Viagra, baratinho!!</pre></div></div>

<p>Isso foi apenas um exemplo, mas dá pra combinar outras técnicas e conseguir por exemplo sobrescrever o assunto da mensagem. E hoje em dia, já existem robôs vasculhando formulários de sites buscando por vulnerabilidades desse tipo. Aconteceu em um código antigo da empresa onde estou trabalhando agora. Começamos a entrar em algumas listas negras e sem entender o porque. Quando fomos verificar a fila de emails esperando pra sair do servidor, eram mais de 30 mil spams sobre todo tipo de lixo. E vasculhando os logs do servidor web, chegamos ao script culpado.</p>
<p>É claro que isso <strong>NÃO É</strong> um problema do PHP. O PHP é tão seguro quanto uma pistola. Se o programador decide dar um tiro no próprio pé, não dá pra colocar a culpa na arma, não é? Esse é apenas mais um exemplo do tipo de problema que podemos enfrentar quando não validamos os dados enviados pelo usuário. Sempre que qualquer informação for enviada de um lugar não confiável, essa informação deve ser checada. Uma simples verificação em $_POST['nome'], buscando por quebras de linha, ou em $_POST['email'], verificando se se trata de um email válido, já resolveria esse problema.</p>
<p>A grande maioria dos problemas que vemos divulgados diariamente em todo tipo de script PHP se baseiam no fato de que os programadores não tem o hábito de programar pensando em segurança, e não fazem as checagens mais básicas, deixando os scripts vulneráveis a ataques como o descrito acima e outros.</p>
<h3  class="related_post_title">Artigos relacionados</h3><ul class="related_post"><li><a href="http://www.ataraxia.com.br/posts/evitando-sql-injection-em-php" title="Evitando SQL injection em PHP">Evitando SQL injection em PHP</a></li><li><a href="http://www.ataraxia.com.br/posts/criando-captchas-em-php" title="Criando CAPTCHAs em PHP">Criando CAPTCHAs em PHP</a></li><li><a href="http://www.ataraxia.com.br/posts/evitando-spam-em-formularios" title="Evitando spam em formulários">Evitando spam em formulários</a></li><li><a href="http://www.ataraxia.com.br/posts/envio-de-emails-em-php" title="Envio de emails em PHP">Envio de emails em PHP</a></li><li><a href="http://www.ataraxia.com.br/posts/agendando-eventos-no-wordpress" title="Agendando eventos no WordPress">Agendando eventos no WordPress</a></li><li><a href="http://www.ataraxia.com.br/posts/removendo-o-generator-do-wordpress" title="Removendo o &#8220;generator&#8221; do Wordpress">Removendo o &#8220;generator&#8221; do Wordpress</a></li><li><a href="http://www.ataraxia.com.br/posts/envio-de-emails-em-massa" title="Envio de emails em massa">Envio de emails em massa</a></li><li><a href="http://www.ataraxia.com.br/posts/escrevendo-plugins-para-o-wordpress" title="Escrevendo plugins para o Wordpress">Escrevendo plugins para o Wordpress</a></li><li><a href="http://www.ataraxia.com.br/posts/os-10-piores-captchas-do-mundo" title="Os 10 piores CAPTCHAs do mundo">Os 10 piores CAPTCHAs do mundo</a></li><li><a href="http://www.ataraxia.com.br/posts/pegadinhas-no-php" title="Pegadinhas no PHP">Pegadinhas no PHP</a></li><li><a href="http://www.ataraxia.com.br/posts/otimizacao-em-php-parte-1-minify" title="Otimização em PHP, parte 1: Minify">Otimização em PHP, parte 1: Minify</a></li><li><a href="http://www.ataraxia.com.br/posts/precedencia-no-php" title="Precedência no PHP">Precedência no PHP</a></li><li><a href="http://www.ataraxia.com.br/posts/imprimindo-em-formularios-continuos-em-php" title="Imprimindo em formulários contínuos em PHP">Imprimindo em formulários contínuos em PHP</a></li><li><a href="http://www.ataraxia.com.br/posts/xml-no-php-com-xml_serializer-parte-2-de-2" title="XML no PHP com XML_Serializer, parte 2 de 2">XML no PHP com XML_Serializer, parte 2 de 2</a></li><li><a href="http://www.ataraxia.com.br/posts/xml-no-php-com-xml_serializer-parte-1-de-2" title="XML no PHP com XML_Serializer, parte 1 de 2">XML no PHP com XML_Serializer, parte 1 de 2</a></li><li><a href="http://www.ataraxia.com.br/posts/validacao-de-dados-em-php" title="Validação de dados em PHP">Validação de dados em PHP</a></li><li><a href="http://www.ataraxia.com.br/posts/evitando-fornecer-seu-email-verdadeiro" title="Evitando fornecer seu email verdadeiro">Evitando fornecer seu email verdadeiro</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.ataraxia.com.br/posts/seguranca-no-envio-de-emails/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

