Solucionado (ver solução)
Solucionado
(ver solução)
30
respostas

Contact form (não está) mandando mensagem no e-mail

Não estou conseguindo fazer isso funcionar para me mandar a mensagem direto pro e-mail... Meu código está assim, o que devo implementar mais para que funcione? Meu site está online, para quem quiser visitar e olhar como está o design (contact form não está ativo nele): http://flordeiris.dx.am/

Parte do código html (index.html):

<section id="contact">
      <div class="container">
        <div class="row">
          <div class="col-md-5 col-sm-5">
            <form class="contact-form" action="contactform.php" method="post">
              <div class="form-group">
                <label>Nome: </label>
                <input class="form-control" type="text" name="name" placeholder="Nome Completo">
              </div>
              <div class="form-group">
                <label>Email: </label>
                <input class="form-control" type="text" name="mail" placeholder="Digite seu Email">
              </div>
              <div class="form-group">
                <label>Mensagem: </label>
                <textarea class="form-control" name="message" placeholder="Digite sua mensagem"></textarea>
              </div>
              <button class="btn btn-default">Enviar</button>
            </form>
          </div>
          <div class="col-md-7 col-sm-7">

          </div>
        </div>
      </div>
    </section>

Parte em php do contact form (contactform.php):

<?php

if ( isset( $_POST[ 'submit' ] ) ) {
    $name = $_POST[ 'name' ];
    $mailFrom = $_POST[ 'mail' ];
    $message = $_POST[ 'message' ];

    $mailTo = "marralucas1@gmail.com";
    $headers = "From: " . $mailFrom;
    $txt = "Você recebeu um email de " . $name . ".\n\n" . $message;

    mail($mailTo, $txt, $headers);
    header("Location: index.html?mailsend");
}

?>
30 respostas

Hum, você pode verificar no servidor executando:

echo '<pre>';
print_r($_POST);

quais variáveis estão vindo de fato no seu formulário. Eu suspeito que o problema está no button, acho que para que a variável "submit" exista o button tem que ter um name associado:

<button class="btn btn-default" name='submit'>Enviar</button>

Me avise se deu certo.

{"code":"MethodNotAllowedError","message":"POST is not allowed"}

Recebo essa mensagem no topo da página quando clico Enviar.

Bom, então, me parece que tem mais coisas entre o formulário e o php..esse tipo de resposta em json não é comum do http básico. Não consigo ajudar somente com estas infos.

Não estou usando json. As únicas linhas de código feitas são essas... Acredito que eu tenho que usar smtp

Ah, eu pensei que nem estava chegando na função "mail".

Quando usamos servidores como locaweb, geralmente eles vem configurados e tem como configurar localhost também.

Mas particularmente sempre preferi usar smtp nestes 10 anos...

E aí aproveito pra deixar duas dicas para uso do smtp.

Este serviço é excelente em envio de email transacional e tem uma cota gratuita grande, fácil de configurar e já fica profissional para uso na aplicação. https://postmarkapp.com

Para testar smtp localmente, essa ferramenta aqui é excelente: https://github.com/mailhog/MailHog

O postmarkapp não tem como usar em e-mail público, infelizmente...

Não consigo configurar o smtp localmente e colocar dentro do meu form. :/

Tentarei usar o MailHog e darei feedback

Minha última tentativa de ajudar, hehhe..

Sugiro o componente Swift Mailer para fazer o smtp: https://swiftmailer.symfony.com/docs/introduction.html

Aí, sugiro testá-lo com o gmail. A tendência é funcionar bem, mas você vai ver que os emails são lentos.

Aí depois coloca o mailhog e muda o host do servidor para localhost na porta que o mailhog indica.

aí os testes com email ficam rápidos. É ótimo.

Testarei esse Swift Mailer, parece ser mais simples o uso (sou meio lento).

Mas só poderei dar feedback após o jogo do Brasil hehe

DEMOREI mas voltei com o código quase funcionando................... Como o código é muito grande, o próprio site me recomendou usar o git pra compartilhar o código: https://gist.github.com/losreis/2a67bc5a922d355d4db66ec7cdaf359a

marralucas1@espacorodadagua.dx.am é o email (próprio?) do site de hospedagem que estou usando

Problema: Está quase tudo funcionando.... Só na hora de mandar a mensagem/email, ele não manda aaaaaaa

O que eu posso fazer para funcionar?

Pra quem quiser testar em live, já está funcionando no site: http://espacorodadagua.dx.am/services.php

Olha, o único problema que eu encontrei é nessa linha aqui:

$mail->SetFrom($_POST['emailid'], $_POST['fullname']);

O from deveria ser seu email do Gmail, porque o que está acontecendo é que o o PhpMailer vai conectar com a conta do gmail para enviar seu email como se estivesse sendo enviado do gmail mesmo. Então o from seria o mesmo email usado no Username.

