Felipe Oliveira da Silva
Dicas de programação e portfólio
  • Javascript
  • MySQL
  • Outros
  • PHP
  • Trabalhos
    • Estrutura (CSS)
    • Hotsites
    • Sistemas
    • Websites
  • Web
PHP

Envio de e-mail com PHPMailer

Depois de algumas semanas corridas com muitos freelas estou voltando a publicar um artigo aqui no blog.

Hoje vou ensinar como enviar e-mails com a famosa classe PHPMailer, um método muito mais prático e eficiente do que a simples função mail().
Uma das maiores vantagens é que você consegue configurar a classe não só para enviar e-mails com a função mail() mas também utilizando o modo SMTP utilizando as configurações do seu servidor de e-mail.
1º Passo – Baixar a classe atualizada, no site http://phpmailer.sourceforge.net/
2º Passo – Criar o formulário de contato:
contato.php:
<form name=“contato” action=“envia.php” method=“post” >
Nome:<br/>
<input name=“fale[nome]“ type=“text” value=“” />
E-mail:<br/>
<input name=“fale[email]“ type=“text” value=“” />

Assunto:<br/>
<input name=“fale[assunto]“ type=“text” value=“” />
Mensagem: <br/>
<textarea name=“fale[mensagem]“></textarea>
<input name=“enviar” type=“submit” value=“Enviar” />
</form>

Não esqueça de declarar a action do formulário com o nome do arquivo que vamos criar agora, enviar.php.

3º Passo – Criar o arquivo de envio

enviar.php:
<?php

include(“phpmailer/class.phpmailer.php”);
$dados = $_REQUEST['fale'];
$mail = new PHPMailer();
$mail->IsMail(true);
$mail->IsHTML(true);
$mail->From = $dados['email'];
$mail->FromName = $dados['nome'];
$mail->AddAddress(“fel.prog@gmail.com”,“Felipe Oliveira”);
$mail->Subject = “Fale conosco – “.$dados['assunto'];
$mail->Body = “<b>Nome:</b> “.$dados['nome'].” <br /><br /><b>E-mail:</b> “.$dados['email'].” <br /><br /><b>Mensagem:</b> “.$dados['mensagem'];
if
($mail->Send())
echo
“E-mail enviado com sucesso”;
else

echo
“Erro ao enviar e-mail, tente novamente mais tarde.”;
?>

Linha 2: Chamamos o include da classe PHPMailer
Linha 3: Pegamos os dados digitados no formulário
Linha 4: Instanciamos a classe PHPMailer
Linha 5: Caso queira utilizar o programa de e-mail do seu servidor unix/linux para o envio de e-mail. Caso seja servidor windows o e-mail precisa ser enviado via STMP, então ai invéz de utilizar a função $mail->IsMail() utilizamos $mail->IsSMTP()
Linha 6: Ativa o envio de e-mail no formato html, se false desativa
Linha 7: E-mail do remente da mensagem
Linha 8: Nome do remente da mensagem
Linha 9: E-mail que vamos enviar a mensagem
Linha 10: Assunto da mensagem
Linha 11: Corpo da mensagem
Linha 12: Enviamos a mensagem
Linha 13: Mensagem do envio realizado com sucesso
Linha 15: Mensagem de erro, caso não seja possível enviar a mensagem

Com o PHPMailer também é possível fazer o envio via SMTP, basta adicionar alguns itens:
$mail->IsSMTP();
#Configuramos a conexão ao SMTP
$mail->Host = “smtp.dominio.com.br”;
$mail->SMTPAuth = true; // Ativa a autenticação do usuário

#Configuramos o login e senha de conexão a conta SMTP
$mail->Username = “email@dorminio.com.br”;
$mail->Password = “senha”;

Outros itens:
$mail->AddBcc(email@dominio.com.br); // Adiciona cópia oculta
$mail->AddAttachment(); // Para enviar anexos

Clique aqui para fazer o download dos arquivos usados nesse tutorial

Postado em 17 de março de 2009 às 07:50

