Ir para conteúdo
kamada

Enviar dados de formulário para E-mail

Recommended Posts

Olá galera.

Sou iniciante em PHP e preciso da ajuda de vocês para enviar dados de um formulário em HTML para um e-mail.

Andei vendo algumas coisas na internet, e vi que é melhor desenvolver com a biblioteca phpmailer, porém não obtive sucesso.

 

Abaixo algumas dúvidas:

Como faço para enviar os dados do formulário para o gmail?

Quando é domínio próprio(meuemail@site.com.br) como consigo o usuário e a senha do servidor?

 

Abaixo os códigos:

 

Segue o formulários em HTML (o formulário esta sem estilização, pois no momento o importante é a funcionalidade do mesmo)

<html>
<head>
<title>TESTE CONTATO</title>
</head>
<body>
<form action="email.php" method="post">
	<label for="Nome">Nome:</label>
	<input type="text" name="Nome" size="35" /><br>

	<label for="Email">E-mail:</label>
	<input type="text" name="Email" size="35" /><br>

	<label for="Fone">Telefone:</label>
	<input type="text" name="Fone" size="35" /><br>

	<label for="Mensagem">Mensagem:</label>
	<textarea name="Mensagem" rows="8" cols="40"></textarea><br>

	<input type="submit" name="Enviar" value="Enviar" />
</form>
</body>
</html>

Segue o formulário PHP(se possível me ajudem corrigindo o que esta errado e porque esta errado)

<?php
$Nome		= $_POST["Nome"];	// Pega o valor do campo Nome
$Fone		= $_POST["Fone"];	// Pega o valor do campo Telefone
$Email		= $_POST["Email"];	// Pega o valor do campo Email
$Mensagem	= $_POST["Mensagem"];	// Pega os valores do campo Mensagem

// Variável que junta os valores acima e monta o corpo do email

$Vai 		= "Nome: $Nome\n\nE-mail: $Email\n\nTelefone: $Fone\n\nMensagem: $Mensagem\n";

require_once("phpmailer/class.PHPMailerAutoLoad.php");

define('GUSER', 'meuemail@gmail.com');	// <-- Insira aqui o seu GMail
define('GPWD', 'minhasenhadogmail');		// <-- Insira aqui a senha do seu GMail

function smtpmailer($para, $de, $de_nome, $assunto, $corpo) { 
	global $error;
	$mail = new PHPMailer();
	$mail->IsSMTP();		// Ativar SMTP
	$mail->SMTPDebug = 0;		// Debugar: 1 = erros e mensagens, 2 = mensagens apenas
	$mail->SMTPAuth = true;		// Autenticação ativada
	$mail->SMTPSecure = 'ssl';	// SSL REQUERIDO pelo GMail
	$mail->Host = 'smtp.gmail.com';	// SMTP utilizado
	$mail->Port = 587;  		// A porta 587 deverá estar aberta em seu servidor
	$mail->Username = GUSER;
	$mail->Password = GPWD;
	$mail->SetFrom($de, $de_nome);
	$mail->Subject = $assunto;
	$mail->Body = $corpo;
	$mail->AddAddress($para);
	if(!$mail->Send()) {
		$error = 'Mail error: '.$mail->ErrorInfo; 
		return false;
	} else {
		$error = 'Mensagem enviada!';
		return true;
	}
}

// Insira abaixo o email que irá receber a mensagem, o email que irá enviar (o mesmo da variável GUSER), 
//o nome do email que envia a mensagem, o Assunto da mensagem e por último a variável com o corpo do email.

 if (smtpmailer('contato@site.com.br', 'meugmail@gmail.com', 'Enviador', 'Assunto', $Vai)) {

	Header("location:http://www.dominio.com.br/obrigado.html"); // Redireciona para uma página de obrigado.

}
if (!empty($error)) echo $error;
?>

Desde já agradeço a atenção e a colaboração de todos.

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual é o problema exatamente? Dá erro? Qual?

 