SE olhar outras implementações na web com PhpMailer e gmail vai ver que o pessoal usa no "From" o mesmo que no username.

Aqui por exemplo: https://pt.stackoverflow.com/questions/89690/envio-de-email-via-phpmailer-para-gmail

Espero que ajude. Está evoluindo bem esse código heim.!!!

Abraços.

Editei aqui:

$mail->SetFrom('marralucas1@gmail.com', $_POST['fullname']);

E aqui, que antes não tinha true

$mail->IsSMTP(true);

Não sei se editei certo.... Mas, continua dando erro e não envia.

Hum, tenta alterar a porta para a 587 com tls:

$mail->Port = 587;  //Gmail SMTP port
$mail->SMTPSecure = "tls";

Essa porta é usada nestes outros dois exemplos: https://pt.stackoverflow.com/questions/89690/envio-de-email-via-phpmailer-para-gmail

http://alissonmachado.com.br/autenticando-phpmailer-e-gmail/

Não funcionou.

Estou olhando o serviço de webmail do meu host (AWARDSPACE.NET) e notei algumas configurações

Opções de Recebimento de E-mail
Servidor  |    mail.espacorodadagua.dx.am
Protocolo |    IMAP ou POP3
Segurança |    Não-criptografado | Seguro (SSL)
Portas    |    IMAP     POP3     | IMAP  POP3
               143      110      | 993     995
Autenticação |    Necessário
Nome de Usuário     marralucas1@espacorodadagua.dx.am
Senha     Senha para marralucas1@espacorodadagua.dx.am
Opções de Envio de E-mail
Servidor |    mail.espacorodadagua.dx.am
Protocolo|     SMTP
Segurança|     Não-criptografado |    Seguro (SSL)
Portas   |             25 ou 587 |    465
Autenticação |    Necessário
Nome de Usuário     marralucas1@espacorodadagua.dx.am
Senha     Senha para marralucas1@espacorodadagua.dx.am

As configurações estão assim, será que tenho que fazer segundo elas? aaaaaaaaaaaaaaaaaaaaaaaaaaaa

Pode dar certo... Mas realmente não sei mais como ajudar.

Sucesso.

Tudo bem, obrigado pelo tempo que tentou ajudar (quase 1 semana)...

Tentarei fazer isso funcionar a força asduhsaduhsa

Muito obrigado pela tentativa... Quem sabe mais alguém vem aqui para me ajudar? (acho difícil, mas quem sabe asdhsauh).

Tive um certo progresso, porém ainda não funciona.

Estou conseguindo ter um código de erro melhor de ser lido:

2018-07-12 02:07:19 Connection: opening to 185.176.40.12:587, t=10, opt=array ( ) 2018-07-12 02:07:19 SMTP ERROR: Failed to connect to server: Connection refused (111) SMTP connect() failed. Erro! SMTP connect() failed. ?>

Me aparece esse erro.

Já olhei até no trouble do git da phpmailer e nada

Criei um post no StackOverflow

https://stackoverflow.com/questions/51296521/smtp-connect-failed-erro-smtp-connect-failed-need-some-real-help-here

Lucas, vi agora que você colocou "tsl", na verdade é "tls". Será que é isso?

Vou tentar mudar isso assim que eu conseguir entrar no meu host.... Parece que tá fora do ar ou algo do tipo Mas assim que eu conseguir, dou feedback.

Edit.: Editei para "tls" e mesmo assim continuo tendo erro.

SMTP ERROR: Failed to connect to server: Connection refused (111) SMTP connect() failed. Erro! SMTP connect() failed. ?>

Lucas, consegui fazer funcionar aqui. O que eu notei foi o seguinte, essa linha aqui não funcionou pra mim localmente:

$mail->Host = gethostbyname('smtp.gmail.com');

Deixei da maneira simples, meu teste completo ficou assim:

<?php
include("vendor/autoload.php");

$mail = new \PHPMailer\PHPMailer\PHPMailer();
$mail->SMTPDebug = 1;

$nome = 'João';
$assunto = 'Teste';
$email = 'joao@teste.com.br';
$comments = 'joajoajoajoa';

$mail->IsSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->Port = 587;
$mail->SMTPAuth = true;
$mail->SMTPSecure = "tls";
$mail->SMTPDebug = 4;
$mail->Username = "meuemail@gmail.com";
$mail->Password = "**************";
$mail->SetFrom("meuemail@gmail.com",'Kaléu');
$mail->Email = $email;              
$mail->Subject = $assunto;
$mail->Body = $comments;
$mail->AddAddress("outroemaildestino@xxx.com.br");

if(!$mail->Send()){
    echo "Erro! ".$mail->ErrorInfo;
}else{
    echo "Mensagem enviada &lt;br&gt;";
}

