Enviando email autenticado – PHP5

Publicado: agosto 8, 2008 em PHP
Tags:, , , , ,

Email Autenticado com PHP5 – Classe PHPMailer

Olá, galera recentemente passei por um problemão com os sites de clientes, devido à troca de host que eu utilizava para hospedar os sites de meus clientes eu acabei me deparando com uma falha (minha) muito grande!

Eu utilizava um script para envio de email que não utilizava autenticação e após a troca de host para outro que apenas enviava email autenticado os clientes acabaram ficando 2 dias sem receber email e dei sorte em perceber pq o script retornava sucesso ao enviar. Então acabei tendo que mudar em todos os clientes, embora eu soubesse da importância de se enviar email utilizando a autenticação nunca tinha notado a necessidade. É de conhecimento que os email enviados sem autenticação podem ser reportados como SPAM, poxa pq eu não pensei nisso antes…. Mas valeu a necessidade que trouxe a experiência e agora compartilho com vocês! ;)

Utilizaremos a Classe PHPMailer – download (classe)

Algumas vantagens (existem dezenas):

* Você pode enviar email de sua aplicação local, isso mesmo, pode testar localmente, isso pq ele utilizará a autenticação no seu servidor smtp. Então se você não tem o servidor de email instalado na sua máquina poderá testar sem precisar subir os arquivos para o dominio!

* Envia Email em formato HTML ou TEXTO!

* Envia anexos de forma muito simples (imagens, zip, rar, etc…)

Que tal o velho e bom HTML ? 

<html>
<head>
<title>contato</title>
</head>
<body>
 <form name="contato" id="contato" action="contato.php" method="post">
 <input type="text" name="nome" id="nome">
 <input type="text" name="email" id="email">
 <textarea name="mensagem" id="mensagem"></textarea>
 <input type="submit" name="btn_enviar" id="btn_enviar" value="mandar bala">
</body>
</html>

OK? um formulário super-ultra-power-rangers de simples não? mas servirá bem!

Olha o PHP ai !!! Salve-o como contato.php

 
Isso é tudo! Basta adaptarem às suas necessidades (outros campos, ajax, get …)

<?
#inclui a classe PHPMAILER
include("phpmailer/class.phpmailer.php");
#instancia o objeto
$mail = new PHPMailer();
#enviar via SMTP
$mail->IsSMTP();
#seu servidor smtp / dominio no meu caso "mail" mas pode mudar verifique o seu!
$mail->Host = "smtp.SEUDOMINIO.com.br";
#habilita smtp autenticado
$mail->SMTPAuth = true;
#usuário deste servidor smtp. Aqui esta a solucao
$mail->Username = "seuEmail@SEUDOMINIO.com.br";
$mail->Password = "123456"; // senha
#email utilizado para o envio, pode ser o mesmo de username
$mail->From = "eMail@SEUDOMINIO.com.br";
$mail->FromName = "NOME DE EXIBICAO";

#Enderecos que devem receber a mensagem
$mail->AddAddress("seuEmail@SEUDOMINIO.com.br","Vendas");
$mail->AddAddress("outroEmail@SEUDOMINIO.com.br","Financeiro");
#wrap seta o tamanhdo do texto por linha
$mail->WordWrap = 50;
#anexando arquivos no email (supondo estar no mesmo diretorio)
$mail->AddAttachment("arquivo.zip");
$mail->AddAttachment("foto.jpg");
$mail->IsHTML(true); //enviar em HTML

#recebendo os dados do formulario
if(isset($_POST['nome'])){
 $nome    = $_POST['nome'];
 $email    = $_POST['email'];
 $mensagem   = $_POST['mensagem'];
 #informando a quem devemos responder. o mail inserido no formulario
 $mail->AddReplyTo("$email","$nome");
 #criando o codigo html para enviar no email, voce pode utilizar qualquer tag html
 $msg  = "Contato Site";
 $msg .= " Nome: $nome\n";
 $msg .= " E-mail: $email\n";
 $msg .= " Mensagem: $mensagem\n";
 }

$mail->Subject = "ASSUNTO DO EMAIL";
#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! erro: $mail->ErrorInfo";
#$mail->ErrorInfo informa onde ocorreu o erro, o uso opcional
exit;
}
echo "Mensagem enviada ok";
?>
 

Bem, acho que não tem tanto para explicar devido aos comentários no código, porém….

Como sempre (garoto bonzinho), estou à disposição para as eventuais dúvidas que surgirem.

Só uma dica, como eu não sei a senha dos emails dos clientes, claro, somente do cpanel, resolvi criar para todos uma conta de email (adicional) padrão para utilizar na autenticação do script.