Lembre-se de habilitar todas as exibições de erro, como mostrado neste tópico

 

Também deixe SMTPDebug em 1 em vez de 0. Vai ajudar no debug do código, até fazê-lo funcionar 100%

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade não aparece erro nenhum.
Quando eu clico em enviar, o código PHP aparece na minha tela do navegador rsrs'

 

Eu gostaria que me ajudassem a fazer funcionar o código pra enviar o e-mail.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro faça este teste:

 

crie um arquivo com este conteúdo:

 

<?php
phpinfo();
?>

 

salve-o como phpinfo.php (ou qualquer outro nome, desde que tenha a extensão ".php") e abra-o em seu servidor local

 

Deve aparecer algo como esta imagem:

 

phpinfo.jpg

 

Se continuar aparecendo o conteúdo do arquivo, o problema é com a instalação do PHP

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho o phpMailer uma boa opção para envio de emails, para configurar o phpMailer de acordo com o servidor de email da sua hospedagem você tem que ver com a hospedagem(rsrsrs), geralmente eles tem um blog ou algo do tipo com os dados para você configurar (geralmente a Locaweb, King Host, Hostgator tem!).

 

Mas acho que uma dica que pode te ajudar com o seu código atual é mudar o valor de $mail->SMTPAuth para false e verificar a porta, se não me engano, é possível que dessa forma nem seja necessário a senha.... mas de qq forma precisa verificar com a hospedagem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beraldo, fiz o que você disse e apareceu essa tela das informações do php instalado...

Creio que não seja problema no php, pois tentei com outros códigos que peguei na internet e não aparecia o código php ao clicar em enviar.

O código php acima esta correto?

Falta alguma coisa?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho o phpMailer uma boa opção para envio de emails, para configurar o phpMailer de acordo com o servidor de email da sua hospedagem você tem que ver com a hospedagem(rsrsrs), geralmente eles tem um blog ou algo do tipo com os dados para você configurar (geralmente a Locaweb, King Host, Hostgator tem!).

 

Mas acho que uma dica que pode te ajudar com o seu código atual é mudar o valor de $mail->SMTPAuth para false e verificar a porta, se não me engano, é possível que dessa forma nem seja necessário a senha.... mas de qq forma precisa verificar com a hospedagem.

Entrei em contato com o pessoal da hospedagem e pedi os dados smtp e pop e também as portas.

E já verifiquei também a questão do usuário.

O usuário pode ser usado o e-mail e senha que uso pra entrar no webmail.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É estranho você dizer que o phpinfo() funciona e o email.php exibe o código PHP na tela... é como se o PHP não fosse executado e o código fosse processado como .txt

 

Aparentemente, o código parece correto

Em vez de enviar o form, acesse o email.php diretamente pelo navegador. Deve aparecer erros, principalmente por causa de $_POST. Veja se ocorre isso ou se o código é exibido na tela de novo

Compartilhar este post


Link para o post
Compartilhar em outros sites

É estranho você dizer que o phpinfo() funciona e o email.php exibe o código PHP na tela... é como se o PHP não fosse executado e o código fosse processado como .txt

 

Aparentemente, o código parece correto

Em vez de enviar o form, acesse o email.php diretamente pelo navegador. Deve aparecer erros, principalmente por causa de $_POST. Veja se ocorre isso ou se o código é exibido na tela de novo

Apareceu os erros.

Segue a SS.

 

Vou tentar fazer o seguinte...

Pegar um outro formulário que tenho aqui e tentar implementar esse email.php nele.

O que você acha?fkxq1y.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

É estranho você dizer que o phpinfo() funciona e o email.php exibe o código PHP na tela... é como se o PHP não fosse executado e o código fosse processado como .txt

 

Aparentemente, o código parece correto

Em vez de enviar o form, acesse o email.php diretamente pelo navegador. Deve aparecer erros, principalmente por causa de $_POST. Veja se ocorre isso ou se o código é exibido na tela de novo