32 Comentários »

32 Comentários em “Envio de e-mail com PHPMailer”

  1. Rutemberg diz:
    03 de abril de 2009 às 16:33

    Cara, eu não consigo enviar e-mail com autenticação do gmail.

    Poderia ajudar?

  2. Felipe Oliveira diz:
    06 de abril de 2009 às 15:16

    Amigo,
    Para enviar com o gmail você precisa baixar a última versão do PHPMailer e fazer algumas alterações.

    Segue o link do tutorial:
    https://www.google.com/accounts/ServiceLogin?passive=true&service=groups2&continue=http://groups.google.com.br/group/listaphp/msg/8ebb65c126406e14&cd=BR&hl=pt-BR

    Qualquer dúvida estou a disposição.

  3. Felipe Oliveira diz:
    06 de abril de 2009 às 18:01

    Rutemberg,

    Aqui esta a solução:

    <?php
    require_once "phpmailer/class.phpmailer.php";

    $mail = new PHPMailer ();

    $mail -> From = "seu_email@gmail.com";
    $mail -> FromName = "Nome que envia";
    $mail -> AddAddress ("email_que_recebe@gmail.com");
    $mail -> Subject = "Email usando SMTP do Google";
    $mail -> Body = "<h4>Email enviado do Gmail.</h4>";
    $mail -> IsHTML (true);
    $mail -> IsSMTP();
    $mail -> Host = "ssl://smtp.gmail.com";
    $mail -> Port = 465;
    $mail -> SMTPAuth = true;
    $mail -> Username = "email_que_envia@gmail.com";
    $mail -> Password = "senha_do_email";

    if(!$mail->Send()) {
    echo "Erro:".$mail->ErrorInfo;
    }
    else {
    echo "Email enviado!";
    }

    ?>

  4. Antonioi Carlos diz:
    14 de maio de 2009 às 22:45

    Muito Bom este tutorial…

  5. CAIO BARBOSA diz:
    10 de junho de 2009 às 11:13

    Muito bom!!

    Pessoas como você, que simplificam a vida de milhares de pessoas sem pensar em retorno, são de se admirar!!

  6. Rafaela diz:
    29 de junho de 2009 às 22:16

    Olá Felipe.
    Usei o seu código e deu certo, achei bem simples e fácil de entender! Só que ocorreu um probleminha, talvez você possa me ajudar.
    O formulário de contato do meu site tem 4 campos, quando recebo o e-mail na minha caixa de entrada, as informações digitadas nos campos chegam, só que apenas a 1° letra digitada em cada campo do formulário.
    Tem alguma idéia do porque isto ocorre?

  7. Rafaela diz:
    30 de junho de 2009 às 11:32

    Opa! Deu certo!
    Desculpa, eu tinha esquecido de revisar o formulário de contato e acabou ocasionando um erro de digitação, agora ta tudo funcionando!

    Valeu pelo código Felipe, é um dos poucos na internet que funcionam sem ter que mudar quase nada! Parabéns!!! ^^v

  8. Dreyson diz:
    24 de julho de 2009 às 09:39

    Olá Felipe,
    ver só quando entro na página de contato já envia um e-mail sem eu ao menos enviar o que posso fazer?

  9. Felipe diz:
    24 de julho de 2009 às 10:00

    Dreyson,

    Você apenas que visualizar quem entrar na sua página de contato?
    Se for isso é só usar o Google Analytics.

    abs,
    Felipe

  10. Dreyson diz:
    28 de julho de 2009 às 11:02

    Oi Felipe,

    desculpe esta postando novamente. Resolvi este caso, mas tenho outro que esta me quebrando o formulário de contato esta correto, mas não esta chegando acentuações da uma olha ai no meu código por favor.

    Código PHP

    contato

    Obrigado por entrar em contato com a Recife Tecnologia Breve entraremos em contato com você. <<Voltar a home

    IsSMTP();
    // Seu servidor smtp
    $mail->Host = “mail.recifetecnologia.com.br”;
    // habilita smtp autenticado
    $mail->SMTPAuth = true;
    // usuário deste servidor smtp
    $mail->Username = “dreyson@recifetecnologia.com.br”;
    $mail->Password = “910817″; // senha
    //email utilizado para o envio
    //pode ser o mesmo de username
    $mail->From = “dreyson@recifetecnologia.com.br”;
    $mail->FromName = “FORMULÁRIO DE CONTATO DO SITE”;

    //Enderecos que devem ser enviadas as mensagens
    $mail->AddAddress(“dreyson@recifetecnologia.com.br”,”DREYSON SANTIAGO”);

    //wrap seta o tamanhdo do texto por linha
    $mail->WordWrap = 50;
    //anexando arquivos no email
    $mail->AddAttachment(“anexo/arquivo.zip”);
    $mail->AddAttachment(“imagem/foto.jpg”);
    $mail->IsHTML(true); //enviar em HTML

    header(“Content-Type: text/html; charset=ISO-8859-1″, true);
    // recebendo os dados od formulario
    if(isset($_POST['nome']) && isset($_POST['email']) && isset($_POST['tel']) && isset($_POST['mensagem'])){
    $nome = ucwords($_POST['nome']);
    $email = $_POST['email'];
    $tel = $_POST['tel'];
    $mensagem = $_POST['mensagem'];
    // informando a quem devemos responder
    //ou seja para o mail inserido no formulario
    $mail->AddReplyTo(“$email”,”$nome”);
    //criando o codigo html para enviar no email
    //voce pode utilizar qualquer tag html ok
    $msg = “”;
    $msg .= “ Nome: $nome\n”;
    $msg .= “ E-mail: $email\n”;
    $msg .= “ TEL: $tel\n”;
    $msg .= “ Mensagem: $mensagem\n”;
    }

    $mail->Subject = “CONTATO DO SITE”;
    //adicionando o html no corpo do email
    $mail->Body = $msg;
    //enviando e retornando o status de envio
    if(!$mail->Send())
    {
    echo “houve um erro ao enviar o email! “.$mail->ErrorInfo;
    //$mail->ErrorInfo informa onde ocorreu o erro
    exit;
    }
    ?>

    Obrigado pela atenção cara.

  11. Dreyson diz:
    28 de julho de 2009 às 11:04

    Cara ocorreu um erro ai desculpe
    código HTML meu topo esta assim.

  12. feloliveira diz:
    28 de julho de 2009 às 12:26

    Dreyson,

    Experiemnta trocaro o HEADEr para UTF-8.

    Se não funcionar você rpecisa converter os caracteres para UTF-8 com a função utf8_encode().

    abs,
    Felipe

  13. Dreyson diz:
    30 de julho de 2009 às 11:46

    não mexo muito com PHP não, mas coloquei o código para UTF-8, mas não funcionou essa função que você passou como posso utilizar?

    Obrigado pela atenção!!

  14. Felipe diz:
    30 de julho de 2009 às 22:42

    Dreyson,

    Seria essa função:
    http://www.php.net/manual/pt_BR/function.utf8-encode.php

    Você teria que converter todas as variáveis, exemplo:
    $nome = utf8_encode($nome);

    abs,
    Felpe

  15. Roberto diz:
    21 de outubro de 2009 às 23:37

    Felipe, parabéns pelo tutorial. Estou tendo um problema. Entrei no banco um endereço absurdo de e-mail para gerar erro e ele diz que foi enviado com sucesso.. O que poderia estar errado?

    Obrigado

  16. CODE diz:
    05 de novembro de 2009 às 13:28

    ola Felipe estou tentando criar um email mas nao consigo saber se é no php que ponho que ponho este codigo e qual seria o resto do codigo para eu enviar a mensagem

    Nome

    Email

    Telefone

    Assunto

  17. Felipe Oliveira diz:
    07 de novembro de 2009 às 00:15

    Não consegui entendrr, pode explicar novamente?
    Se preferir meu e-mail é: fel.prog@gmail.com

  18. Vítor Macedo diz:
    15 de novembro de 2009 às 13:57

    Felipe,

    Testei este seu formulário colocando diversos emails diferentes no campo Email do formulário e percebi que com os emails da Hotmail dá problema de envio. Você sabe porque?

  19. Anderson diz:
    01 de dezembro de 2009 às 00:25

    Olá Filipe ,

    Estava testando seu script e no yahoo e hotmail os emails entram como spam ou lixo eletrônico como faço para eles chegarem na entrada principal da caixa.

  20. Felipe diz:
    01 de dezembro de 2009 às 08:52

    Anderson,

    Faça o envio via SMTP, isso pode ajudar.

    Abs,
    Felipe

  21. Gilmar diz:
    27 de janeiro de 2010 às 10:13

    Eu utilizei o script em duas páginas, em uma das páginas o email vai para a caixa de entrada e na outra vai para o lixo eletrônico. Por que será que isso está ocorrendo? Tem haver com o tamanho da mensagem?

  22. Felipe diz:
    27 de janeiro de 2010 às 10:17

    Gilmar,
    Se você enviar o e-mail mais de uma vez isso pode ocorrer porque o e-mail entende como SPAM.
    Ou também pode ser o e-mail que esta configurado no
    $mail -> From = “seu_email@gmail.com”;
    $mail -> FromName = “Nome que envia”;

    Se for um e-mail de SPAM. Utilize o mesmo e-mail nos dois scrips.

    Abs,
    Felipe

  23. Gilmar diz:
    27 de janeiro de 2010 às 11:40

    Obrigado pela ajuda Felipe, vou dar uma verificada na configuração do e-mail.
    Porém o script que está funcionando bem eu o enviei duas vezes em seguida (para hotmail) e foi de boa, mas Yahoo nenhum dos dois scripts estão enviando, nem como spam.

    Valeu!!!
    Gilmar

  24. Felipe diz:
    27 de janeiro de 2010 às 17:59

    Amigo,

    Provavelmente o yahoo deve estar bloqueando. Ele é meio chato com isso.

    Abs,
    Felipe

  25. wagner diz:
    26 de fevereiro de 2010 às 18:42

    Ola Felipe, é possivel colocar auto resposta no phpMailer, varri o google e não achei usu a função mail(), mas essa me envia para lixo eletronico

  26. Felipe diz:
    02 de março de 2010 às 09:46

    Warber,
    Como assim uma auto resposta?
    Assim que receber o e-mail enviar uma resposta para o usuário o qual enviou?
    Se for isso acredito que seja melhor configurar o seu próprio e-mail.

    abs,
    Felipe

  27. Emanuel diz:
    07 de maio de 2010 às 06:07

    Felipe muito bom seu artigo
    vamos ao problema heheheh…
    Estou usando o phpmailer em um sistema de newsletter que criei.
    Ele esta enviando para o hotmail, yahoo só que para o gmail os dados do form não chega o email só que vazio oque pode ser isso estou enviando com autenticação os email.
    Abração

  28. Felipe diz:
    10 de maio de 2010 às 21:12

    Emanuel,
    Estranho isso, pois se aparece no YAHOO e HOTMAIL tb aparecerá no GMAIL.
    Posta o código para eu dar uma olhada.

    Abs,
    Felipe

  29. Jose Maria Junior diz:
    12 de abril de 2011 às 08:53

    Felipe muito bom seu tutorial.

    Estou precisando de um código para envio de resposta automatico com o phpmailer para colocar num formulário de contato.

    Abraço

  30. Douglas Lopes diz:
    12 de julho de 2011 às 00:18

    cara legal o tuto, mas teu action no form ta envia.php sem “R” e vc mandou salvar o arquivo com os scripts como enviar.php com “R”, bele??
    abraço cara!

  31. Paulo Melo diz:
    16 de maio de 2012 às 16:20

    Envio varios emails para diferentes destinatarios e todos voltam para minha caixa de entrada(para o endereco de remetente), mas também chegam ao destinatario….

    Como evitar este erro?
    Imagina eu mandar 100 emails e todos chegarem ao destinatario e também pra mim?
    Segue meu codigo em PHP:

    IsSMTP();
    $mail->Host = “smtp.meusiste.com.br”;
    $mail->SMTPAuth = true;
    $mail->Username = $usuario;
    $mail->Password = $senha;
    $mail->WordWrap = 50;
    $mail->From = $_POST["emailremetente"];
    $mail->FromName = $_POST["nomeremetente"];
    $mail->CharSet=”iso-8859-1″;
    $mail->AddAddress($emaildestinatario, utf8_decode($nomedestinatario));
    $mail->IsHTML(true);
    $mail->Subject = utf8_decode($_POST["assunto"]);
    $mail->Body = utf8_decode($_POST["mensagememail"]);
    $headers = “MIME-Version: 1.1\n”;
    $headers .= “Content-Description: File Transfer\n”;
    $headers .= “Content-type: text/html; charset=iso-8859-1\n”;
    $headers .= “From: ” . “$nomeremetente” . ” \r\n”;
    $mail->Send();
    ?>

    Grato
    Paulo

  32. Paulo Melo diz:
    16 de maio de 2012 às 16:21

    primeiras linhas faltaram:
    <?php
    require_once("phpmailer/class.phpmailer.php");
    $mail = new PHPMailer();