Dúvido que você queira fazer o download de tudo já pronto, mas de toda forma está ai! ;)

download (exemplo)

Se sua versão do PHP for PHP 4, baixe o arquivo do link abaixo e substitua os do pacote padrão que disponibilizei por estes. Link    http://clareslab.com.br/learn/mail/php4.rar

seu email é yahoo? 

entre no email, clique em opções, Acesso POP e Redirecionamento, marque a opção Web e Acesso POP e clique em salvar. como abaixo:

 

ATENÇÃO!!!
ESSE CÓDIGO FOI ESCRITO PARA SER UTILIZADO NA VERSAO QUE DISPONIBILIZEI AQUI DO PHPMAILER
ATENTEM-SE À ISSO, TALVEZ NUMA VERSÃO DIFERENTE HAJA OUTROS PARÂMETROS À SER CONFIGURADOS OU OMITIDOS.

NO PHP.INI DESCOMENTE A LINHA  EXTENSION=PHP_OPENSSL.DLL 

CONFIRME COM SEU HOST O ENDEREÇO DO SERVIDOR SMTP

FAÇA TESTES LOCAIS E ON-LINE

 

IMPORTANTE:
ALGUMAS PESSOAS NÃO ESTÃO CONSEGUINDO ENVIAR O EMAIL DEVIDO À UM ERRO NO  ENDEREÇO SMTP, NESTE CASO UTILIZE LOCALHOST NO LUGAR DO SMTP.DOMINIO.COM.BR. EX:

$mail->Host = “localhost“ 

Obs:  No meu caso ocorria esse problema também.

 

Abraços,

Rafael Clares

