Ir ao conteúdo
  • Cadastre-se

Erro com envio de formulário para E-mail


joseRenato

Posts recomendados

Estou aprendendo PHP a poucos dias atras, criei um código para enviar dados de um formulário HTML para um e-mail, mas quando clico no botão de enviar da o seguinte erro no browser :

Objeto não encontrado!

A URL requisitada não foi encontrada neste servidor. O link na página referida parece estar com algum erro ou desatualizado. Por favor informe o autor desta página sobre o erro.

Se você acredita ter encontrado um problema no servidor, por favor entre em contato com o webmaster.

Error 404

127.0.0.1

Apache/2.4.2 (Win32) PHP/5.4.6

Lembrando que coloquei o index no easy php, dentro da pasta: www\my portable files

E executei o código no local host

Código completo com HTML e PHP :


<?php
$emailEnviar = "[email protected]";

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

if($_POST['enviar']){
mail("$emailEnviar", "$assunto", "
Nome: $nome
E-mail: $email
Assunto: $assunto

--
mensagem: $mensagem
");
}
?>



<div id="contact" >

<form id="contactForm" action="post" method="">

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

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

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

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

<input type="submit" name="enviar" value="Submit" id="submit" />

</form>
</div>

Link para o comentário
Compartilhar em outros sites

Crie uma página enviacontato.php e coloque esse código nela


<?php
if (($nome == "") || ($email == "") || ($telefone == "") || ($assunto == "") || ($mensagem == "")) {
//header("Location: [url]http://www.CAMINHO[/url] DA PÁGINA DE CONTATO.html");
//exit;
}

$recipient = "EMAIL QUE VAI RECEBER"; //email recipiente
$subject = "ASSUNTO"; //assunto da mensagem
$mailheaders = "From: $email \n";
$mailheaders .= "Reply-To: $nome $email\n";

$msg = "NOME....: $nome\n";
$msg .= "E-MAIL..: $email\n";
$msg .= "TELEFONE: $telefone\n";
$msg .= "ASSUNTO.: $assunto\n\n";
$msg .= "MENSAGEM: $mensagem\n\n";

mail($recipient, $subject, $msg, $mailheaders) or die ("Impossivel enviar email!");

?>

<HTML>
<BODY>


TEXTO DO ENVIO!


</BODY>
</HTML>

Na página do formulário, na tag <FORM, você coloca:

<form action="enviacontato.php" method="post">

Só altera as variáveis de acordo com o nome dos campos na página do formulário

Não tire os comentários.

Link para o comentário
Compartilhar em outros sites

Deu o seguinte erro :

Parse error: syntax error, unexpected 'assunto' (T_STRING) in C:\Program Files (x86)\EasyPHP-12.1\www\my portable files\contato.php on line 8

Na linha oito, tem isto :


$subject = "assunto"; //assunto da mensagem

Lembrando, sou iniciante em PHP(ok, em programação em geral =\)

Link para o comentário
Compartilhar em outros sites

  • Moderador

@joseRenato,

Procure no google e aqui no forum, sobre como usar a classe phpmailer.

A classe é gratuita e possui muitos tutoriais, alem de ser a melhor para enviar emails.

a função nativa do php é ruim e as vezes não funciona. Sinceramente acho que só estas perdendo tempo tentando implementar o envio do email com a função nativa.

Link para o comentário
Compartilhar em outros sites

  • Moderador

OLá,

Não, no easyPHP você não precisa mexer!

Podes setar diretamente no código php a porta e o host. uma dica para ver funcionando em localhost, é usar o host do gmail ou do hotmail setando os seguintes valores:


//Porta do servidor: 25,465 e 587
$mail->Port = 465;

//Servidor SMTP do Gmail ou usar o servidor do hotmail smtp.live.com
$mail->Host = "smtp.gmail.com";

//Define a autenticação como verdadeiro
$mail->SMTPAuth = true;

//Segurança
$mail->SMTPSecure = "ssl";

//Usuário do gmail ou hotmail
$mail->Username = "xxxxx";

//Variável que captura a senha para autenticar
$mail->Password = "xxxxxx";

Usando desta forma, você faz a autenticação pelo seu usuário do gmail ou hotmail.. permitindo assim testar envio de email em localhost.. :D

qualquer coisa posta seu código com o phpmailer.

Link para o comentário
Compartilhar em outros sites

Ok, agora o meu código ficou assim :

PHP :


<?php
require_once('class.phpmailer.php');

$erros = "";

if(empty($_POST['nome'])){
$erros .= "O nome deve ser preenchido.";
}

if(empty($_POST['email']) ){
$erros .= "O E-mail deve ser preenchido.";
}else{
$email = $_POST['email'];
eregi("([\._0-9A-Za-z-]+)@([0-9A-Za-z-]+)(\.[0-9A-Za-z\.]+)",$email,$match);
if(!isset($match)){
$erros .= "O e-mail informado é inválido.";
}
}

if(empty($_POST['mensagem'])){
$erros .= "A mensagem deve ser preenchida.";
}

if( empty($erros) ){

$phpmail = new PHPMailer();

$phpmail->IsSMTP(465); // envia por SMTP
$phpmail->Host = "smtp.gmail.com"; // SMTP servers
$phpmail->SMTPAuth = true; // Caso o servidor SMTP precise de autenticação
$phpmail->Username = "[email protected]"; // SMTP username
$phpmail->Password = "xxxxxxxxx"; // SMTP password

$phpmail->IsHTML(true);

$phpmail->From = $_POST['email'];
$phpmail->FromName = $_POST['nome'];

$phpmail->AddAddress("[email protected]");
$phpmail->Subject = $assunto;
$phpmail->Body .= "Nome: ".$_POST['nome']."";
$phpmail->Body .= "E-mail: ".$_POST['email']."";
$phpmail->Body .= "Telefone: ".$_POST['telefone']."";
$phpmail->Body .= "Assunto: ".$_POST['assunto']."";
$phpmail->Body .= "Mensagem: ".nl2br($_POST['mensagem'])."";

$send = $phpmail->Send();

if($send){
echo "A Mensagem foi enviada com sucesso.";
}else{
echo "Não foi possível enviar a mensagem. Erro: " .$phpmail->ErrorInfo;
}

}else{
echo $erros;
}
?>

HTML :


<form action="enviar.php" method="post">
<fieldset>
<legend>Formulário de Contato</legend>
<label for="nome">Nome</label>
<input name="nome" size="40" type="text" />
<label for="email">E-mail:</label>
<input name="email" size="40" type="text" />
<label for="telefone">Telefone</label>
<input name="telefone" size="20" type="text" />
<label for="assunto">Assunto</label>
<input name="assunto" size="40" type="text" />
<label for="mensagem">Mensagem</label>
<textarea cols="40" rows="4" name="mensagem"></textarea>
<input type="submit" value="Enviar" />
</fieldset>
</form>

Tá dando alguns erros...

Deprecated: Function eregi() is deprecated in C:\Program Files (x86)\EasyPHP-12.1\www\my portable files\enviar.php on line 14

Notice: Undefined variable: assunto in C:\Program Files (x86)\EasyPHP-12.1\www\my portable files\enviar.php on line 40

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

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

Link para o comentário
Compartilhar em outros sites

  • Moderador

Então..

esses erros são o seguinte:

Uma é que o eregi() está obsoleto no php 5, use preg_match() para expressoes regulares

o outro erro, é que você provavelmente só colocou o arquivo do phpmailer no seu diretorio.. coloque tambem no mesmo diretorio o arquivo class.smtp.php

e o ultimo é que a variavel assunto não existe.

então tente desta maneira:


<?php

require_once('class.phpmailer.php');
$nome = $_POST['nome'];
$telefone = $_POST['telefone'];
$mail = $_POST['email'];
$msg = $_POST['mensagem'];
$assunto = $_POST['assunto'];

$erros = "";

if(empty($nome)){
$erros .= "O nome deve ser preenchido.";
}

if(empty($mail) ){
$erros .= "O E-mail deve ser preenchido.";
}else{
$email = $mail;
preg_match("([\._0-9A-Za-z-]+)@([0-9A-Za-z-]+)(\.[0-9A-Za-z\.]+)",$email,$match);
if(!isset($match)){
$erros .= "O e-mail informado é inválido.";
}
}

if(empty($msg)){
$erros .= "A mensagem deve ser preenchida.";
}

if( empty($erros) ){

$mensagem = nl2br($msg);
$corpo = "
Nome: $nome
E-mail: $mail
Telefone: $telefone
Assunto: $assunto
Mensagem: $mensagem";


$phpmail = new PHPMailer();

$phpmail->IsSMTP(465); // envia por SMTP
$phpmail->Host = "smtp.gmail.com"; // SMTP servers
$phpmail->SMTPAuth = true; // Caso o servidor SMTP precise de autenticação
$phpmail->SMTPSecure = "ssl";
$phpmail->Username = "[email protected]"; // SMTP username
$phpmail->Password = "xxxxxxxxx"; // SMTP password

$phpmail->IsHTML(true);

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

$phpmail->AddAddress("[email protected]");
$phpmail->Subject = $assunto;
$phpmail->Body = $corpo;


$send = $phpmail->Send();

if($send){
echo "A Mensagem foi enviada com sucesso.";
}else{
echo "Não foi possível enviar a mensagem. Erro: " .$phpmail->ErrorInfo;
}

}else{
echo $erros;
}
?>

Não testei... mas ve aí

Link para o comentário
Compartilhar em outros sites

a classe class.smtp.php eu preciso só por junto ao diretório ? sem chamar ela nem nada ? se sim, já fiz, agora esta dando apenas um erro:

Warning: preg_match(): Unknown modifier '@' in C:\Program Files (x86)\EasyPHP-12.1\www\my portable files\enviar.php on line 20

O e-mail informado é inválido.

Link para o comentário
Compartilhar em outros sites

Boa noite.

Aconselho você ler um pouco sobre a documentação do PHP, suas dúvidas são triviais e podem ser respondidas com rápidas buscas no google.

Alguns são apenas warnings informando que as funções que você está utilizando foram descontinuadas e substituidas por novas. Outros são erros por falta de arquivos não existentes, No such file ....

Enfim, creio que o php.net tem tudo o que você precisa saber.

[]'s

Link para o comentário
Compartilhar em outros sites

  • Moderador

Bem olhando atentamente.. eu errei na expressão regular. pensando melhor, existe uma maneira mais adequada de validar o email. o exemplo só funciona no php 5.x


<?php
$email = '[email protected]';

if(filter_var($email, FILTER_VALIDATE_EMAIL)){
echo 'E-mail válido';
}else{
echo 'E-mail invalido';
}
?>

Veja que existe uma função nativa para filtrar emails e elas fazem a mesma coisa que você esta tentando fazer neste bloco onde esta em vermelho:


if(empty($mail) ){
$erros .= "O E-mail deve ser preenchido.";
}else{
$email = $mail;
[COLOR="Red"] preg_match("([\._0-9A-Za-z-]+)@([0-9A-Za-z-]+)(\.[0-9A-Za-z\.]+)",$email,$match);[/COLOR]
if(!isset($match)){
$erros .= "O e-mail informado é inválido.";
}
}

Fica a dica aí. qualquer coisa de uma lida sobre expressoes regulares no php, no manual que o amigo já mencionou.

Link para o comentário
Compartilhar em outros sites

Continuo com problemas =\

Segue meu script 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;

$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($mail);

Simplesmente não envia.

OBS : estou usando o local host do easyphp

Link para o comentário
Compartilhar em outros sites

  • Moderador

Amigo, olha bem seu código. você está setando a porta e o smtp do Gmail como eu havia deixado como exemplo.. e no seu username estas usando o hotmail.

procure no google a porta e o smtp do hotmail. por isso ele não está enviando.. pois não está fazendo autenticação nenhuma!!

e ainda está faltando setar o SSL, como eu havia deixado no exemplo anterior.. se eu não me engano o gmail e o hotmail precisam do SSL também.

adicione esta linha:

//Segurança

$mail->SMTPSecure = "ssl";

Link para o comentário
Compartilhar em outros sites

  • Moderador

Nesse caso, veja se os emails não estão sendo enviados para a lixeira. gmail e o hotmail são fã de fazerem isso... enviar não há mistério, se você fez do jeito que disse.. com suas devidas autenticações.. e os atributos necessários... !

eui mesmo só uso essa classe em todos meus projetos que precisam enviar emails :D

Link para o comentário
Compartilhar em outros sites

Olhei nos spans, na lixeira etc e nada...

meu código ficou assim :

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;
$mail->SMTPSecure = "ssl";

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

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

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

$mail->Subject = $assunto;

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

$mail->AddAddress($mail);

HTML :


<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>

Eu não preciso alterar nada no easy PHP ?

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!