Ir ao conteúdo
  • Cadastre-se

Erro com envio de formulário para E-mail


joseRenato

Posts recomendados

  • Moderador

Isso não precisa.

Quando você definiu o botão como submit.. ele já faz a ação de enviar.... mas tem uma coisa que quero lhe perguntar, notei que no seu formulário você não setou nenhum action.. se não setar o action, isso quer dizer que estaria usando a própria pagina... onde o codigo php fica na mesma.

como não há um action, certamente ele não está enviando os dados.

Agora lhe pergunto, você esqueceu de colocar o action ou está fazendo a requisição via ajax ?

Eu costumo muito usar o jquery e ajax para esse tipo de coisa.. é bem simples de fazer com a função $.ajax() e "serializando" seu formulário com a função serialize().

NO aguardo.

Link para o comentário
Compartilhar em outros sites

é... eu deixei tudo na mesma pagina, pois estou usando a pagina de contato via ajax

Um coisa que notei, é que quando eu vou abrir "apenas" o arquivo de contato, o código da classe PHPMailer, fica aparecendo no browser, em cima do formulário, e quando eu abro ele com o outro arquivo, via ajax, não acontece isso

Link para o comentário
Compartilhar em outros sites

Deixa eu ver se eu entendi, você quer que eu, crie uma estrutura ajax, no arquivo de contato, para chamar o código php ? sendo que o arquivo de contato, já é chamado também por outro arquivo via ajax ?

-----

por enquanto eu apenas separei o php do formulario, e coloquei apenas o arquivo de contato e o php no local host(separado), quando clico em submit, da o seguinte erro :

Parse error: syntax error, unexpected '$mail' (T_VARIABLE) in C:\Program Files (x86)\EasyPHP-12.1\www\my portable files\site\php\phpContact.php on line 18

linha 18 : $mail->Port = 465;

estou usando um e-mail da gmail

Link para o comentário
Compartilhar em outros sites

  • Moderador

Não sei se fui claro, agora vou tentar ser o mais transparente possível.

Você cria um arquivo html com o nome de contato. Nele você deixa apenas o formulário e o código jquery desta maneira:

contato.php(arquivo só contendo as marcações html e o jquery)


<head>
<script type="text/javascript">
$(document).ready(function(){
var envia = $("#botao");

envia.click(function(e){
e.preventDefault();
var dados = $("#contactForm").serialize();

$.ajax({
url: "processa.php",
dataType: "html",
type: "POST",
data: dados,
sucess: function(data){
alert(data);
},
error: function(data){
alert(data);'
}
});
}) ;
});
</script>
</head>
<div id="contact">
<form id="contactForm" action="#" method="POST">
<div>
<input type="text" required size="30" name="name" id="name" />
</div>

<div>
<input type="email" required size="30" name="email" id="email" />
</div>

<div>
<input type="text" required size="30" name="assunto" id="assunto" />
</div>

<div>
<textarea cols="60" required rows="10" name="message" id="message"> </textarea>
</div>

<div id="botao">
<input type="image" src="images/enviar.png" name="enviar" value="Submit" id="submit" />
</div>

</form>
</div>

Note que foi usado a função $.ajax() para requisitar o arquivo php.. armazenei os dados do formulário em uma variável serializado.. ou seja, ele pega todos os valores e cria um array e envia. isso é útil quando há necessidade de enviar vários campos sem ter que criar uma variável para cada.

Os parametros success e error: são justamente para o callback, ou seja a mensagem de retorno caso a mensagem for enviada ou não.. o conteudo dela será o conteúdo dos echo lá no bloco de if do $send no arquivo processa.php

processa.php: (arquivo requisitado quando clicar no botão de enviar)


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


$nome = $_POST["name"];
$email = $_POST["email"];
$assunto = $_POST["assunto"];
$mensagem = $_POST["message"];

$mail = new PHPMailer();

$mail->IsSMTP();
$mail->SMTPAuth = true;

[COLOR="Red"]$mail->Host = "smtp.gmail.com";[/COLOR]
$mail->Port = 465;

$mail->Username = "[email protected]";
$mail->Password = "caneta323";

$mail->From = $email;
$mail->FromName = $nome;

$mail->Subject = $assunto;

$mail->Body = $mensagem;
$mail->AltBody = $mensagem;


$send = $mail->send();

if($send){
echo "Email enviado!";
}else{
echo "Erro.. Email não enviado";
}

Quanto ao erro..

