Ir para conteúdo

POWERED BY:

Arquivado

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

rockman 2

Dificuldades com a função mail php

Recommended Posts

Olá pessoal!

 

Estou quebrando a cabeça com um formulario usando a função "mail" do php bom vou tentar esclarecer ao maximo o que está acontecendo comigo!

 

Os problemas são os seguintes:

 

1° Acontece que quando preencho os dados no formulário e recebo o email no meu gerenciador de emails (Mozilla Thunder Bird) no campo "De:" onde queria que aparecesse o email do usuário que preencheu o formulário e me enviou aparace a seguinte palavra "NOBODY" no campo Titulo tah tudo normal ou seja nada mais que o titulo do campo titulo do formulário!

 

 

Olhem a imagem:

 

foto002q.jpg

 

Esta foto é do gerenciador do servidor web com o campo De como Nobody:

 

foto001ub.jpg

 

2° Apesar de eu ter declarado em headers o "MIME" e o "Content-type" o titulo "Ip usuário:" a exemplo aparece assim "IP do usuário" mas os dados prenchidos vem com a acentuação perfeita vejam a imagem abaixo!!!!

 

emailrecebidos.jpg

 

OBS.

Percebi que se eu colocar um "$headers" para em seguida formatar os dados de resposta para o usuario o campo que normalmente recebe a variavel "$site = "contato@site.com.br";" no gerenciador de email tambem fica "NOBODY"!

e tambem fiz o teste mudando o charset para UTF 8 mas o problema persiste............!!!!

 

Pois bem abaixo o codigo PHP da parte encarregada do envio dos dados para min e para o usuário!