Comentar

Busca

  • Popular
  • Comentados
  • Últimos

  • Galeria de fotos com jquery - Demo 1
  • Criando tabelas no MySQL
  • Envio de e-mail com PHPMailer
  • Recebendo dados de formulário
  • Conectando ao Banco de Dados MySQL com PHP
  • Operadores (aritmético, comparação, lógico, atribuição)
  • Lightbox 2
  • Trabalhando com data no PHP
  • Redimensionando imagens em PHP
  • Programação Orientada a Objetos em PHP
  • Galeria de fotos com jquery – Demo 1 (84)
  • Envio de e-mail com PHPMailer (32)
  • Lightbox 2 (30)
  • Redimensionando imagens em PHP (19)
  • Criando abas com Javascript (16)
  • Conectando ao Banco de Dados MySQL com PHP (16)
  • Estruturas de repetição em PHP (while, do while, for e foreach) (9)
  • Criando tabelas no MySQL (9)
  • Até o "concorrente" usa GMAIL (9)
  • Recebendo dados de formulário (6)
  • Conectando ao Banco de Dados MySQL com PHP
  • Programação Orientada a Objetos em PHP
  • GOL Indica
  • Manga comunicação e marketing
  • Firefox 4.0 deve ser lançado em 2010
  • Google Street View se preocupa com a privacidade das pessoas
  • Atrações Educativas – Educar para crescer
  • Realidade aumentada
  • Projetos Residentes Roc
  • Office 2010 com nova proteção antipirataria

Categorias

  • Estrutura (CSS)
  • Hotsites
  • Javascript
  • MySQL
  • Outros
  • PHP
  • Sistemas
  • Web
  • Websites

Arquivos

  • dezembro 2009
  • outubro 2009
  • setembro 2009
  • agosto 2009
  • julho 2009
  • junho 2009
  • maio 2009
  • abril 2009
  • março 2009
  • fevereiro 2009
  • janeiro 2009
  • dezembro 2008
  • novembro 2008

Tags

abas array banco de dados Bing.com chrome classes Condicionais conexão construtor Cookie CSS domínio expressão FAQ firefox formulário função Funções Galeria de fotos gmail google google chrome google maps Hotmail IE IE7 IE8 IE9 Internet internet explorer Javascript jquery kingston Layout Microsoft MySQL métodos objetos PHP Portfólio SEO sistema tecnologia twitter Web

Lista de links

  • Eduardo Willian
  • Fred Carbonare
  • Jhonatan
  • Rafael Jaques

© Felipe Oliveira da Silva
Wordpress Theme designed by DT Website Templates