Comentários
  1. Rafael Soares disse:

    Cara, adorei seu POST. Não tinha me tocado da importância de enviar um email autenticado, já que tenho problema com o recebimento dos emails por parte dos meus clientes, que muitos recebem como SPAM, devido à não-inteligência artificial dos servidores de email como Yahoo! Parabéns pelo POST cara! Um abraço!

  2. Luiz disse:

    Comigo está ocorrendo o seguinte erro: Language string failed to load: connect_host

    O que pode ser?

  3. clares disse:

    Olá Luiz, existe algum dado incorreto, podem ser:
    - email e senha
    - servidor smtp – mais provável, verifique a linha $mail->Host e certifique-se de que o servidor está correto, o seu pode ser smtp.dominio.com! De toda forma, algum dado que você informou está incorreto.
    Abraços

  4. rafael disse:

    Bom dia!!

    Você sabe como incluir no cabeçalho a informação Message-ID:

    desde já, agradeço.

  5. Rafael Clares disse:

    Olá xará, olha não há muito conteúdo na internet sobre Message-ID, mas posso lhe adiantar que você deverá setar a variável $hostname, se lhe ajudar segue ai o link com a informação.
    http://www.bblog.com/apidoc/elementindex_PHPMailer.html
    Se eu tiver alguma novidade publico aqui.
    Abraços,

  6. Rafael disse:

    Estou usando o smtp do yahoo!
    Erro:
    houve um erro ao enviar o email!
    Language string failed to load: from_failedrafaeldorazio

    rafaeldorazio é o meu email e lembrando que no yahoo nao se deve colocar @yahoo.com.br no usuario!

  7. Rafael Clares disse:

    Ola, verifique essas linhas abaixo e veja se o seu está igual.

    $mail->SMTPAuth = true; // ‘true’ para autenticação
    $mail->Mailer = “smtp”; //Usando protocolo SMTP
    $mail->Host = “smtp.mail.yahoo.com.br”; //seu servidor SMTP
    $mail->Username = “seuusuarionoyahoo sem aroba”;
    $mail->Password = “senhadoyahoo”; // senha de SMTP
    $mail->From = “seuusuarionoyahoo@yahoo.com.br”;

    Verifique também nas configurações do yahoo se seu e-mail está permitindo acesso pop3 e smtp.

    abraços,

  8. Rafael disse:

    Essa linha não tem aqui no codigo!
    $mail->Mailer = “smtp”; //Usando protocolo SMTP
    Funcionou, enviou o email corretamente! Porem para aqueles que usam o yahoo ai vai algumas dicas:
    1- Entre com seu usário e senha, depois la em cima do lado direito clique em Opções.
    Agora abriu uma nova tela, vai no link Acesso POP e Redirecionamento que se localiza no lado direito.
    Habilite Web e Acesso POP, para mais informações de como configurar a classe clique no link Configurações POP.

    Este processo é de extrema importancia!
    Rafael Clares, muito obrigado, dessa eu nao sabia que precisava liberar o serviço pop3 e smtp. Grato pela ajuda e pela função :)

  9. Gilson disse:

    Tive um problemão semelhante ao teu quando troquei de host, infelizmente fiquei sabendo dias depois da troca. Valeu pelo se Post isso vai resolver meu problema.

  10. Ricardo Spinoza disse:

    Muito bom o seu código, estou enfrentando o mesmo problema para enviar msg pelo yahoo, mas acredito que no meu caso seja o proxy barrando minhas mensagens. Parabéns pelo artigo.

  11. andrey disse:

    BOa noite! Fiz o download do arquivo, troquei o srvidor smtp, os emails tudo como pedia… coloquei para onde deve ser enviado, eno entanto dá qd clico em enviar aparece numa outra página todo o código do arquivo ‘contato.php’. você pode me ajudar a solucionar esse problema? preciso urgente desse código para um site que estou fzendo, o mais próximo que cheguei foi o seu! muito obrigado, andrey!!
    aguardo!

  12. Rafael Clares disse:

    Ow Andrey, beleza ai?
    Faça o seguinte, onde esta “<?” troque para “<?php”
    depois me fale.
    abraços,

  13. andrey disse:

    botei agora num site q eu tenho, online tb nao deu certo :/

  14. Rafael Clares disse:

    Andrey, me envie o arquivo em rafadinix@gmail.com e me passe o url desse seu site e te digo o que você está fazendo errado. Até logo

  15. Marcos Paulo disse:

    cara.. muito bom esse seu tuto… só que to meio desatualizado.. sou da época em que a função mail() do php era suficiente… agora to mô perdido com essa atualização SMTP… se vc pude me ajudar a entender um pouco, pq não consegui configurar esse código pra funcionar comigo.. vlws!

  16. Rafael Clares disse:

    Olá Marcos, na verdade a função mail() é suficiente, o problema é que a cada dia que se passa os hosts estão deixando de utilizar o envio de email sem autenticação devido ao grande número de spam, uma vez que se pode informar qualquer email para envio através da função mail.
    se tem alguma dúvida. por favor post aqui o código para analisarmos juntos ok. Ficará bem mais fácil. Abraços

  17. Diego Ramos disse:

    Olá Rafael, configurei aqui os arquivos e está retornando o seguinte erro :

    houve um erro ao enviar o email!
    “smtp”Language string failed to load: mailer_not_supported

    O que poderia ser?
    Grato pela atenção! d;D

  18. Rafael Clares disse:

    Olá Diego, pode colocar aqui o código da linha
    $mail->Host
    até a
    $mail->FromName ?
    Daí fica mais fácil, beleza…
    abraços,

  19. Joao Paulo Villela disse:

    Gostaria de saber o seguinte como e que eu faça para a html que eu fiz e com o stylo que eu coloquei, pois coloquei ele, o html esta indo mais o stylo nao esta indo.
    Obs.: o stylo esta dentro de meu html.

  20. Rafael Clares disse:

    Ola Joao Paulo, voce pode fazer o seguinte para imagens e estilos:
    - hospede no seu host o estilo e as imagens
    no HTML coloque a url completa ex.
    <link type=”text/css” href=”http://meusite.com/css/estilo.css”>
    e a mesma coisa para images
    <img src=”http://meusite.com/images/topo.jpg”>

    abracos

  21. Joao Paulo Villela disse:

    Amigo coloquei mas não esta dando certo, e sim enviando para o SPAM e quando eu tiro ele envia para a Caixa de Entrada mesmo…
    o que mais eu tenho que mudar.
    No restante esta tudo blz…

  22. Rafael Clares disse:

    manda o codigo php que gera o html para rafadinix@gmail.com (retire sua senha) vou testar e te falo. ate logo

  23. Colega, excelente dica! Agradeço muito pelo seu tempo dedicado a este artigo. Parabéns!

  24. Gustavo disse:

    Olá Rafael, eu to com o mesmo problema do pessoal ai. tah dando um erro:

    houve um erro ao enviar o email!

    Language string failed to load: connect_host

    gostaria de saber se soh é preciso mexer no arquivo contato.php?

    como vc pode ver meu servidor de email é da yahoo..e quero mandar as informações do formulario pra esse email. já habilitei o pop e smtp no yahoo e nada ainda.

    ajuda ai e me diz no q estou errando..abraçoss!!

  25. Rafael Clares disse:

    Galera, é o seguinte… o grande problema é que ninguém retorna depois que passo uma possível solução…. não há nada errado no código e nem está faltando alterar mais nada…

    Marquem a opção “web e acesso pop”.. façam exatamente assim:

    1) Entre no email
    2) Clique em opções
    3) Clique em “Acesso POP e Redirecionamento”
    4) Marque a opção “Web e Acesso POP”
    5) Clique em salvar…

    Pronto acabou o seu choro…

    Testem com o email que criei.

    usuario: mailtesteblog@yahoo.com.br
    senha : 123denovo

    obs: Por favor, se alguém obtiver sucesso nos dê um retorno aqui nos comentários… pq eu já estou quase passando por mentiroso. Só o meu email do yahoo é ultra-power-master-dev-active para funcionar? ;(

    Obrigado

  26. Frank Barbosa disse:

    Meu caro, não consigo usar smtp externo, tipo o gmail… tem alguma correção pra isso?

  27. Rafael Clares disse:

    Frank, baixe o PHPMailer, no pacote existe o diretório “Examples”… Lá existe o exemplo para o Gmail.
    link :
    http://phpmailer.codeworxtech.com/index.php?pg=sf&p=dl

  28. Frank Barbosa disse:

    Opa, amigo…
    Obrigado pela atenção…
    O erro agora, é assim:
    SMTP Error: Could not connect to SMTP host.

    já liberei a porta de saída 465 no Firewall do servidor.
    como eu uso o pacote da linguagem de erro, no português?

  29. Rafael Clares disse:

    Frank, abra seu arquivo php.ini e descomente a linha extension=php_openssl.dll (retirando o “;”)

    Abraços

  30. Gustavo disse:

    Olá Rafael,seu tuto está dando certo comigo..tah perfeito, meu problema agora eh outro. O meu servidor de testes gratuitos é o awardspace, ele naum disponibiliza o envio de email SMTP usando PHP..o q faço agora?? tem alguma solução q naum precise trocar de servidor?? pois naum kero sair do awardspace por enquanto.

  31. Rafael Clares disse:

    Gustavo, não entendi muito bem.
    Se eles não aceitam o email autenticado, pq
    você quer enviar utilizando esse método.
    Talves seja o caso de você enviar sem autenticação. Veja em http://br.php.net/mail.
    abraços

  32. Aline disse:

    Olá!
    Testei o script e funcionou corretamente c o SMTP do Yahoo (tenho conta).
    Porém, não estou conseguindo enviar anexo quando ele vem por um formulário.

    Você poderia me ajudar mostrando como receber o anexo por uma variável e onde informar o anexo?

    Tentei o seguinte:
    - No inicio do arquivo contato.php:
    include(“phpmailer/class.phpmailer.php”);
    //pega nome do arquivo
    $anexo_name = $_FILES["Anexo"]['name'];

    - Mais abaixo, na configuração do destinatário:
    //Enderecos que devem ser enviadas as mensagens
    $mail->AddAddress(“MEUEMAIL”,”Aline”);
    //wrap seta o tamanhdo do texto por linha
    $mail->WordWrap = 50;
    //anexando arquivos no email
    $mail->AddAttachment(“$anexo_name”); //aqui o nome da variável que recebe o nome do arquivo
    $mail->IsHTML(true); //enviar em HTML

    Lembrando que no lugar do email de destino coloquei o endereço correto. Aqui troquei por MEUEMAIL só pra exemplificar.

    Só consigo mandar o anexo se ele estiver na mesma pasta do script, e colocar o nome dele ali na mao, tipo “arquivo.jpg”.

    Será que preciso receber os outros parâmetros pelo método “FILE”?
    Mas como organizaria?

    Desde já agradeço!!!!!!!

    Aline

  33. Aline disse:

    Opa! Consegui resolver! rss

    É só receber o arquivo usando “FILE[]“, mover para uma pasta, e depois informar o nome da imagem com o caminho correto em “$mail->AddAttachment(”pasta/nome_arquivo”)”

    Deu certo! ;D

  34. Pedro disse:

    Olha meu erro e o seguinte estava dando erro com a porta no smtp do gmail dai eu troquei para a porte 587 parou de dar erro na porta e aparece o seguinte erro:

    houve um erro ao enviar o email! erro: Language string failed to load: from_failed email@acharei.com.br

    $mail = new PHPMailer();
    $mail->IsSMTP();
    $mail->Host = “smtp.gmail.com”;
    $mail->SMTPAuth = true;
    $mail->Mailer = “smtp”;
    $mail->Username = “********”;
    $mail->Password = “*******”;
    $mail->From = “contato@acharei.com”;
    $mail->FromName = “Acharei”;

    O que Pode estar dando errado ?

  35. Rafael Clares disse:

    Caro Pedro, este problema já foi resolvido e a solução está nos comentários. grato

  36. Phillipe disse:

    Caro Rafael, tenho tentado usar a classe phpmailer para gmail, yahoo entre outros, mas com quaisquer configurações me retorna o erro SMTP Error: Could not connect to SMTP host, bom troquei o server a pouco tempo tinha um linux e agora uso um windows dedicado.Não sei se interfere em alguma coisa para smtp, crio que não. obrigado tudo de bom

  37. Rafael Clares disse:

    Olá Phillipe, essa dificuldade já foi tratada nesse mesmo post, vc leu os demais comentários?
    abra seu arquivo php.ini e descomente a linha
    extension=php_openssl.dll

    abraços

  38. Jonatan disse:

    Parabéns pelo Post salvou minha pele hehe…

  39. Eugênio disse:

    Ola Rafael! Achei mt bom seu post e tentei utiliza-lo. Está havendo uma falha… Poderia dar uma olhadinha em http://www.centermusictaquara.com.br/manutencao2.php e envie o formulario…. Ta dando o seguinte erro:
    Warning: fsockopen() [function.fsockopen]: unable to connect to mail.centermusictaquara.com.br:25 (Connection refused) in /home/centermu/public_html/class.smtp.php on line 105

    houve um erro ao enviar o email! erro: Language string failed to load: connect_host

    Como resolvo isso? Vlw, abraço e sucesso!

  40. Eugênio disse:

    Opa Rafael! Primeiro parabens pelo post, ficou bom. Apesar disso estou tendo dificuldades. A mesagem q dá ao executar o script eh essa:

    Warning: fsockopen() [function.fsockopen]: unable to connect to mail.centermusictaquara.com.br:25 (Connection refused) in /home/centermu/public_html/phpmailer/class.smtp.php on line 105
    houve um erro ao enviar o email! erro: Language string failed to load: connect_host

    Onde é esse erro? Brigadão!

  41. Rafael Clares disse:

    Eugênio, obrigado pelo comentário.
    Qual versão do PHPMailer está usando? Baixe a última versão. Outro ponto seria você verificar se o servidor está sob firewall ou proxy.
    Esse erro também ocorre muito quando utilizado o PHP4, qual você está usando?

  42. Phillipe disse:

    Boa tarde.
    Rafael, fiz sim a alteração no php.ini/extension=php_openssl.dll, e esse problema infelizmente não foi solucionado. :(
    Estou tentando de tudo, mas acho que tem alguma para configurar no server, pois faço o administração de remotamente.
    Mesmo assim obrigado, caso tenha alguma dica :D pls estou realmente precisando.

  43. Rafael Clares disse:

    Philipe, confirme se as portas que esta utilizando no PHPMailer sao as mesmas do seu servidor smtp. Outra coisa, verifique se não está sob um proxy. Abraços

  44. Rafael Clares disse:

    O ruim é que a galera obtem sucesso na implementaçao do código não comenta, apenas colocam as dúvidas e somem omitindo a ajuda ao colegas. Essa é a parte chata de se postar.
    Eu utilizo esse código em mais de 15 sites e todos funcionam, espero que o pessoal se conscientize quanto ao dar um retorno nos comentários para nos ajudar.

  45. Cleiton disse:

    Se eu enviar e-mails dessa forma não existe aquela limitação de 300 por hora como os servidores tem?

  46. Rafael Clares disse:

    Olá Cleiton, não sei se tem limitação, de toda forma, a intenção aqui não é criar um servidor de SPAM. Obrigado pelo comentário.

  47. Olá Rafael!

    Só passando para agradecer o artigo. Excelente e vai me ajudar demais.

    Grande abraço, Deus abençoe sua vida.

  48. Renan disse:

    Perfeito!

    Parabéns cara.

    (para os que não conseguiram, acho que basta prestar mais atenção na hora do setup, porque o code está perfeito).

  49. Rafael Clares disse:

    Renan, obrigado pelo comentário eu também utilizo esse código em mais de 10 contas distintas e funciona bem rs.

  50. Diego disse:

    Eae Rafa!!!

    Parabén pelo artigo!!!

    Abraços do amigo!!

  51. Romulo disse:

    Simples, objetivo e muito bem explicado!

    Perfeito, parabéns Rafael :D

  52. Perfeito!
    Muito bom mesmo! meus parabéns, esta foi a melhor solução que encontrei para meus problemas de envio de mail… obrigado!

    Mas ainda estou em um empasse, não entendi muito bem como funciona para mandar anexo… seria possivel explicar mais detalhadamente como isso funciona??

    Abraço

    • Rafael Clares disse:

      Ola Juno, você pode enviar arquivos em anexo mas no exemplo o arquivo já está definido, ou seja, no fonte do programa esta apenas mostrando o comando para envio de anexos e passando o nome do arquivo que será enviado, no caso de criar um formulário que permita o usuário enviar anexos você terá que criar o upload no formulário e já muda um pouco de figura pq você terá que tratar os arquivos enviados, ou seja, fazer verificações em relação a extensão e tamanho desses arquivos pq um usuário mal intencionado poderia enviar virus ou arquivos grandes que comprometesse seu servidor, de fato, esse é um outro assunto. A nao ser que você esteja enviando um arquivo pre-definido como logotipo no cabeçalho do email, arquivos de texto como manuais, enfim, algo que você sempre envia ou recebe através do seu formulário de email. Em outra oportunidade mostrarei como criar um formulário de email permitindo(e tratando) envio de anexos. Obrigado pelo comentário, abraços.

  53. Luiz Manuel Gomes disse:

    Prezado Rafael,

    Estou passando por problemas semelhantes aos que voce já passou, porém não estou conseguindo resolver com o pessoal da locasite, será que voce poderia me ajudar.

    se possivel, me mande um email que te passo meu telefone.

    Muitisso Obrigado

    Luiz Manuel O Gomes

  54. Luiz V. disse:

    Medei de host e este nescessita enviar e-mails autenticados. Dai meu site não envia e-mai nenhum, na area admin tem as opções de envio por mail () função e por sendmail. Testei seu iscript e enviou corretamente porem como vou mesclar o seu iscript no meu site tendo vista que ele é muito avançado e deve ter muitos formulários separados, vou ter que encontrar e editar um por um? Isso é quaze impossível. Não tem como autenticar o envio no site todo criando um arquivo ou um sistema que chame este código? S tem a opção de usar mail()função do PHP e sendmail deve ter uma forma de resolver isso. Se alguém souber resolver entre em contato comigo no email anotapreta@yahoo.com.br por favor. Meu site é um site pronto e não tenho nem idéia de como fazer funcionar o envio autenticado.

    • Rafael Clares disse:

      É Luiz, você terá mesmo trabalho…como eu também tive e tentei dar-lhes uma direção nesse Post, você terá que trocar a função mai() por phpMailer em todos os formulários…A quantidade de trabalho irá depender do destino dos email, ou seja, se os emails são enviados do site para você (ex. contato) dai pode ser mais facil pq você não precisará formatar o conteúdo enviado podendo substituir as variáveis que recebem o POST por um foreach($_POST) assim você recupera todos os campos enviados do formulário e os envia. Mas se os emails são destinados aos usuários, então amigo, boa sorte na sua jornada. Caso tenha alguma dúvida coloque nos comentários e na medida do possível responderei. Abraços

  55. Ricardo Augusto Nunes disse:

    Cara perfeito o script, parabens!

  56. Thiago disse:

    Agradeço muito pela dica, salvou não só meu dia mais o meu ano, pq sempre usava um q tinha aqui sem autenticação e sempre funcionava, mais corrigiram um erro do meu servidor ai parou de enviar.
    Bom agora eh só eu mudar de todos os clientes q ta resolvido

    Valeu mesmo!!!
    Abraços

  57. Juca disse:

    Muito bom meu caro!
    Valeu!!

  58. Dreyson disse:

    não esta chegando acentuações no meu e-mail cara.
    você pode me ajuda.

    código PHP

    contato

    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 = “xxxx”; // 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;
    }
    ?>

    • Rafael Clares disse:

      Dreyson, o ideal seria você me dizer como está chegando!
      Está chegando todas as letras porém sem acentos?
      Está faltando letras ? Caracters estranhos ?

      Tente algum desses:
      $mensagem = htmlentities($mensagem);
      ou
      $mensagem = utf8_decode($mensagem);

      Daí você me diz o que ocorre.
      Abraços

  59. Dreyson disse:

    Rafael o erro é esse. Toda vez que eu coloco as acentuações chega em meu e-mail assim.

    texto da página de contato
    éãêç

    quando chega ao e-mail
    éãêç

    andei dando uma pesquisada em muitos sites e em alguns diz o seguinte. Que eu tenho que ver o código do PHP – header(“Content-Type: text/html; charset=ISO-8859-1″, true);

    e olhar o código do HTML, que são as <meta
    no meu código esta assim.

    para ver se estão iguais, mas estão sim.

    Forte abraço cara!!!!

  60. Dreyson disse:

    Desculpe tá postando várias perguntas, mas estão acontecendo. Quando envio o e-mail na página de contato demora que só, de vez enquando ele envia tem outras vezes que não envia. o erro é o seguinte Language string failed to load: data_not_accepted mostra esse erro você sabe como posso tá resolvendo?

    obrigado pela atenção.

    $PHPMAILER_LANG["data_not_accepted"] = ‘Erro de SMTP: Dados não aceitos.’;

    • Rafael Clares disse:

      Dreyson, já baixou a última versão do PHPMailer?
      Nunca vi esse erro, dê uma olhada nos docs do phpmailer, me mande os arquivos (compactados).
      rafadinix@gmail.com (o email é para mandar os arquivos ou trocar idéias, para dúvidas post no blog, assim ajudamos outras pessoas com mesmo problema)

      abraços,

  61. Bruno Barros disse:

    Rafael, eu utilizo este mesmo script, só que agora na Locaweb os cara colocaram uma regra que eu tenho que autenticar, guardar isso na session e enviar depois de 17 segundos. Como guardo esta informação da autenticação da session?
    Obrigado!

    • Rafael Clares disse:

      Bruno, na verdade você não precisa guardar a informação na session e sim autenticar mantendo uma sessão.
      Basta iniciar o script com …
      session_start();
      autenticacao
      envia email
      so enviar email novamente se a sessao tiver mais de 17 segundos.

      Crie um novo arquivo php e teste o seguinte bloco de comandos.

      O metodo sleep(seconds) aguarda a quantidade de segundos passados no paramentro antes se executar a proxima linha de comando.

      Se precisar armazenar o inicio do script em uma session faça – $_SESSION['inicio'] = date(‘s’);
      abs

      • Bruno Barros disse:

        Poxa Rafael tentei o que você falou.
        Iniciei a session, coloquei sleep(20) depois da parte de autenticação e logo antes dométodo que envia (->send()), mas nada. Isso em script de teste enviando apenas um email!

      • Rafael Clares disse:

        Pow cara, acho que tem coisa errada no seu script, você está utilizando com autenticação como no exemplo do PHPMailler?
        Qualquer coisa, cria uma conta de email de teste, me mande os dados da conta e o script compactado para rafadinix@gmail.com para eu ver se consigo te ajudar…flw

      • Rafael Clares disse:

        Brunao, já viu se a extensão extension=php_openssl.dll esta descomentada no php.ini ?
        Verifique a linha
        extension=php_openssl.dll se estiver ;extension=php_openssl.dll descomete-a tirando o ; (ponto e virgula) da frente da linha.

        até logo,

  62. R4 disse:

    Rafael,
    O envio de mensagem está funcionando perfeitamente, inclusive do meu localhost. Porém se anexo arquivos $mail->AddAttachment() dá a seguinte mensagem, no arquivo class.phpmailer.php:

    Deprecated: Function set_magic_quotes_runtime() is deprecated in E:\EasyPHP5.3.0\www\mail\phpmailer\class.phpmailer.php on line 1091
    Deprecated: Function set_magic_quotes_runtime() is deprecated in E:\EasyPHP5.3.0\www\mail\phpmailer\class.phpmailer.php on line 1095

    Você teve algum problema semelhante?

  63. Milton Salles disse:

    Rafael, muito bom; eu agradeço pela ajuda, tanto por email, quando por seus arquivos e ensinamentos;
    funcionou certinho;

    só precisei alterar o meu smtp de mail.miltonsalles.com para localhost (MESMO PUBLICADO) que funcionou….

    Muito obrigado…

  64. Eduardo disse:

    Fiz as configurações q estão descritas, tentei com smtp do yahoo,do localhost, ophp.ini tá certinho, com o php_openssl.dll liberado… mas olha o erro:

    Warning: Failed opening ‘class.smtp.php’ for inclusion (include_path=”) in c:\apache\htdocs\teste_email\phpmailer\class.phpmailer.php on line 460

    Fatal error: Cannot instantiate non-existent class: smtp in c:\apache\htdocs\teste_email\phpmailer\class.phpmailer.php on line 527

    Alguém pode me ajudar? Desde já agradeço e parabéns Rafael pela disposição!!

  65. Eduardo disse:

    Olá!
    Fiz conforme as orientações, mas dá o seguinte erro:

    Warning: Failed opening ‘class.smtp.php’ for inclusion (include_path=”) in c:\apache\htdocs\teste_email\phpmailer\class.phpmailer.php on line 460

    Fatal error: Cannot instantiate non-existent class: smtp in c:\apache\htdocs\teste_email\phpmailer\class.phpmailer.php on line 527

    Alguém pode me ajudar?
    Abraços!

  66. Luan Marcos Isidoro disse:

    Cara adorei esse script muito bom. Vlw msm ! Faz uma semana que eu to procurando isso vlw !

  67. Jaderson Trierweiler disse:

    Valeu pelo post
    Serviu como consulta para mim

  68. Fábio disse:

    Boa Solução parabens, funcionou mesmo bem ;)

    Cumps

  69. Emanuel disse:

    Amigo estou usando o phpmailer em um sistema de newsletter que criei os email chegao ao destino só que no gmail não chega os dados do post so vai o html que criei

  70. Otávio disse:

    Valew Brother Post Perfeito

  71. Diogo disse:

    Rafael, coloquei meu email e a senha dele no script, mas está chegando no lixo eletrônico..tem ideia pq?

    Abs

  72. Diogo disse:

    Funcionou aqui Rafael.
    Valeu a atenção!

  73. Tem outro tutorial muito bom sobre isso, e numa versão mais recente do phpmaileir:
    Usando o Smtp do Google com o PHPMailer

  74. Julio disse:

    Muito obrigado pelo código! Funcionou perfeitamente!

  75. Allex disse:

    Valeu Rafael.

    Funcionou perfeito.

    Abraços!!!

  76. Milene Fermo Manfredini disse:

    Rafael, boa noite,
    Desculpa novamente perguntar algo que parece ter sido resolvido, porém preciso muito da sua ajuda.

    Houve um erro ao enviar o email!
    Language string failed to load: from_failedmilenefm@hotmail.com

    $mail->Host = “smtp.mail.hotmail.com”;
    // habilita smtp autenticado
    $mail->SMTPAuth = true;
    // usuário deste servidor smtp
    $mail->Mailer = “smtp”;
    //Usando protocolo SMTP
    $mail->Username = “milenefm”; // Aqui seria sem o @? Utilizo o Hotmail.
    // e-mail sem o arroba
    $mail->Password = “*********************”;
    // senha

    //email utilizado para o envio
    //pode ser o mesmo de username
    $mail->From = “milenefm@hotmail.com”;

    Muito Obrigada,
    Abraços,
    Milene

    • Rafael Clares disse:

      Milene, você já configurou a conta do hotmail para aceitar a utilização SMTP ?
      Veja nas configurações do hotmail, no geral é preciso dar permissão para essa utilização, além disso você precisa saber a porta que é utilizada, a porta do hotmail não é a padrão.
      Após a linha:
      $mail->Host = “smtp.mail.hotmail.com”;
      Adicione:
      $mail->Port = numeroDaPortaSMTPdoHotmail;

      até logo

  77. nil disse:

    por favor me ajude altentica esta para mim so recebo email se o email que a pessoa colocar no site for da uol de outros nao chega valeussss

  78. nil disse:

    rafael nao deu certo nao meu form com esse php ai tu nao consegue altenticar o meu php ?
    vo te passa o codigo blx

  79. Walter Alves disse:

    Cara, queria te parabenizar pelo post, a web é realmente uma grande fonte
    de informações, mas a maioria delas são ineficaz.
    Andei procurando como enviar e-mail com php e autenticado, já tentei varios recursos
    que busquei na web, porem nenhum funcionou!
    Sempre que testava o script ficava olhando minha caixa de entrada na expectativa de
    ver a mensagem nela, mais nada acontecia. Por fim, quase desistindo, achei seu bendito tutorial
    no google, teste, e funcionou direitinho!!!
    Valeu, parabéns mesmo!
    abraços…

    Juninho

  80. Anderson disse:

    Parabéns pelo post, para mim funcionou perfeitamente… estou agora penando para fazer upload com jquery e php…. em um formulário que eu possa colocar até 20 fotos… se tiver algo para me dar uma luz,,,, seria muito legal

  81. Vitor Hugo disse:

    Ótimo post! da pra fazer exatamente tudo!
    Muito obrigado!

  82. Lucio disse:

    Obrigado cara, testei aqui e funcionou direitinho ^^

  83. Osmar disse:

    Desculpe a pergunta de principiante, entendo muito pouco. O formulário do meu site estava com esse problema de não enviar, então refiz ele pelo seu método e deu certinho!!

    Mas gostaria de incluir uma página “sucesso.html” caso o formulário foi enviado, ou “erro.html” caso der algum erro, em vez de utilizar a forma que vc colocou no php abaixo:

    #enviando e retornando o status de envio
    47 if(!$mail->Send())
    48 {
    49 echo “houve um erro ao enviar o email! erro: $mail->ErrorInfo”;
    50 #$mail->ErrorInfo informa onde ocorreu o erro, o uso opcional
    51 exit;
    52 }
    53 echo “Mensagem enviada ok”;
    54 ?>

    Como faço isso?
    Muito grato desde já

  84. Gustavo Totta disse:

    apresentou um erro (você sabe como posso solucionar o mesmo?) grato!:

    houve um erro ao enviar o email! erro: The following From address failed: contato@imobiliarianc.com

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Sair / Alterar )

Imagem do Twitter

You are commenting using your Twitter account. Sair / Alterar )

Foto do Facebook

You are commenting using your Facebook account. Sair / Alterar )

Connecting to %s