• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

fil79

função mail

9 mensagens neste tópico

boas

estou a usar o seguinte script para enviar mail que funciona perfeitamente :

<form action="envia.php" method=post> 
Nome: <input type=text name="nome" size=16> 
<br> 
Email: <input type=text name=email size=16> 
<br> 
Comentários: <textarea name=coment cols=32 rows=6></textarea> 
<br> 
<input type=submit value="Enviar"> 
</form>

<?php
   $corpo = "Formulário enviado\n"; 
   $corpo .= "Nome: " . $_POST["nome"] . "\n"; 
   $corpo .= "Email: " . $_POST["email"] . "\n"; 
   $corpo .= "Comentários: " . $_POST["coment"] . "\n"; 

   mail("algo@gmail.com","Formulário recebido",$corpo); 

   //agradeço pelo envio 
    echo"Obrigado por preencher o formulário.<br><a href='contactos.php'>Voltar</a>"; 

?> 

acontece que na caixa de entrada do correio destinatário aparece como Apache...existe alguma maneira de mudar este valor para uma variável inserida no formulário?Desde já agradeço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

acontece que na caixa de entrada do correio destinatário aparece como Apache...existe alguma maneira de mudar este valor para uma variável inserida no formulário?Desde já agradeço

:dontgetit:

Quererás dizer que na caixa de entrada o rementente aparece como Apache? Penso que o que te dava jeito era definir o campo "From" do mail que envias, o que tens que fazer com headers adicionais:

<?php
$to      = "algo@gmail.com";
$subject = "Formulário recebido";
$message = $corpo;
$headers = "From: ".$_POST["nome"]." <".$_POST["email"]."> \r\n";

mail($to, $subject, $message, $headers);
?>

Outra coisa, está-me a dar arrepios usar "user input" (como o conteúdo de $_POST) directamente, sem nenhum tipo de verificação ou validação. Assim de repente, se calhar dava para forjar os campos "nome" ou "email" para enviar headers adicionais... o que nunca é boa coisa.

Ainda mais uma coisa, algo me diz que se usares este script num site "aberto" vais ter que arranjar um mecanismo qualquer para evitar spam, hehe...  :cheesygrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

exacto...o remetente aparece como apache...em relação ao script este ainda vai levar alterações como a validação de campos,etc...só não sei como posso evitar spam..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

exacto...o remetente aparece como apache...em relação ao script este ainda vai levar alterações como a validação de campos,etc...só não sei como posso evitar spam..

CAPTCHA
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá,

exacto...o remetente aparece como apache...em relação ao script este ainda vai levar alterações como a validação de campos,etc...só não sei como posso evitar spam..

Como bem referiu o djthyrax o CAPTCHA é uma das melhores formas de evitares o SPAM, visto gerar uma imagem aleatória sempre que se acede à página do formulário.

Podes, de usar esta função:

function VerificaEmail($email){
  $valido = 1;
  // Saber se surgem caracteres de quebra de linha
  if (eregi("(\r|\n)", $email)) { $valido=0; }
  // Procura se existem caracteres (in)válidos no endereço de email
  if(!eregi("^[a-z0-9]+([_\\.-][a-z0-9]+)*" ."@"."([a-z0-9]+([\.-][a-z0-9]+)*)+"."\\.[a-z]{2,}"."$",$email)) { $valido=0; }

  return $valido;
}

Está escrito de forma simples para fácil compreensão.

No teu código basicamente terias que fazer:

<?php
function VerificaEmail($email){
  $valido = 1;
  // Saber se surgem caracteres de quebra de linha
  if (eregi("(\r|\n)", $email)) { $valido=0; }
  // Procura se existem caracteres (in)válidos no endereço de email
  if(!eregi("^[a-z0-9]+([_\\.-][a-z0-9]+)*" ."@"."([a-z0-9]+([\.-][a-z0-9]+)*)+"."\\.[a-z]{2,}"."$",$email)) { $valido=0; }

  return $valido;
}

   $corpo = "Formulário enviado\n"; 
   $corpo .= "Nome: " . $_POST["nome"] . "\n"; 
   $corpo .= "Email: " . $_POST["email"] . "\n"; 
   $corpo .= "Comentários: " . $_POST["coment"] . "\n"; 

   if (VerificaEmail($_POST["email"])) {
     $to      = "algo@gmail.com";
     $subject = "Formulário recebido";
     $message = $corpo;
     $headers = "From: ".$_POST["nome"]." <".$_POST["email"]."> \r\n"; 
     mail($to, $subject, $message, $headers);
    //agradeço pelo envio 
     echo"Obrigado por preencher o formulário.<br><a href='contactos.php'>Voltar</a>"; 
  } else {
    echo "ATENÇÃO: Deve inserir um email correcto!<br><a href='contactos.php'>Voltar</a>";
}
?> 

Faz a experiência, colocando email inválidos, ou até mais do que um no mesmo campo.

Mesmo assim, se tiveres oportunidade de usar CAPTCHA, sempre ficas mais "protegido" .

Cumprimentos,

LuBoc

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

está a funcionar tudo bem...só uma correcção na linha if (VerificaEmail($_POST["email"]) { esqueceste-te de fechar um parentesis ...de qualquer modo muito obrigado :cheesygrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

surgiu uma nova dúvida....o script faz o pretendido mas quando o texto tem acentos não faz a sua codificação...no html tenho isto:

<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />

não deveria o utf-8 reconhecer os acentos?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora