Formulário PHP para envio de e-mail com autenticação, validação, html, css, javascript

Como prometido para aqueles que procuram um formulário com autenticação e validação que funcione, trago a vocês um formulário com autenticação SMTP utilizando o PHPMailer, e com a validação utilizando os Spryassets.
Ele estando configurado corretamente é possível enviar e-mails para e-mails externos (ex.: @gmail @hotmail etc.), não ficando preso ao seu domínio.
No arquivo envia.php devem configurar os seguintes campos

$Email->Host = ‘mail.seudominio.com.br’; // Servidor de envio – as vezes utilazam o smtp.seudominio, vale a pena verificar com a sua hospedagem qual é o servidor de envio.
$Email->Username = ‘email@seudominio.com.br’; //e-mail que será autenticado – #dica constumo criar um e-mail apenas para essas autenticações.
$Email->Password = ‘senhadoemail’; // senha do email
$Email->AddAddress(“email@dominio.com.br”);// para onde deve ser enviada a mensagem

Abaixo segue o link para download

Clique aqui para fazer o download Formulário em PHP

Dúvidas ou sugestões comentem ou se preferirem podem me enviar um e-mail direto para blog@richarddesign.com.br
Espero que seja útil a todos.
Abs.

Comentar

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

*

84 Comentários

  1. Boa Tarde!
    Gostaria de colocar um código no meu formulário de contato que impede do visitante enviar mensagens com as caixas de textos em branco.

    Responder
  2. Poxa, cara, valeu mesmo. Funcionou legal aqui!
    Abs!

    Responder
  3. Olá, estou com um problema… o formulário chega no meu email em branco… só com o preenchimento de nome: email: ; como eu sei se os dados estão sendo passados…
    me ajuda ae…
    obrigado

    Responder
    • Olá, verifique nos campos do formulário se o “name” está igual ao que está sendo chamado no envia.php.
      Acredito que seja isso.
      Abs

      Responder
    • coloquei seu formulario e funcionou, mas os campos vem em branco, somente o campo e-mail que vem preenchido. O que pode ser?

      Responder
      • Verifique se os “names” dos campos e no envia.php estão iguais.

        Responder
  4. Uma dúvida: Eu só consigo receber através do formulário, quando e-mail preenchido no formulário é do mesmo servidor. Exemplo: coloquei no código php o e-mail: diretoria@emaillocal.com.br….Só chega quando no formulario onde tem nome, telefone e etc…quando no campo e-mail eu coloco informatica@emaillocal.com.br. Entende?

    Ou seja só quando no formulário preencho com o mesmo “provedor” que funciona. Se eu colocar por exemplo: thiago@gmail.com…nao funciona.

    Alguma ideia? Obrigado desde já!

    Responder
    • Acredito que não, tente colocar no envia.php, onde tem a variavel “from” insira o e-mail que foi utilizado na autenticação acredito que isso resolva o problema.

      Abs.

      Responder
  5. Estou com problema na autenticação, quando tento enviar aparece o seguinte erro: Erro de SMTP: Não foi possí­vel autenticar
    coloquei os dados todos certinhos creio eu, o que pode ser o motivo do erro?

    Responder
    • Acredito que algum dado da autenticação esteja errado, confira novamente ou entre em contato com o serviço de hospedagem para verificar se os dados estão corretos.

      Responder
  6. Parabens muito obrigado.. gostaria de saber se consegue me ajudar uma caixa suspensa com requerendo escolher opção se possivel o botão de opção tentei colocar mais não chega resposta. Muito grato

    Responder
    • Olá Tiago, não entendi o que está precisando, poderia explicar de outra forma?
      Abs.

      Responder
      • Richard gostaria de saber se consegue me ajudar na validação de um select.

        Preciso que a pessoa seja obrigada a preencher o Dropdonw.

        Fiz um teste do select, esta chegando normal, porem caso não preencha o campo TESTE o email é enviado, nao obrigando a mudar e escolher uma opção.

        Segue meu ex.
        http://fabianaguimaraes.com.br/contato2/

        Responder
  7. Velho, parabéns, eu tinha criado um formulário com envio pela função MAIL baseado em um livro que eu estava lendo e ele não estava rodando, mas já com o seu código que eu pude revisar e estava altamente bem explicado eu consegui. Obrigado fera!

    Responder
  8. Estou com uma duvida, quando preencho o formulário e clico em enviar, ele não enviar para o meu e-mail. nem atualiza a pagina, ele vai para o código em php.

    Responder
    • Verifique se seu server tem suporte a PHP.

      Responder
      • baixei seu projeto mas nao funcionada no meu notebook, aparece o mesmo erro do Felipe Feitosa da Silva, ou seja, ele não enviar para o meu e-mail. nem atualiza a pagina, ele vai para o código em php.
        Como faço pra saber se meu notebook está com o ambiente preparado para PHP?

        Responder
        • Olá Marcelo,

          Não entendo muito de como a configuração do PHP local deve ser feita para que o formulário funcione localmente.
          Fico te devendo essa.
          Abs.

          Responder
      • Fatal error: Maximum execution time of 60 seconds exceeded in C:\wwwphp\PHPEmail\PHPMailer\class.smtp.php on line 797

        como resolve? me ajude por favro

        Responder
  9. A mensagem esta chegando uma única vez no email do destinatário, quando eu tento mandar novamente não chega, vc saber o por que? Grato pela ajuda e continue assim pois na rede precisamos de pessoas deste tipo, como você. Valeu.

    Responder
    • Não vi esse problema ainda, será que está caindo no spam?

      Responder
  10. Recebo esse retorno quando envio o e-mail:

    Erro de SMTP: Não foi possí­vel conectar com o servidor SMTP.
    A mensagem nao foi enviada.

    Erro: Erro de SMTP: Não foi possível conectar com o servidor SMTP.

    O código de envio:

    $Email->Host = ‘smtp.catolicismoefe.com.br’; // Servidor de envio # verificar qual o host correto com a hospedagem as vezes fica como smtp.
    $Email->Port = ‘587’; // Porta de envio
    $Email->Username = ‘miltoncostaribeiro@gmail.com’; //e-mail que será autenticado
    $Email->Password = ‘****’; // senha do email
    // ativa o envio de e-mails em HTML, se false, desativa.
    $Email->IsHTML(true);
    // email do remetente da mensagem
    $Email->From = ‘catolicismoefe@catolicismoefe.com.br’;
    // nome do remetente do email
    $Email->FromName = utf8_decode($email);
    // Endereço de destino do emaail, ou seja, pra onde você quer que a mensagem do formulário vá?
    $Email->AddReplyTo($email, $nome);
    $Email->AddAddress(“catolicismoefe@catolicismoefe.com.br”); // para quem será enviada a mensagem
    // informando no email, o assunto da mensagem
    $Email->Subject = “(Contato do site – catolicismoefe.com.br)”;
    // Define o texto da mensagem (aceita HTML)
    $Email->Body .= ”
    Nome: $nome
    E-mail: $email
    Telefone: $ddd – $telefone
    Assunto: $assunto
    Mensagem: $mensagem”;
    // verifica se está tudo ok com oa parametros acima, se nao, avisa do erro. Se sim, envia.
    if(!$Email->Send()){
    echo “A mensagem nao foi enviada. “;
    echo “Erro: ” . $Email->ErrorInfo;
    }else{
    echo “location.href=’sucesso.html'”;

    Responder
    • Olá Milton, qual serviço de hospedagem está utilizando?
      Verifique com ele qual é o servidor de envio “smtp….” o uol está com problemas se for o caso, ai deve utilizar o smtp.uhserver.com se não me falha a memória é esse.

      Responder
  11. Cara, estou fazendo o meu primeiro site e estou utilizando o xampp, mas o seu código não está funcionando. Tem algum meio de enviar email pelo servidor local no caso o xampp ou só quando o site estiver online? valeu!

    Responder
    • Cara sei que existe uma maneira fazendo algumas configurações, mas não sei quais são, fico te devendo essa…

      Responder
    • basta selecionar no apache de seu wamp ou xamp

      deixe marcado ssl_module para testar envio de e-mail localmente.

      Responder
    • no apache do xamp ou no wamp deixe selecionado, ssl_module
      assim poderá testar envio de e-mail localmente

      Responder
  12. Olá, está tudo funcionando legal, mas agora preciso que o usuário escolha o sexo, tipo FEMININO E MASCULINO. Como faço?

    Abs

    Responder
  13. Olá, sabe como faço para integrar ao Magento?

    Responder
    • Não sei dizer depende de como exatamente quer integrar.

      Responder
  14. Olá, muito bom seu formulário, mas estou com uma duvida, quando a pessoa envia um email o destinatário e remetente ira receber o email certo?
    tipo email da minha empresa recebe e o email da pessoa que mandou recebe email de confirmação ou esse sistema não esta com essa opção?

    Responder
    • Então apenas o destinatário recebe, o remetente é direcionado para a página “sucesso”, mas da pra fazer com que o remetente receba um e-mail também.

      Responder
  15. Richard, valew por compartilhar conosco! Funcionou perfeitamente! Um ano depois e o tópico salvando gente!

    Abraço!

    Responder
  16. Olá Richard.
    Encontrei esse post, nos comentários de outro post. Procurei ler para ver se encontrava o meu erro com alguém e você não perder tempo respondendo 2x a mesma coisa.
    Poxa, fiz todo o procedimento, já que vou utilizar para enviar ao Gmail. Estou hospedando a página no “Qlix”. Preencho todo o formulário. Aparece a mensagem enviada, mas não recebo mensagem nenhuma. Tem alguma ideia do que pode ser? x.x Conheço um pouco a linguagem HTML, mas nessa questão de enviar formulário, sou totalmente leiga.

    Responder
    • Não sei o que pode ser, geralmente quando utilizo não tenho esse problema, não está no spam?

      Responder
  17. gostaria de parabeniza-lo pelo seu blog, seu formulario ajudou e muito mas uma vez obrigado!

    Responder
  18. olá gostaria de saber como colocar um anexo no formulario

    Responder
    • No formulário insira:

      No envia.php:
      $curriculo = $_FILES[‘arquivo’];
      $Email->AddAttachment($curriculo[‘tmp_name’], utf8_decode($curriculo[‘name’]));

      Responder
      • Finalmente um exemplo que funciona! Testei dezenas deles, principalmente da locaweb e são lixo!
        Simples e eficaz. Um abraço, Richard.

        Responder
  19. Opa.

    Estou com um erro na hora do envio: Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or ‘}’ in /home/sites/keepcool.com.br/web/novo/PHPMailer/class.phpmailer.php on line 53

    Sabes me dizer oque pode ser?

    Responder
    • Johnny não tive esse erro ainda, não sei o que pode ser, se alguém souber poste ai vlw!

      Responder
    • Este erro ocorre quando um servidor web está executando uma versão mais antiga do PHP (provavelmente php4) ea versão do phpmailer esta versão acima, neste caso e versão do Php deverá ser atualizada, que neste caso. Apenas a sua empresa de hospedagem pode atualizar o PHP para a nova versão.

      Responder
  20. Esse foi o único formulário que funcionou desde que troquei de servidor. Isso me salvou! Muito obrigado!

    Responder
  21. olá amigo como faço para colocar anexo nesse seu fotmulario

    Responder
  22. Richard por favor se você puder mim ajudar eu fico muito agradecido Eu baixei esse formulário que você fez achei muito bom, Mais se você pudesse fazer ele para mim para que ele fique adaptável a tela de celular eu ficaria muito feliz se você fizesse para mim . Tentei muito adapta-lo a tela de celular mais não consegui.

    Responder
    • Logo mais vou atualizar os formulários, e deixá-los responsivos.

      Abs

      Responder
  23. valeu, me salvou

    Responder
  24. Parabéns pelo post, aqui funciona porem recebo 2 emails, 1 certinho e outro com dados em branco, poderia me dar uma dica?

    Responder
    • Verifique os redirecionamentos e duplicidades de funções, talvez seja algo assim.

      Responder
  25. Meus Sinceros parabens, salvou minha vida mano, deu certinho e do jeito que eu precisava, com emai, telefone, e tudo que tem direito, tentei uns 50 php desse tipo e todos so falha e falhas vlw mesmo muito obrigado por disponibilizar esse excelente trabalho forte abraço e fica com Deus! so faltou uma área de doações, vc merece!

    Responder
    • Legal! muito obrigado!

      Responder
  26. Oi, Richard! Tudo bem? Estou com um problemão e gostaria muito que vc pudesse me ajudar. Eu baixei um template chamado Retrospect do site Templated, porém, não consigo fazer o formulário de envio funcionar por nada no mundo. Li todo o seu post, fiz as alterações que você indicou e mesmo assim não funcionou. Por favor, sei queé pedir demais, mas se puder,dê uma olhada no template que mencionei e veja se consegue me dar alguma dica. Talvez você possa me ajudar via Skype. Posso te pagar a hora de trabalho. Aguardo resposta. Obrigada!!!

    Responder
      • Oi, Richard! Desculpe a demora em responder. Eu estava cometendo um erro mas acabei encontrando a solução. Seu formulário me ajudou demais. Muito obrigada! Você é show!!!!!

        Responder
  27. Ola, muito bacana o arquivo enviar.php. Funciona muito bem
    Só uma questão não consegui resolver. A auto resposta para o remetente.
    Voc~e teria a solução para essa questão? Obrigado!

    Responder
    • Olá, basta no final do envia.php você duplicar o script do enviar $Email = new PHPMailer();… ao invés de utilizar o e-mail destinatário você utiliza o e-mail do usuário $Email->AddAddress($email); e mude o nome das variaveis “$Email” por ex.:”$Email2″, deixe o “echo “location.href=’sucesso.html'”;” apenas na segunda parte do código para que o redirecionamento seja feito apenas após ler todo o script.

      Responder
  28. Obrigado. Seu post ajudou a resolver o problema de formulário com a merda da hospedagem da locaweb.

    Responder
  29. Parabéns, funcionou!
    Vc poderia me dizer como incluo o envio com cópia para vários emails?

    Obrigado!

    Responder
    • basta duplicar a linha $Email->AddAddress(“email@dominio.com.br”); e inserir o e-mail que deseja.

      Responder
      • Richard, esse script é perfeito, parabéns!
        Eu utilizo desde o lançamento.. xD
        Há uma maneira prática de utilizá-lo para o envio e e-mails em massa?!

        Abçs! o/

        Responder
        • Você pode repetir o $Email->AddAddress quantas vezes quiser

          Responder
      • Bom dia Richard.
        Estou fazendo uma newsletter e gostaria de receber as notificações dos e-mails que não foram entregues (seja porque a caixa esteja cheia, ou porque de fato o e-mail não existe).

        Tem como configurar isso?
        Obrigado.

        Responder
        • É possível sim, depois de “if(!$Email->Send()){” que seria o que acontece se o e-mail não for enviado você pode criar uma função que pegue o e-mail que não “funcionou” e envie para você.

          Responder
  30. como faço para colocar esse formulario no meu blog

    Responder
  31. Muito bom mesmo! Coloquei os arquivos e deu certo.
    Mas veja se pode me ajudar, estou adaptando sua index na minha para não ter que criar um iframe, estou colocando assim mas o email não chega.

    O está errado?

    Responder
    • “form>

      </form"

      *tirei as chaves do form de proposito

      Responder
      • *form>
        *form action=”formulario/envia.php” method=”post” >
        *input type=”text” name=”nomeremetente” placeholder=”Nome”>
        *input type=”text” name=”emailremetente” placeholder=”Email”>
        *input type=”text” name=”assunto” placeholder=”Assunto”>
        *textarea placeholder=”Mensagem…”>*/textarea>
        *input type=”submit” value=”ENVIAR”>
        */form>

        troquei < por * para entrar no comentario

        Responder
    • Verifique o caminho dos arquivos

      Responder
  32. Cara, como faço pra mandar e receber utilizando gmail ? tem como ? ou teria que ter um email de host mesmo, poderia explicar um pouco melhor essa parte?

    Responder
    • É possível sim, pesquise pelo servidor de envio do gmail e insira seu e-mail e senha, deve funcionar =]

      Responder
  33. Richard muito obrigado por estar ajudando.
    Tenho uma dúvida, tenho conhecimento em Html, porém não manjo de PHP gostaria de saber se está correto o que eu fiz para funcionar no meu site.

    SetLanguage(“br”);
    $Email->IsSMTP(); // Habilita o SMTP
    $Email->SMTPAuth = true; //Ativa e-mail autenticado
    $Email->Host = ‘mx1.hostinger.com.br’; // Servidor de envio # verificar qual o host correto com a hospedagem as vezes fica como smtp.
    $Email->Port = ‘587’; // Porta de envio
    $Email->Username = ‘contato@innovateti.com.br’; //e-mail que será autenticado
    $Email->Password = ‘P@ssw0rd!!@@’; // senha do email
    // ativa o envio de e-mails em HTML, se false, desativa.
    $Email->IsHTML(true);
    // email do remetente da mensagem
    $Email->From = ‘contato@innovateti.com.br’;
    // nome do remetente do email
    $Email->FromName = utf8_decode($email);
    // Endereço de destino do emaail, ou seja, pra onde você quer que a mensagem do formulário vá?
    $Email->AddReplyTo($email, $nome);
    $Email->AddAddress(“contato@innovateti.com.br”); // para quem será enviada a mensagem
    // informando no email, o assunto da mensagem
    $Email->Subject = “(Contato do site – seudominio.com.br)”;
    // Define o texto da mensagem (aceita HTML)
    $Email->Body .= ”
    Nome: $nome
    E-mail: $email
    Telefone: $ddd – $telefone
    Assunto: $assunto
    Mensagem: $mensagem”;
    // verifica se está tudo ok com oa parametros acima, se nao, avisa do erro. Se sim, envia.
    if(!$Email->Send()){
    echo “A mensagem não foi enviada. “;
    echo “Erro: ” . $Email->ErrorInfo;
    }else{
    echo “location.href=’sucesso.html'”;

    }

    ?>

    Agradeço desde já!

    Responder
    • Aparentemente está correto, o Host é esse mesmo? mx1…?

      Responder
  34. Richard não tenho muito conhecimento em PHP, uma dúvida. Somente preenchendo os campos informados no arquivo envia.php conforme você mencionou e hospedar irá funcionar?

    Minha hospedagem é da HOSTINGER
    Meu Dominio: innovateti.com.br

    Agradeço desde já!

    Responder
  35. Muito obrigado , mesmo tanto tempo depois do seu post ele ainda nos ajuda e muito 🙂

    Responder
  36. olá richard aparece o seguinte erro, as informações peguei no próprio hotmail já tentei com o gmail tbm e não consegui

    Nome do servidor: smtp-mail.outlook.com
    Porta: 587
    Método de criptografia: TLS

    Erro de SMTP: NĂŁo foi possĂ­vel autenticar.
    SMTP server error: 5.7.0 Must issue a STARTTLS command first

    $Email = new PHPMailer();
    $Email->SetLanguage(“br”);
    $Email->IsSMTP(); // Habilita o SMTP
    $Email->SMTPAuth = true; //Ativa e-mail autenticado
    $Email->Host = ‘smtp-mail.outlook.com’;
    $Email->Port = ‘587’; // Porta de envio
    $Email->Username = ‘everton91328939@hotmail.com’; //e-mail que será autenticado
    $Email->Password = ‘******* ‘; // senha do email
    // ativa o envio de e-mails em HTML, se false, desativa.
    $Email->IsHTML(true);
    // email do remetente da mensagem
    $Email->From = ‘everton91328939@hotmail.com’;
    // nome do remetente do email
    $Email->FromName = utf8_decode($email);
    // Endereço de destino do emaail, ou seja, pra onde você quer que a mensagem do formulário vá?
    $Email->AddReplyTo($email, $nome);
    $Email->AddAddress(“everton91328939@hotmail.com”);

    Responder
    • eu adicionei

      $Email->SMTPSecure = ‘tls’;

      mas ainda fica o erro de não foi possível autenticar

      Responder
    • Servidor SMTP: smtp.gmail.com
      Porta SMTP: 25 , Ou Caso não consiga enviar mensagens, experimente modificar a porta para 587
      Servidor POP: pop.gmail.com
      Porta POP: 110
      Usuario (Servidor POP e SMTP): preencha o seu gmail. Exemplo: XXXXXX@gmail.com
      Senha (Servidor POP e SMTP): senha do e-mail
      Nome remetente: nome do usuario
      e-mail do remetente: e-mail do usuario
      Requer conexão tsl: sim
      Requer autenticação: sim
      Atenção: para enviar e-mails pelo Gmail é necessário copiar para o diretório do programa 2 arquivos: libeay32.dll e ssleay32.dll.
      Também é necessário Configurando o POP no GMail:

      no caso do outlook mesmo que hotmail Smtp.live.com porta 25

      Responder
  37. Não to conseguindo ta dando esse erro:

    Erro de SMTP: Não foi possível autenticar.
    A mensagem não foi enviada.

    Erro: Erro de SMTP: Não foi possível autenticar.
    SMTP server error: 5.7.0 Must issue a STARTTLS command first

    A configuração esta assim:

    $Email = new PHPMailer();
    $Email->SetLanguage(“br”);
    $Email->IsSMTP(); // Habilita o SMTP
    $Email->SMTPAuth = true; //Ativa e-mail autenticado
    $Email->Host = ‘mx1.hostinger.com.br’; // Servidor de envio # verificar qual o host correto com a hospedagem as vezes fica como smtp.
    $Email->Port = ‘587’; // Porta de envio
    $Email->Username = ‘contato@marlonfsantos.hol.es’; //e-mail que será autenticado
    $Email->Password = ‘Mrl3102ss’; // senha do email
    // ativa o envio de e-mails em HTML, se false, desativa.
    $Email->IsHTML(true);
    // email do remetente da mensagem
    $Email->From = ‘contato@marlonfsantos.hol.es’;
    // nome do remetente do email
    $Email->FromName = utf8_decode($email);
    // Endereço de destino do emaail, ou seja, pra onde você quer que a mensagem do formulário vá?
    $Email->AddReplyTo($email, $nome);
    $Email->AddAddress(“contato@marlonfsantos.hol.es”); // para quem será enviada a mensagem

    Responder
  38. Um dos raros formulários na web funcionais, parabéns e obrigado por disponibilizar.

    Responder
  39. Muito obrigado pelo poste… Vocês ajudaram onde ninguém mais conseguia. vlw

    Responder
  40. Cara, muito obrigado !!!! funcionou e atendeu minhas expectativas

    Responder