Parse error: syntax error, unexpected '$mail' (T_VARIABLE) in C:\Program Files (x86)\EasyPHP-12.1\www\my portable files\site\php\phpContact.php on line 18

linha 18 : $mail->Port = 465;

isso foi por que na linha de cima onde foi definido o smtp .. está sem as aspas e o ponto e virgula

note que destaquei em vermelho no código php.

Outra coisa que notei é que não vi a definição de seu e-mail(para onde vai o envio)

então crie um: $to = "[email protected]";

e atribua a variável em: $mail->AddAddress($to);

não sei se agora ficou mais claro... separar os códigos e organizar faz parte das boas práticas da programação!

No aguardo.

Link para o comentário
Compartilhar em outros sites

Ocorreu dois erros :

Warning: require_once(php/class.phpmailer.php): failed to open stream: No such file or directory in C:\Program Files (x86)\EasyPHP-12.1\www\my portable files\site\php\phpContact.php on line 2

Fatal error: require_once(): Failed opening required 'php/class.phpmailer.php' (include_path='.;C:\php\pear') in C:\Program Files (x86)\EasyPHP-12.1\www\my portable files\site\php\phpContact.php on line 2

Sendo que nesta linha, é a onde eu chamo a classe PHPMailer.

Segue meu código -

HTML -JS :


$(document).ready(function(){
var envia = $("#botao");

envia.click(function(e){
e.preventDefault();
var dados = $("#contactForm").serialize();

$.ajax({
url: "php/phpContact.php",
dataType: "html",
type: "POST",
data: dados,
sucess: function(data){
alert(data);
},
error: function(data){
alert(data);'
}
});
}) ;
});


<div id="contact">
<form id="contactForm" action="php/phpContact.php" method="POST">

<div>
<input type="text" required size="30" name="name" id="name" />
</div>

<div>
<input type="email" required size="30" name="email" id="email" />
</div>

<div>
<input type="text" required size="30" name="assunto" id="assunto" />
</div>

<div>
<textarea cols="60" required rows="10" name="message" id="message"> </textarea>
</div>

<div id="botao">
<input type="image" src="images/enviar.png" name="enviar" value="Submit" id="submit" />
</div>

</form>

PHP :


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


$nome = $_POST["name"];
$email = $_POST["email"];
$assunto = $_POST["assunto"];
$mensagem = $_POST["message"];
$to = "[email protected]";

$mail = new PHPMailer();

$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->SMTPSecure = "ssl";

$mail->Host = "smtp.gmail.com";
$mail->Port = 465;

$mail->Username = "[email protected]";
$mail->Password = "caneta323";

$mail->From = $email;
$mail->FromName = $nome;

$mail->Subject = $assunto;

$mail->Body = $mensagem;
$mail->AltBody = $mensagem;

$mail->AddAddress($to);

$send = $mail->send();

if($send){
echo "Email enviado!";
}else{
echo "Erro.. Email não enviado";
}

?>

Link para o comentário
Compartilhar em outros sites

  • Moderador

Esse problema é porque ele não achou os arquivos requeridos. veja se não errou no caminho e tal... ou eles estão em outra pasta..

sugiro não utilizar o require_once. use o include.

include "php/class.phpmailer.php";

include "php/class.smtp.php";

O bom bem seria usar fullpath ou seja caminho completo.. assim você não forçaria o sistema a pegar o caminho relativo.

lembre-se de que que o arquivo php naqual está incluindo o arquivo estiver em outra pasta, é necessário colocar o ../

desta maneira:

include "../php/class.phpmailer.php";

include "../php/class.smtp.php";

o ../ faz voltar um diretório.

Agora se o arquivo php que está incluindo as classes estiverem na mesma pasta... como eu acho que é o caso.. apenas deixe assim:

include "class.phpmailer.php";

include "class.smtp.php";

E uma ultima dica... quando você usa o php em arquivo separado, acostume-se a não fechar a tag php. Faz parte das boas práticas também. Utilizando o fechamento, qualquer espaço em branco ou caractere estranho poderá gerar um erro no browser, no conteúdo exibido. Sem o fechamento seria retornado um erro pelo parser do PHP. e ficaria fácil de descobrir erros.

Link para o comentário
Compartilhar em outros sites

  • Moderador

Huimm agora eu não sei, pois fazendo as correções que mencionei, não deveria dar problemas. veja se não houve problemas de autenticação... usuário ou senha digitada errada.

se você tiver o firebug instalado no firefox.. quando clicar no botão de enviar.. poderá ver a requisição e seus dados..

No aguardo.