Como dito, troquei de formulário.

Segue SS(ignorem a ausência do charset utf-8 rsrs)

kzDJ19A.jpg

 

Segue o código em HTML do novo formulário.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">	
	<!-- Import Google Font - Yanone Kaffeesatz  -->	
	<link href='http://fonts.googleapis.com/css?family=Yanone+Kaffeesatz' rel='stylesheet' type='text/css' />
 
	<title> ..Seja nosso REPRESENTANTE COMERCIAL..</title> 
	<!--SCRIPT ROLAGEM DE TEXTO - INICIO-->
		<script type="text/javascript"> 
			<!--

			// (0=zero)fica direto, (1)rola uma vez. 
			var repeat=0
			var title=document.title
			var leng=title.length
			var start=1
			function titlemove() {
			titl=title.substring(start, leng) + title.substring(0, start)
			document.title=titl
			start++
			if (start==leng+1) {
			start=0
			if (repeat==1)
			return
			}
			//velocidade regule no 140
			setTimeout("titlemove()",140)
			}
			if (document.title)
			titlemove()

			//-->
		</script>
	<!--SCRIPT ROLAGEM DE TEXTO - FIM--> 

	<style type="text/css"> 
	
	* { margin: 0px; padding: 0px; }
	
	body { 
		margin: 0 auto; 
		background: #f5f5f5; 	
		color: #555;	 
		width: 800px; 
				
		/* make reference to the Yanone Kaffeesatz font */
		font-family: 'Yanone Kaffeesatz', arial, sans-serif;
	}
	
	h1 { 
		color: #555; 
		margin: 0 0 20px 0; 
	}	
		
	label {	
		font-size: 20px;
		color: #666; 
	}
	
	form, select { 
		float: left;
		border: 1px solid #ddd; 
		padding: 30px 40px 20px 40px; 
		margin: 75px 0 0 0;
		width: 715px;
		background: #fff;
				
		/* -- CSS3 - define rounded corners for the form -- */	
		-webkit-border-radius: 10px;
		-moz-border-radius: 10px;
		border-radius: 10px; 		
		
		/* -- CSS3 - create a background graident -- */
		background: -webkit-gradient(linear, 0% 0%, 0% 40%, from(#EEE), to(#FFFFFF)); 
		background: -moz-linear-gradient(0% 40% 90deg,#FFF, #EEE); 
		
		/* -- CSS3 - add a drop shadow -- */
		-webkit-box-shadow:0px 0 50px #ccc;
		-moz-box-shadow:0px 0 50px #ccc; 
		box-shadow:0px 0 50px #ccc;		 		
	}	
	
	fieldset, select { border: none; }
	
	#user-details { 
		float: left;
		width: 230px; 
	}
	
	#user-message { 
		float: right;
		width: 405px;
	}
	
	input, textarea, select { 		
		padding: 8px; 
		margin: 4px 0 20px 0; 
		background: #fff; 
		width: 220px; 
		font-size: 14px; 
		color: #555; 
		border: 1px #ddd solid;
		
		/* -- CSS3 Shadow - create a shadow around each input element -- */ 
		-webkit-box-shadow: 0px 0px 4px #aaa;
		-moz-box-shadow: 0px 0px 4px #aaa; 
		box-shadow: 0px 0px 4px #aaa;
		
		/* -- CSS3 Transition - define what the transition will be applied to (i.e. the background) -- */		
		-webkit-transition: background 0.3s linear;							
	}
	
	textarea {		
		width: 390px; 
		height: 175px; 		 		
	}
	
	input:hover, textarea:hover { 
		background: #eee; 
	}
		
	input.submit { 	
		width: 150px; 
		color: #eee; 
		text-transform: uppercase; 
		margin-top: 10px;
		background-color: #18a5cc;
		border: none;
		
		/* -- CSS3 Transition - define which property to animate (i.e. the shadow)  -- */
		-webkit-transition: -webkit-box-shadow 0.3s linear;
		
		/* -- CSS3 - Rounded Corners -- */
		-moz-border-radius: 4px; 
		-webkit-border-radius: 4px;
		border-radius: 4px; 
						
		/* -- CSS3 Shadow - create a shadow around each input element -- */ 
		background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#18a5cc), to(#0a85a8)); 
		background: -moz-linear-gradient(25% 75% 90deg,#0a85a8, #18a5cc);		
	} 
	
	input.submit:hover { 		
		-webkit-box-shadow: 0px 0px 20px #555;
		-moz-box-shadow: 0px 0px 20px #aaa; 
		box-shadow: 0px 0px 20px #555;	
		cursor:  pointer; 
	} 		
				
	</style> 
	
</head> 
 
<body> 
	
	<form name="formulario_contato" id="formulario_contato "method="post" action="email.php"> 
	
		<h1>Seja um representante da METTAG ETIQUETAS!</h1>
				
		<fieldset id="user-details">	
			
			<label for="nome">Nome:</label>
			<input type="text" name="nome" id="nome" value="" placeholder="Digite seu nome completo" /> 
		
			<label for="email">E-mail:</label> 
			<input type="email" name="email" value="" placeholder="Digite seu E-mail"  /> 
		
			<label for="fone">Fone:</label> 
			<input type="text" name="fone" id="fone" value="" placeholder="Digite seu telefone"  /> 
		
			<label for="regiao">Região que deseja atuar:</label> 
			<select name="estado"> 
				<option value="estado">Selecione o Estado</option> 
				<option value="ac">Acre</option> 
				<option value="al">Alagoas</option> 
				<option value="am">Amazonas</option> 
				<option value="ap">Amapá</option> 
				<option value="ba">Bahia</option> 
				<option value="ce">Ceará</option> 
				<option value="df">Distrito Federal</option> 
				<option value="es">Espírito Santo</option> 
				<option value="go">Goiás</option> 
				<option value="ma">Maranhão</option> 
				<option value="mt">Mato Grosso</option> 
				<option value="ms">Mato Grosso do Sul</option> 
				<option value="mg">Minas Gerais</option> 
				<option value="pa">Pará</option> 
				<option value="pb">Paraíba</option> 
				<option value="pr">Paraná</option> 
				<option value="pe">Pernambuco</option> 
				<option value="pi">Piauí</option> 
				<option value="rj">Rio de Janeiro</option> 
				<option value="rn">Rio Grande do Norte</option> 
				<option value="ro">Rondônia</option> 
				<option value="rs">Rio Grande do Sul</option> 
				<option value="rr">Roraima</option> 
				<option value="sc">Santa Catarina</option> 
				<option value="se">Sergipe</option> 
				<option value="sp">São Paulo</option> 
				<option value="to">Tocantins</option> 
			</select>
			
		
		</fieldset><!--end user-details-->
		
		<fieldset id="user-message">
		
			<label for="mensagem">Mensagem:</label> 
			<textarea name="mensagem" id="mensagem" rows="0" placeholder="Digite sua mensagem" cols="0"></textarea> 
		
			<input type="submit" value="Enviar" name="submit" class="submit" />	
		
		</fieldset><!-- end user-message -->
		 
	</form>

</body> 
</html> 

Agora parou de aparecer o código na tela do navegador, porém quando eu clico em "ENVIAR" não acontece nada, o navegador fica processando o pedido, como se entrasse num LOOP INFINITO...

Vocês podem observar no canto inferior esquerdo da foto do formulário que esta escrito "AGUARDANDO METTAG.COM.BR" e fica só naquilo.

Se quiser fazer o teste você mesmo, entre no site:

http://www.mettag.com.br e clique em "SEJA NOSSO REPRESENTANTE" preencha o formulário e teste.

O que pode ser?

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja se consegue fazer o debug dentro do if que redireciona para página de sucesso.

Por exemplo

 

 

if (smtpmailer('contato@site.com.br', 'meugmail@gmail.com', 'Enviador', 'Assunto', $Vai)) {

    var_dump($yourVar);
    exit;

}else{
 
    echo "Something is wrong!";
    exit;
 
}

 

Porque assim você consegue interromper o fluxo e debugar o programa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Retire o header(). Até encontrar o problema, não redirecione.

Use echo e var_dump(), como sugerido

 

Também dê echo em $error dentro da função. Você imprimiu o valor dela fora da função. Ela é uma variável local à função e só existirá dentro dela.

  • +1 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deixa assim e vê o que aparece:

<?php
$Nome   = $_POST["nome"]; // Pega o valor do campo Nome
$Fone   = $_POST["fone"]; // Pega o valor do campo Telefone
$Email    = $_POST["email"];  // Pega o valor do campo Email
$Mensagem = $_POST["mensagem"]; // Pega os valores do campo Mensagem

// Variável que junta os valores acima e monta o corpo do email

$Vai    = "Nome: $Nome\n\nE-mail: $Email\n\nTelefone: $Fone\n\nMensagem: $Mensagem\n";

require_once("phpmailer/class.PHPMailerAutoLoad.php");

define('GUSER', 'meuemail@gmail.com');  // <-- Insira aqui o seu GMail
define('GPWD', 'minhasenhadogmail');    // <-- Insira aqui a senha do seu GMail

function smtpmailer($para, $de, $de_nome, $assunto, $corpo) { 
  global $error;
  $mail = new PHPMailer();
  $mail->IsSMTP();    // Ativar SMTP
  $mail->SMTPDebug = 0;   // Debugar: 1 = erros e mensagens, 2 = mensagens apenas
  $mail->SMTPAuth = true;   // Autenticação ativada
  $mail->SMTPSecure = 'ssl';  // SSL REQUERIDO pelo GMail
  $mail->Host = 'smtp.gmail.com'; // SMTP utilizado
  $mail->Port = 587;      // A porta 587 deverá estar aberta em seu servidor
  $mail->Username = GUSER;
  $mail->Password = GPWD;
  $mail->SetFrom($de, $de_nome);
  $mail->Subject = $assunto;
  $mail->Body = $corpo;
  $mail->AddAddress($para);
  if(!$mail->Send()) {
    $error = 'Mail error: '.$mail->ErrorInfo; 
    echo $error;
    return false;
  } else {
    $error = 'Mensagem enviada!';
    return true;
  }
}

smtpmailer('contato@site.com.br', 'meugmail@gmail.com', 'Enviador', 'Assunto', $Vai);

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal consegui resolver o problema

Tinha vários errinhos, desde erros de sintaxe até erros semânticos.

Fora esses erros tive que trocar o phpmailer e deixar o require somente no phpmailerautoload.

require_once("phpmailer/PHPMailerAutoload.php");

Também alterei o SMTPSecure para TLS, pois estava SSL

$mail->SMTPSecure = 'tls'; 

Segue código PHP completo:

<?php
$nome   = $_POST["nome"]; // Pega o valor do campo Nome
$fone   = $_POST["fone"]; // Pega o valor do campo Telefone
$email    = $_POST["email"];  // Pega o valor do campo Email
$estado = $_POST["estado"]; // Pega o valor do campo estado
$mensagem = $_POST["mensagem"]; // Pega os valores do campo Mensagem

// Variável que junta os valores acima e monta o corpo do email

$Vai    = "Nome: $nome\n\nE-mail: $email\n\nTelefone: $fone\n\nMensagem: $mensagem\n\nRegião que deseja atuar: $estado";


require_once("phpmailer/PHPMailerAutoload.php");

define('GUSER', 'meuemail@gmail.com');  // <-- Insira aqui o seu GMail
define('GPWD', 'minhasenhagmail');    // <-- Insira aqui a senha do seu GMail

function smtpmailer($para, $de, $de_nome, $assunto, $corpo) { 
  global $error;
  $mail = new PHPMailer();
  $mail->IsSMTP();    // Ativar SMTP
  $mail->SMTPDebug = 0;   // Debugar: 1 = erros e mensagens, 2 = mensagens apenas
  $mail->SMTPAuth = true;   // Autenticação ativada
  $mail->SMTPSecure = 'tls';  // tsl REQUERIDO pelo GMail
  $mail->Host = 'smtp.gmail.com'; // SMTP utilizado
  $mail->Port = 587;      // A porta 587 deverá estar aberta em seu servidor
  $mail->Username = GUSER;
  $mail->Password = GPWD;
  $mail->SetFrom($de, $de_nome);
  $mail->Subject = $assunto;
  $mail->Body = $corpo;
  $mail->AddAddress($para);
  if(!$mail->Send()) {
    $error = 'Mail error: '.$mail->ErrorInfo; 
    echo $error;
    return false;
  } else {
    $error = 'Mensagem enviada!';
    return true;
  }
}

smtpmailer('contato@meudominio.com.br', 'meugmail@gmail.com', 'Enviador', 'Assunto', $Vai);

Header("location:http://www.obrigado.com.br"); // Redireciona para uma página de obrigado.

?> 

O código PHP acima esta 100% funcional, quem quiser usar, fique a vontade!

 

Obrigado a todos que ajudaram.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por RSN
      Boa Noite, 
      Gostaria de saber se existe a possibilidade de gravar além do id do option value outra variavel, para enviar via post.
      <div class="form-group"> <label class="col-md-4 control-label" for="txtgrupo">Tipo de Pagamento : </label> <div class="col-md-4"> <select id="" class="selectpicker" data-live-search="true" name="tipo_pagamento" > <?php $query = mysql_query("SELECT * FROM tipo_pagamento ORDER BY id ASC"); while($result = mysql_fetch_array($query)) { echo '<option value="'.$result["id"].'">'.$result["nome_tipo"].'</option>'; } ?> </select> </div> </div>  
    • Por JeanTDZ
      Eu tenho um form com algumas informações etc. O form envia pro banco de dados e tudo mais, funcional.
       
      Alguém teria algum exemplo que após o submit, o form é transformado em pdf/doc e direcionado para uma pasta/ftp já criada.?
    • Por jparenque
      Pessoal, estou precisando de um código em php que faça o seguinte:

      1- acesse uma url capture e grave o código fonte
      2- acesse novamente a mesma url, capture o código fonte e compare com o código da primeira captura
      3- se o código for igual ao da primeira captura ele acessa novamente e compara novamente
      4- se o código for diferente do da primeira captura ele tem que abrir o navegador Chrome e ir para essa url através do navegador.
      5- o fim do código deverá ser apenas quando ele acessar a url encontrar um conteúdo diferente do da primeira captura.

      Vou rodar o php na máquina local. O objetivo é monitorar uma página url específica com relação à uma alteração que ocorrerá. E quando ocorrer precisarei atuar nessa página imediatamente.

      Obrigado a todos!
    • Por reisleandro
      Alguém ai conhece um servidor php portável que possa rodar direto de um pendrive e que não apresente a mensagem de bloqueio do firewall (Imagem abaxio). O servidor embutido do php faz exatamente isso mas apenas como sigle thread. Queria uma solução um pouco mais robusta que pudesse rodar em qualquer maquina sem apresentar essa mensagem. Plataforma alvo Windows.
       

    • Por JOSELUISALD
      Bom dia. Em minha aplicação o cliente quer uma cópia de seu sistema localmente e remoto (hospedado). Tem como eu fazer a sincronização dos bancos de dados, para que tudo que seja feito localmente seja inserido automaticamente no banco remoto? Desde já obrigado.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.