{
	//pega as variaveis por POST

	$nome 			= utf8_decode($_POST["campoNome"]);
	$email          	= utf8_decode($_POST["campoEmail"]);
	$fone   			= utf8_decode($_POST["campoFone"]);
	$assunto 		= utf8_decode($_POST["campoTitulo"]);
	$mensagem	= utf8_decode($_POST["campoMensagem"]);

   	//Variáveis para pegar dados do usuario

	$data      		= date("d/m/y"); 					//Pegar a data de envio do e-mail
	$ip      			= $_SERVER['REMOTE_ADDR'];   		//Pegar o ip do usuário
	$navegador	= $_SERVER['HTTP_USER_AGENT'];   	//Pegar o navegador do visitante
	$hora      		= date("H:i");   					//Pegar a hora com a função date

       			//Cabeçalhos do e-mail

       			$headers  = "MIME-Version: 1.0\r\n";
       			$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";/*para o envio com formatação HTML. Charset po ser utf-8 também*/

               	//Dados do sistema do usuário
				$conteudo  = "<p><h3><i>Dados do usuário:</i></h3><p/><strong>Data de envio do email:</strong> $data<br />";
				$conteudo .= "<strong>Hora de envio do email:</strong> $hora<br />";
       			$conteudo .= "<strong>Navegador do usuário:</strong> $navegador<br />";
       			$conteudo .= "<strong>IP do usuário:</strong> $ip<p>";

				//Dados de envio do formulário

				$conteudo .= "<p><h3><i>Dados enviados via formulário:</i></h3><p/><strong>Nome:</strong> $nome<br />";/*vai para o seu email o que foi digitado no campo "nome"*/
				$conteudo .= "<strong>Email:</strong> $email<br />";/*vai para o seu email o que foi digitado no campo "email"*/
				$conteudo .= "<strong>Telefone:</strong> $fone<br />";/*vai para o seu email o que foi digitado no campo "fone"*/
				$conteudo .= "<strong>Assunto:</strong> $assunto<br />";/*vai para o seu email o que foi digitado no campo "assunto"*/
				$conteudo .= "<strong>Mensagem:</strong> $mensagem<br />";/*vai para o seu email o que foi digitado no campo "mensagem"*/

       			$email_site = "contato@site.com.br";/*email de destino (do site)*/

				//Enviando o e-mail...
				mail("$email_site", "$assunto", "$conteudo", "$headers");

	//Variáveis para pegar e enviar o e-mail para o visitante com os seguintes dados
	$site      	= "contato@site.com.br"; 		//o e-mail que aparecerá na caixa postal do visitante
	$titulo		= "Contato Rockman 2";			//titulo da mensagem enviada para o visitante
	$msg 		= "$nome, Obrigado por entrar em contato conosco, em breve entraremos em contato";

  				//Envia o e-mail de auto-resposta para o visitante
  				mail("$email","$titulo","$msg","From: $site");

 

Enfim preciso de um aajudinha pra resolver este probleminha pessoal se alguem tiver sugestões ou quiser melhorar este codigo eu agradeço de coração rsrsr....

Obrigado e fico no aguardo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para a questão de exibir nobody no remetente, acrescente mais cabeçalhos assim:

 

$headers .= "From: $nome <$email>\r\n";

 

E para os problemas de caracteres, provavelmente você terá que converter para UTF-8 também o conteúdo, por exemplo:

 

mail($email_site, $assunto, utf8_encode($conteudo), $headers);

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para a questão de exibir nobody no remetente, acrescente mais cabeçalhos assim:

 

$headers .= "From: $nome <$email>\r\n";

 

E para os problemas de caracteres, provavelmente você terá que converter para UTF-8 também o conteúdo, por exemplo:

 

mail($email_site, $assunto, utf8_encode($conteudo), $headers);

 

[]'s

 

Paulo Valew pela dica , depois de ler sua dica fiz o seguinte:

 

Aqui retirei o uft_decode dos metodos $_POST:

    	
//pega as variaveis por POST
   	$nome    	= $_POST["campoNome"];
   	$email   	= $_POST["campoEmail"];
   	$fone    	= $_POST["campoFone"];
   	$assunto 	= $_POST["campoTitulo"];
   	$mensagem	= $_POST["campoMensagem"];

 

E tando no envio de mensagens para min quanto no email de auto resposta eu coloquei um utf_decode:

 

//Enviando o e-mail com os dados pra min...
mail($email_site,$assunto,utf8_decode($conteudo),$headers);

 

Aqui é para o usuário:

 

mail($email,$titulo,utf8_decode($msg),"From: $site");

 

Com isso o problema da acentuação se resolve!

 

Porem ainda continuo com o problema do campo como remetente "nobody" e pior se eu acrecentar a linha

$headers .= "From: $nome <$email>\r\n"; ou $headers .= "From:$email\r\n";

 

Ai nem recebo as informações do formulario e somente a confirmação vai para o usuário de que as informações chegaram até min!!!

 

Estou quebrando a cabeça com um formulario heheheh....

 

Bom Paulo se você souber o que pode ser e tiver outra sugestão eu agradeço ou se os usuarios do forum tiverem sugestões tambem aceito!

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

mail($email,$titulo,utf8_decode($msg),"From: $site");

 

Usando dessa forma, você está desconsiderando o cabeçalho que estava sendo utilizado antes.

Retirado do próprio manual do PHP:

 

// To send HTML mail, the Content-type header must be set
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

// Additional headers
$headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "\r\n";
$headers .= 'From: Birthday Reminder <birthday@example.com>' . "\r\n";
$headers .= 'Cc: birthdayarchive@example.com' . "\r\n";
$headers .= 'Bcc: birthdaycheck@example.com' . "\r\n";

 

Se observarmos o primeiro comentário, veremos que não é possível enviar mensagens com a função mail sem definirmos um Content-Type no cabeçalho da mensagem.

:seta: "To send HTML mail, the Content-type header must be set"

 

Outra coisa importante: o remetente que você está definindo no cabeçalho em From "deve" ser um e-mail válido, interno do servidor (não precisa existir, somente ser válido).

Exemplo: :seta: Domínio: teste.com.br :seta: E-mail válido: qualquer-coisa@teste.com.br

Esse tópico pode ajudar: http://forum.imasters.com.br/topic/429394-form-de-contato-server-error-500/

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá pessoal!

 

Depois de quebrar a cabeça com o php eu me rendi a classe phpmailer usei parte do codigo que estava utilizando juntamente como o phpmailer e resolvi o problema!

Abaixo estou postando o codigo sem nada ada + acrecentado ou seja (perfumarias programativas que adicionei depois de testar ele como está)!

 

Usei conecção SMTP ou seja atentar para as linhas "servidor SMTP" e Senha como tambem seu email o restante é só ligar as variaveis metoso $_POST com os campos do fotmularios EX "<p>Destinatário (Nome):<br><input type="text" name="nome" size="35"></p>" já no codigo do formulario $nomeusuario = $_POST['nome'];

 

Obrigado a todos!

 

<?php
#Carregamos a biblioteca phpmailer
require("class.phpmailer.php");

#resgatando os dados passados pelo form
$nomeusuario	= $_POST['nome'];
$emailusuario   = $_POST['email'];
$foneusuario	= $_POST['fone'];
$assunto    	= $_POST['assunto'];
$mensagem   	= $_POST['msg'];

#Variáveis para pegar dados do usuario
$data			= date("d/m/y");         			//Pegar a data de envio do e-mail
$ip				= $_SERVER['REMOTE_ADDR'];   		//Pegar o ip do usuário
$navegador		= $_SERVER['HTTP_USER_AGENT'];   	//Pegar o navegador do visitante
$hora			= date("H:i");           			//Pegar a hora com a função date

#Dados do sistema do usuário
$conteudoDados  = "<p><h3><i>Dados do usuário:</i></h3><p/>";
$conteudoDados .= "<strong>Data de envio do email:</strong> $data<br />";
$conteudoDados .= "<strong>Hora de envio do email:</strong> $hora<br />";
$conteudoDados .= "<strong>Navegador do usuário:</strong> $navegador<br />";
$conteudoDados .= "<strong>IP do usuário:</strong> $ip<p>";

#Dados de envio do formulário
$conteudoMsg	= "<p><h3><i>Dados enviados via formulário:</i></h3><p/>";
$conteudoMsg   .= "<strong>Nome:</strong> $nome<br />";
$conteudoMsg   .= "<strong>Email:</strong> $email<br />";
$conteudoMsg   .= "<strong>Telefone:</strong> $fone<br />";
$conteudoMsg   .= "<strong>Assunto:</strong> $assunto<br />";
$conteudoMsg   .= "<strong>Mensagem:<p></strong> $mensagem<br />";

#Instanciamos a classe
$mail = new PHPMailer();

#na classe, há a opção de idioma, setei como br
$mail->SetLanguage("br");

#Definimos o envio via SMTP
$mail->IsSMTP();

# Ativa o envio de e-mails em HTML
$mail->IsHTML(true);

# Codificação 
$mail->CharSet = 'utf-8'; // Charset da mensagem (opcional)

# Quebra de linha
$mail->WordWrap = 50; // Definição de quebra de linha

#Configuramos a conexão ao SMTP
$mail->Host = "**************"; // Endereço do servidor SMTP
$mail->SMTPAuth = false; // Autenticação se necessario!!!

#Configuramos o login e senha de conexão a conta SMTP
$mail->Username = "seu_email.com.br"; // Usuário do servidor SMTP
$mail->Password = "**********"; // Senha do servidor SMTP

#Definimos o remetente
$mail->From = "$emailusuario"; // Variavel do metodo post que pega o email do formulário

#Definimos o nome do remetente
$mail->FromName = "$nomeusuario"; // Variavel do metodo post que pega o nome do formulário

#Definimos o destinatário
$mail->AddAddress("contato@sei_la.com.br"); // Destino da mensagem
//$mail->AddCC('ciclano@site.net', 'Ciclano'); // Com Copia
//$mail->AddBCC('fulano@dominio.com.br', 'Fulano da Silva'); // Cópia Oculta

#Endereço de resposta (reply = replica).
$mail->AddReplyTo("$emailusuario","Contato "); // Email e titulo que irá aparecer para o min!

#Definimos o assunto do e-mail
$mail->Subject = "$assunto";// Variavel do metodo post que pega o assunto do email recebido 

#Definimos a mensagem do e-mail
$mail->Body  =  "$conteudoDados";
$mail->Body .=  "$conteudoMsg";


#Se a mensagem for enviada mostra mensagem de "sucesso" senão "erro"...
if(!$mail->Send()) {
echo "Erro: " . $mail->ErrorInfo;
}
else 
{
echo "E-mail enviado!";

#Variáveis para pegar e enviar o e-mail para o visitante com os seguintes dados
$site  		= "seu_email.com.br"; //o e-mail que aparecerá na caixa postal do visitante
$assunto  	= 'Auto Confirmação Contato';
$mensagem 	= '<strong>obrigado por entrar em contato conosco em breve faremos contato com você</strong>';
$header   	= "MIME-Version: 1.0\n";
$header  	.= "Content-type: text/html; charset=iso-8859-1\n";
$header  	.= "From: $site";

mail($emailusuario, $assunto, utf8_decode($mensagem), $header);
}

#Limpa os destinatários
$mail->ClearAllRecipients();
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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