Não sei onde você pegou aquela classe do PhpMailer. Eu usei pelo composer como está na documentação do Mailer, mas deve ser a mesma coisa.

Sugiro você testar executando o arquivo php acima diretamente na linha de comando. Aparecem os erros todos detalhados se fizeres assim.

https://s.nimbusweb.me/image/1891413/8ks23xs4m0h5hs5dvh5d/1085671-IGLkOde2UU7liuds/1085671-W3NQ7VDBJNwLtgqb/Captura%2520de%2520tela%2520de%25202018-07-12%252015-38-30.png

Se funcionar localmente, mas não funcionar no seu servidor, sugiro trocar de servidor...hehehe...enfim, aí fica mais difícil.

Ah, tem uma última questão relacionada ao gmail.

Você tem que habilitar na sua conta do google, na opção de Login e Segurança, para que ele permita acesso à sua conta de apps pouco seguros. É isso aqui:

https://box.everhelper.me/attachment/1891425/pm13no0ge2pz2wihlrq5/1085671-BpPs2g5NAQqkputZ/screenshot-myaccount.google.com-2018.07.12-15-42-39.png

Sem isso, o smtp dá erro de autenticação. Descobri isso executando pela linha de comando e pegando o erro completo do smtp.

Tentarei por isso em prática e voltarei com feedback

Editei as primeiras linhas para ficar assim:

<?php
include("PHPMailer-master/class.phpmailer.php"); 
include("PHPMailer-master/PHPMailerAutoload.php"); 

$mail = new PHPMailer();

Conforme os arquivos estão no meu host...

Obtive outro código de erro agora:

2018-07-12 18:57:55 Connection: opening to smtp.gmail.com:587, t=10, opt=array ( ) 2018-07-12 18:57:55 SMTP ERROR: Failed to connect to server: Network is unreachable (101) SMTP connect() failed. Erro! SMTP connect() failed.

Erro 101 ao invés de erro 111

Já tenho a configuração do google liberada

Minha configuração de pasta:

http://prntscr.com/k5r6pz
http://prntscr.com/k5r76e

Código:

<?php
include("PHPMailer-master/class.phpmailer.php"); 
include("PHPMailer-master/PHPMailerAutoload.php"); 


$mail = new PHPMailer();
$mail->SMTPDebug = 1;

$nome = $_POST['fullname'];
$assunto = $_POST['subject'];
$email = $_POST['emailid'];                  
$comments = $_POST['comments'];

$mail->IsSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->Port = 587;
$mail->SMTPAuth = true;
$mail->SMTPSecure = "tls";
$mail->SMTPDebug = 4;
$mail->Username = "marralucas1@gmail.com";
$mail->Password = "************";
$mail->SetFrom("marralucas1@gmail.com",'Lucas Marra');
$mail->Email = $email;              
$mail->Subject = $assunto;
$mail->Body = $comments;
$mail->AddAddress("marralucas1@espacorodadagua.dx.am");

if(!$mail->Send()){
    echo "Erro! ".$mail->ErrorInfo;
}else{
    echo "Mensagem enviada &lt;br&gt;";
}
?>

Funciona localhost ou nem isso?

Perdão pela falta de conhecimento, mas não sei como testar em localhost.

Hum, seria apenas executar o arquivo local. com o apache instalado.

Você tem PHP instalado localmente?

Esse erro parece ser erro de rede, como se o servidor não tivesse permissão para acessar o server do gmail.

Tenta com os dados do servidor mesmo, acho que vale a tentativa:

$mail->Host = 'mail.espacorodadagua.dx.am';
$mail->Username = "marralucas1@espacorodadagua.dx.am";
$mail->Password = "************";
$mail->SetFrom("marralucas1@espacorodadagua.dx.am",'Lucas Marra');

Torço pra funcionar.

Tenho o php localmente e o xampp rodando o apache sim Tentarei com os dados do servidor do meu host e dou feedback.

solução!

Ah, tetsar localmente é rodar esse código aí com o gmail no teu próprio xampp e ver se funciona. Já fez isso?

Se quiser: meu whatsapp 48999751808 Vamos resolver esse negócio...

Infelizmente não funcionou, voltou ao erro (111):

2018-07-12 19:32:54 Connection: opening to mail.espacorodadagua.dx.am:587, t=10, opt=array ( ) 2018-07-12 19:32:54 SMTP ERROR: Failed to connect to server: Connection refused (111) SMTP connect() failed. Erro! SMTP connect() failed.

E quando eu entro na página já está esse erro, não sei se influencia em algo

Erro! Message body empty

Estou usando o DNS da Cloudfare, não sei se isso também possa atrapalhar.

    For IPv4: 1.1.1.1 and 1.0.0.1
    For IPv6: 2606:4700:4700::1111 and 2606:4700:4700::1001