Link para o comentário
Compartilhar em outros sites

hmm, só uma duvida, ali no user name, eu coloco o e-mail ? ou o nome que eu dei para a conta com aquele email ?

Ao conferir o código aqui, vi que tinha uma aspa, no código do ajax.


error: function(data){
alert(data);'

ai eu tirei ela e ficou assim


error: function(data){
alert(data);

agora quando clico em submit, n acontece nada, seria um erro com o ajax ?

Link para o comentário
Compartilhar em outros sites

  • Moderador

Não, no codigo jquery ali em específico não leva aspas.

Desculpe aquilo foi falha minha na hora de digitar. nem eu vi :D

no username, coloque apenas o nome de usuário. exemplo:

$mail->Username = "juegregore28";

veja que o seu nome de usuário é a parte inicial de seu email do gmail.

tente debugar como firebug. faça a requisição e veja o que aparece no "console" do firebug.

quem sabe seria interessante você anexar aqui prints do seu código no programa, e print do que aparece no firebug.

Mas é estranho, o jquery que te passei, é exatamente da forma como eu uso. existem ainda outros jeitos.. mas esse eu acho o mais simples e claro.

Link para o comentário
Compartilhar em outros sites

Ai vai...

Bem, tirando a aspa, o ajax parece não funcionar, pois quando eu clico em submit nada acontece, além do mais, até as requisições HTML pararam de funcionar....

Códigos -

HTML - JS :


$(document).ready(function(){
var envia = $("#botao");

envia.click(function(e){
e.preventDefault();
var dados = $("#contactForm").serialize();

$.ajax({
url: "phpContact.php",
dataType: "html",
type: "POST",
sucess: function(data){
alert(data);
},
error: function(data){
alert(data);
}
});
}) ;
});


<div id="contact">
<form id="contactForm" action="phpContact.php" method="POST">

<div>
<input type="text" required size="30" name="name" id="name" />
</div>

<div>
<input type="email" required size="30" name="email" id="email" />
</div>

<div>
<input type="text" required size="30" name="assunto" id="assunto" />
</div>

<div>
<textarea cols="60" required rows="10" name="message" id="message"> </textarea>
</div>

<div id="botao">
<input type="image" src="images/enviar.png" name="enviar" value="Submit" id="submit" />
</div>

</form>

PHP :


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


$nome = $_POST["name"];
$email = $_POST["email"];
$assunto = $_POST["assunto"];
$mensagem = $_POST["message"];
$to = "[email protected]";

$mail = new PHPMailer();

$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->SMTPSecure = "ssl";

$mail->Host = "smtp.gmail.com";
$mail->Port = 465;

$mail->Username = "juegregore28";
$mail->Password = "caneta323";

$mail->From = $email;
$mail->FromName = $nome;

$mail->Subject = $assunto;

$mail->Body = $mensagem;
$mail->AltBody = $mensagem;

$mail->AddAddress($to);

$send = $mail->send();

if($send){
echo "Email enviado!";
}else{
echo "Erro.. Email não enviado";
}



Imagens -

Pasta ondes todos os arquivos estão ....

http://i50.tinypic.com/4qlxf5.jpg

Site, com a pagina de contatos ....

http://i45.tinypic.com/10714ck.jpg

Console FireBug, depois de clicar em Submit ....

http://i47.tinypic.com/aoqgbn.png

Link para o comentário
Compartilhar em outros sites

  • Moderador

Ok, já descobri o erro. é bem simples.. mas estava passando desapercebido por mim..

A requisição está sendo feita, porém faltou o parâmetro mais importante... o data.

em momento algum você está enviando os dados do formulário.

veja atentamente no meu exemplo no post #30, página 2 que consta o parâmetro data recebendo a variável dados.


$(document).ready(function(){
var envia = $("#botao");

envia.click(function(e){
e.preventDefault();
var dados = $("#contactForm").serialize();

$.ajax({
url: "phpContact.php",
dataType: "html",
type: "POST",
[B][COLOR="Red"]data: dados[/COLOR][/B],
sucess: function(data){
alert(data);
},
error: function(data){
alert(data);
}
});
}) ;
});

acredito que agora vá funcionar :D

Outra coisa que notei, deixa em branco o action no formulário, pois você já está fazendo a requisição do arquivo php por ajax

Link para o comentário
Compartilhar em outros sites

Agora parece que o ajax esta funcionando normalmente, pois quando clico em submit da um alert do echo, que a o email n foi enviado, o estrnho, é que a pagina nem carrega nem nada, o alert vem exatamente logo após de apertar submit(sendo que minha internet n rápida), eu esperava que pelo menos demora-se um pouco mais, pra fazer algumas verificações etc... o que sera que pode ser ? n é alguma configuração do easyPHP ?

Outra coisa, é que as requisições via HTML, param de funcionar....

Link para o comentário
Compartilhar em outros sites

  • Moderador

Então amigo, acho que ainda você não entendeu o funcionamento do ajax.

quando se fazuma requisição assincrona, não há um recarregamento da página, isso quer dizer que sempre aparecerá um alert sem sair da página. não tem haver com a velocidade da internet. também a configuração do easyphp não entra na história.

veja no seu firebug, que de fato está fazendo a requisição, toda vez que você clica, aparece em negrito o nome do arquivo requisitado e o tempo que ele levou.. ... o erro parece ser em algum outro lugar. volto minha atenção para a sua autenticação.. pois se aparece o alert de não enviado, quer dizer que ele está ignorando o primeiro bloco de IF e caindo no bloco no ELSE.

veja se não errou em alguma coisa.. senha... ou usuário.... revisa tudo.

Link para o comentário
Compartilhar em outros sites

ai é que esta o problema, como eu n "manjo" muito, acabo não encontrando nada significativo no firebug, para resolver o problema, já tentei achar algo, mas pra mim parece estar normal, já estou a um tempo estudando a classe...

acho que vou tentar upar em algum servidor gratuito e ver se vai funcionar...

Link para o comentário
Compartilhar em outros sites

  • Moderador

Estranho, realmente estranho... aparentemente se seguiu minhas orientações deveria funcionar independente se for online ou localhost.. já que usas uma autenticação do gmail.

quem sabe, se você postar o código completo, sem ser em partes como estava fazendo eu possa ver se errou em algo. tanto o arquivo html( completo do inico ao fim) como o arquivo php...

ou se achar melhor, você pode zipar os dois e upar em um servidor gratuito que aí eu vejo melhor, e testo aqui.( só retira seu username e senha .. para eu usar as minha credenciais para teste.

abraço.

Link para o comentário
Compartilhar em outros sites

  • Moderador

Cara, seu código está 100% funcionando.. só foi eu colocar minhas credenciais do gmail.. setar a variavel $to.. para meu email receber... e testei.. recebi os emails no gmail.

Veja na imagem:

funcionando.png

Veja que destaquei em amarelo que o arquivo php foi requisitado normalmente..

As setas vermelhas, indicam os parametros enviados ao php.. ou seja o conteúdo de cada variável.. note que ele está mostrando como se fosse get ali onde diz "fonte".

resumo.. seu código está 100% funcionando. reveja se não colocou errado suas credenciais.

Link para o comentário
Compartilhar em outros sites

Eu não entendo, pois na variável $to, eu coloquei o meu e-mail completo, no user name, coloquei apenas o inicio do email, tirei @gmail.com, e no password, coloquei a senha do meu email, esta correto.

Se eu for verificar no firebug, esta igual como o seu, as variáveis, com o conteúdo que o usuario digitou

Link para o comentário
Compartilhar em outros sites

  • Moderador

Pois então se no console do seu firebug apareceu exatamente igual a imagem, quando clicar na aba de Resposta ou Html, deverá aparecer " mensagem enviada"

veja se seu gmail não está considerando spam...

A única explicação que dou no momento é que em algum lugar está errado.. seja email, username ou senha... ou talvez não esteja recebendo os dados..

experimenta comentar todo seu codigo php... e dá um echo nas variáveis que recebe do formulário.. só para ter certeza de que os dados estão sendo recebidos..

Link para o comentário
Compartilhar em outros sites

aproveitando o tópico, tenho uma duvida sobre a classe PHPMailer

tem que ser contas do gmail e hotmail, ou pode ser qualquer conta de email?

pois tenho meu proprio email, que fiz na minha hospedagem, tambem não consegui usar a função mail do PHP, tive que pegar um script que a hospedagem mesmo oferece,

o email esta indo normalmente, abro ele no outlook, porém nao consigo editar o jeito que o email é mostrado no email.

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Nosreve,

não necessariamente precisas usar o gmail ou hotmail. no seu caso, como você tem um servidor já e emails, com certeza você possui alguma credencial.. é só definir o seu smtp, a porta ... e usuário e senha de seu email.

exemplo:

a porta padrão é 25, o smtp é: smtp.seudomínio.com.br, o usuário e senha você recebe quando cria o email.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!