PHPMailer e SMTP

Quando se tratando de desenvolver sistemas voltados para a web, as vezes é necessário enviar algum e-mail para o usuário. Seja para gerenciar a criação de logins ou para enviar novidades ao mesmo. Recentemente estive desenvolvendo um fórum, como trabalho final de disciplina de engenharia do conhecimento e precisava que o sistema enviasse e-mails automaticamente. Desta forma procurei escolher uma classe que me ajudasse nisso e como já tinha usado antes resolvi novamente minhas necessidades com a classe PHPMailer.

A classe PHPMailer (pode ser vista no http://sourceforge.net/projects/phpmailer/ ou em Worxware) tem já seus quase 10 anos, muito bem desenvolvida e testada, abaixo descrevo um exemplo para enviar um e-mail ao autor de um tópico quando alguém tenha respondido esse tópico.

Idéia:

  • Enviar e-mail usando PHP
  • Usar SMTP e a Classe PHPMailer
  • A seguir o código.

    Arquivo ou classe:

    <?php
    // dando include na classe, verificando qual é a versão em uso
    require("PHPMailer_v5.1/class.phpmailer.php");
    
    function enviarEmail(){
    
    // setando as informações para o e-mail
    $assunto = 'Seu tópico foi respondido';
    $texto= 'Verifique seu tópico no Forum';
    
    //setando e-mail de destino:
    $emailDestinatario = 'destinatario@algo.com';
    
    // instancia o objeto da classe
    $mail = new PHPMailer ();
    
    // setando o e-mail e nome do remetente
    $mail->SetFrom('seusistema@gmail.com', 'Forum');
    
    // aqui adicionamos o(s) endereço(s) do destinatário(s)
    $mail->AddAddress($emailDestinatario); // também pode ser inserido
    
    // o nome do destinatário, tal qual no $mail->SetFrom
    
    // criamos o corpo e o assunto do e-mail,
    // codifcação ut8 para que possa reconhecer acentos:
    $mail->Subject = utf8_decode($assunto);
    $mail->Body = $texto;
    
    $mail->IsHTML(true);// ativa o envio de mensagem em html, pode-se montar uma mensagem em HTML e colocar tudo numa string em $texto  logo acima
    
    // o tipo de comunicação segura aceito pelo servidor:
    $mail->SMTPSecure = "ssl";
    
    // aqui é no caso de querer usar o programa de envio de e-mails específico  do SO, se for Linux é IsMail(), se o servidor for windows é IsSMTP
    $mail -> IsSMTP();
    
    $mail -> Host = 'smtp.gmail.com'; // servidor SMTP
    $mail -> Port = 465; // porta do servidor
    $mail -> SMTPAuth = true; // ativando autenticação
    
    // login e senha para a devida autenticação:
    $mail -> Username = 'seusistema';
    $mail -> Password = 'senhadoemaildoseusistema';
    
    // e pronto, é só enviar com a seguinte função
    $mail -> Send();
    }
    
    ?>
    
    

    Lembrando que a classe PHPMailer também tem controle de excessões (Send() retorna erro se algum dos parâmetros setados estiverem com erro), podendo ser facilmente indetificados os problemas com envio de e-mails (podendo incluir em logs os erros). O próprio desenvolvedor poderá setar a linguagem para o uso da classe com $email->SetLanguage(“br”);
    Fazendo com que inclusive os erros sejam descritos em nossa língua mãe.

    Com isso em poucas linhas podemos criar inclusive um gerenciador de envio automáticode e-mails, com novidades de interesse para os usuários ou notificações de sistema. Muito bem testado com e-mails remetentes do gmail através do servidor SMTP do gmail. Nos próximos posts poderemos ver melhor outros exemplos com POP3 por exemplo.

    Realmente não usei dessa forma como descrito, muita coisa pode ser melhorada, como por exemplo: dividir em duas funções para uma rápida mudança de texto e assunto dos e-mails enviados inclusive com a busca de e-mails em banco de dados, enfim, um mar de códigos, abra a classe e divirta-se.<!–

    Anúncios
    • Trackback are closed
    • Comentários (2)
    1. opa,

      só passando um detalhe que encontrei aqui, parece-me que o gmail não usa mais SSL na autenticação. Agora, ao invés de SSL no $mail->SMTPSecure, deve ser colocado TLS. Isso vale também para conexões com hotmail (smtp.live.com, porta 25, autenticada). Sobre o TLS (Transport Layer Security), é um protocolo sucessor do SSL (Secure Socket Layer)…

      • Opa Sergio, bacana, sempre é bom avisar. Antigamente no helper do gmail, por exemplo, não constava TLS, mas já vi agora mesmo que por enquanto ele está aceitando os dois, só que realmente TLS é superior, thanks!

    Comentários encerrados.
    %d blogueiros gostam disto: