Feed e Twitter

Feed RSS Twitter

Busca

Por Lustosa em 31/12/2008 às 00:05

Um tópico que sempre traz muitas dúvidas é o envio de emails em PHP. A linguagem traz a função mail(), 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:

<?php
mail($para, $assunto, $mensagem, $cabecalhos, $parametros);
?>

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.

O problema surge justamente quando queremos algo a mais, como por exemplo:

  • Anexar arquivos;
  • Emails em HTML (ou em texto e HTML);
  • Assinar digitalmente o email;
  • Colocar acentos no assunto ou no corpo (é necessário codificar pra ficar 100% compatível);
  • Autenticar em um servidor SMTP;
  • entre outras coisas…

Sai a função mail(), entra a classe PHPMailer

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.

A classe para o PHP 5/6 pode ser baixada diretamente do SourceForge, 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 POP3, mas que não são necessárias caso não se utilize servidores SMTP ou POP3 externos.

Usando a classe

Uma vez copiada, basta darmos um include ou um require, e teremos a classe disponível para ser instanciada. Um exemplo bem simples:

<?php
$mail = new PHPMailer();
$mail->IsMail();                         // Usando como backend a função mail()
$mail->From = "bruno@lustosa.net";       // Email de quem envia a mensagem
$mail->Sender = $mail->From;
$mail->FromName = "Bruno Lustosa";       // Nome de quem envia a mensagem
$mail->AddAddress("nobody@example.com"); // Quem irá receber. Posso chamar mais vezes
$mail->Subject = "Assunto da mensagem";
$mail->IsHTML(true);                     // Estou enviando um email em HTML
$mail->Body = "<b>email em html</b>";    // Este é o email, em HTML
$mail->AltBody = "email em texto";       // Email alternativo, em texto puro
$mail->CharSet = "utf-8";                // A codificação usada no email
if ($mail->Send()) {
    print "Email enviado com sucesso.";
}
?>

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 “formatador” do email, gerando todos os cabeçalhos e fazendo toda a codificação necessária, e no fim, chamando a função mail() para fazer o envio (pois chamei o método IsMail()). Ao invés de passar para a função mail(), poderia usar um servidor SMTP externo chamando o método IsSMTP() e indicando o servidor em $mail->Host.

Algumas explicações:

  • Estou setando o cabeçalho Sender para o mesmo valor que o From, pois alguns servidores colocam o Sender automaticamente caso ele não seja setado, e nem sempre ele coloca o valor que queremos.
  • A chamada a AddAddress() 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 AddAddress(), que adiciona o email no “Para”, também temos o AddCC(), que adiciona o email no campo “Cc” e o AddBCC(), que adiciona no “Bcc” (ou “Cco“).
  • 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.

A classe possui inúmeras propriedades e métodos 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 “examples” 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.

Artigos relacionados

Arquivado em programação
Tags: ,

Feed RSS para os comentários deste artigo.


Fechado!


Copyright 2009 Ataraxia!   Sinopse