Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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:
/applications/core/interface/imageproxy/imageproxy.php?img=http://img690.imageshack.us/img690/3551/foto002q.jpg&key=cf05e936e2daa4b21fa7e15469764b208c88d1fe91473edc62080a2c07272aaf" alt="foto002q.jpg" />
Esta foto é do gerenciador do servidor web com o campo De como Nobody:
/applications/core/interface/imageproxy/imageproxy.php?img=http://imageshack.us/m/3/5232/foto001ub.jpg&key=7c4295782c6ee3e904ad5780c3646764ff46e6b015a2444efb4180a5468faee4" alt="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!!!!
/applications/core/interface/imageproxy/imageproxy.php?img=http://img864.imageshack.us/img864/7595/emailrecebidos.jpg&key=56d19cb47f052de05c08131e1517b8ec503bcd5c5e994e64de91765d3bccecce" alt="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!
>
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!
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
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#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();
#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;
}#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();
?>
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