Autor Tópico: Ajuda em script para envio de mail por php  (Lida 4528 vezes)

Offline t_e_e_m

  • Newbie
  • *
  • Mensagens: 0
  • Karma: +0/-0
    • Ver Perfil
Ajuda em script para envio de mail por php
« em: Junho 21, 2009, 09:52:52 pm »
Boas. num site estou a querer colocar um formulario para contacto atraves de php.

o formulario:

o codigo em html fica:

<form name="form1" method="post" action="email.php">
  <table width="100" border="0" cellspacing="0" cellpadding="0" align="center">
    <tr bgcolor="#F4F4F4">
      <td valign="top" width="100" nowrap><h3><font class="texto">Nome:</font></h3></td>
      <td>
        <input class="form_campos" type="text" name="nome" size="34">      </td>
    </tr>
    <tr bgcolor="#EFEFEF">
      <td valign="top" width="100" nowrap><h3><font class="texto">E-mail:</font></h3></td>
      <td>
        <input class="form_campos" type="text" name="email" size="34">      </td>
    </tr>
    <tr bgcolor="#F4F4F4">
      <td valign="top" width="100" nowrap><h3><font class="texto">Assunto:</font></h3></td>
      <td>
        <select class="form_campos" name="assunto">
          <option class="form_campos" value="Opinião" selected>Opinião</option>
          <option class="form_campos" value="Sugestão">Sugestão</option>
          <option value="Marcação">Marcação</option>
          <option class="form_campos" value="Reclamação">Reclamação</option>
          <option class="form_campos" value="Outros">Outros</option>
        </select>      </td>
    </tr>
    <tr bgcolor="#EFEFEF">
      <td valign="top" width="100" nowrap><h3><font class="texto">Mensagem:</font></h3></td>
      <td>
        <textarea class="form_campos" name="mensagem" cols="34" rows="4"></textarea>      </td>
    </tr>
    <tr bgcolor="#F4F4F4">
      <td colspan="2" valign="middle">
        

        <div align="center">
          <input class="form_botao" type="submit" name="Enviar" value="Enviar Mensagem">
          <input class="form_botao" type="reset" name="Limpar" value="Limpar">
        </div>      </td>
    </tr>
  </table>
</form>




um codigo php da configuração

config.php

<?
/*
* Configurações do formulário de Contato
* Altere a variavel $mail_destino para o seu email
*
*/

//Seu email, para onde irao as informações do formulário
$mail_destino      = "xxxxxxxx@sapo.pt";

//Mensagem de cabeçalho do email
$mail_header      = "Mensagem enviada pelo formulário do Formulário de Contato.";

//Mensagem para o email de resposta
$msg_reply         = " $nome, recebemos o seu email com o assunto $assunto. Obrigado por nos contactar";

//Mensagem de Erro
$msg_erro         = "Os campos <font color=$cor_site>Nome, Mensagem e E-mail</font> não podem estar em branco.";
?>

ficheiro php email_form.php

<form name="form1" method="post"  action="email.php"
  <table width="100" border="0" cellspacing="0" cellpadding="0" align="center">
    <tr bgcolor="">
      <td valign="top" width="100" nowrap><font class="texto">Nome:</font></td>
      <td>
        <input class="form_campos" type="text" name="nome" size="29">      </td>
    </tr>
    <tr bgcolor="">
      <td valign="top" width="100" nowrap><font class="texto">E-mail:</font></td>
      <td>
        <input class="form_campos" type="text" name="email" size="29">      </td>
    </tr>
    <tr bgcolor="">
      <td valign="top" width="100" nowrap><font class="texto">Assunto:</font></td>
      <td>
        <select name="assunto" class="form_campos">
          <option class="form_campos" value="Opinião" selected>Opinião</option>
          <option class="form_campos" value="Marcação">Marcação</option>
          <option class="form_campos" value="Sugestão">Sugestão</option>
          <option class="form_campos" value="Reclamação">Reclamação</option>
          <option class="form_campos" value="Sem assunto">Outros</option>
         
        </select>      </td>
    </tr>
    <tr bgcolor="">
      <td valign="top" width="100" nowrap><font class="texto">Mensagem:</font></td>
      <td>
        <textarea class="form_campos" name="mensagem" cols="29" rows="4"></textarea>      </td>
    </tr>
    <tr bgcolor= bgcolor="">
      <td colspan="2" valign="middle">
        

        <div align="center">
          <input class="form_botao" type="submit" name="Enviar" value="Enviar Mensagem">
          <input class="form_botao" type="reset" name="Limpar" value="Limpar">
        </div>      </td>
    </tr>
  </table>
</form>


 e por fim


Ficheiro email.php


<?php

include("config.php");

//Testa campos obrigatórios
if ($nome!="" and $mensagem!="" and $email!="")
   {
   $msg.="Nome: $nome\n";
   $msg.="E-mail: $email\n";
   $msg.="Assunto: $assunto\n";
   $msg.="$mensagem\n";
   
   if (@ mail ($mail_destino, $assunto, $msg, $mail_header))
      {
      //Imprimindo confirmação de envio
      echo
         "
         <html>
         <meta http-equiv=refresh content=5;URL=formcall.html></html>";
         echo "$nome, a mensagem:
 $mensagem
.Foi enviada com sucesso!
";
         echo "Obrigado!


         ";
      //Enviando mensagem de confirmação para o email do internauta
      @ mail ($email, "Re: $assunto", $msg_repy, $mail_header);
      }
      else
      echo
         "
         <meta http-equiv=refresh content=5;URL=formcall.html>
         </html><center>

<font color=red>
         Erro ao enviar e-mail!
         </font></center>
         ";
   }
else
   {
   //Alerta sobre os campos obrigatórios
   echo
      "
      

<center>
      $msg_erro


      <a href=\"java script:window.history.go(-1)\" class=\"links\">Preencha correctamente os campos.[/url]
      </center>
      ";
   }
?>


TAl ccomo podem constactar este codigo tem uma confrimação de preencimento dos campos nome, mensagem e e-mail. aqquando o preenchimento do fromulario apesar de ter toos os campos preenchidos, aparece sempre a informação de que  os campos em causa nao estao preenchidos, e nao é enviada a mensagem.

O que estarei a afzer mai, o servidor suporta php.

Offline Teotónio Ricardo

  • Administrator
  • Newbie
  • *****
  • Mensagens: 0
  • Karma: +0/-0
    • Ver Perfil
    • http://www.teotonio.pt
Ajuda em script para envio de mail por php
« Responder #1 em: Junho 21, 2009, 10:26:47 pm »
Por uma vista rápida, tu não estás a declarar a variável $nome...

Offline t_e_e_m

  • Newbie
  • *
  • Mensagens: 0
  • Karma: +0/-0
    • Ver Perfil
Ajuda em script para envio de mail por php
« Responder #2 em: Junho 21, 2009, 11:22:32 pm »
[quote name=\'cenourinha]Por uma vista rápida\' date=\' tu não estás a declarar a variável $nome...[/quote\']


Mais concretamente, onde pode ver essa falta??

Offline ORiOn16

  • Newbie
  • *
  • Mensagens: 0
  • Karma: +0/-0
    • Ver Perfil
    • http://libertytuga.com
Ajuda em script para envio de mail por php
« Responder #3 em: Junho 21, 2009, 11:24:55 pm »
Alguns servidores tem o envio de email desactivado no PHP. Onde é que estás?

Offline Teotónio Ricardo

  • Administrator
  • Newbie
  • *****
  • Mensagens: 0
  • Karma: +0/-0
    • Ver Perfil
    • http://www.teotonio.pt
Ajuda em script para envio de mail por php
« Responder #4 em: Junho 22, 2009, 12:26:11 am »
Citar
if ($nome!="" and $mensagem!="" and $email!="")

Isto nunca vai ocorrer, por as variáveis vão dar sempre vazio. Tens que dar um valor antes a variável.

$nome = $_POST['nome'];
$mensagem = $_POST['mensagem'];
$email = $_POST['email'];

Algo deste género, que vai associar as variáveis o valor do formulário.

Offline t_e_e_m

  • Newbie
  • *
  • Mensagens: 0
  • Karma: +0/-0
    • Ver Perfil
Ajuda em script para envio de mail por php
« Responder #5 em: Junho 22, 2009, 05:28:59 pm »
Citação de: ORiOn16
Alguns servidores tem o envio de email desactivado no PHP. Onde é que estás?


alojamentogratuito.com

Citação de: cenourinha
Isto nunca vai ocorrer, por as variáveis vão dar sempre vazio. Tens que dar um valor antes a variável.

$nome = $_POST['nome'];
$mensagem = $_POST['mensagem'];
$email = $_POST['email'];

Algo deste género, que vai associar as variáveis o valor do formulário.


entao sera aqui que tenho de alterar ???

//Testa campos obrigatórios
if ($nome!="" and $mensagem!="" and $email!="")
{
$msg.="Nome: $nome\n";
$msg.="E-mail: $email\n";
$msg.="Assunto: $assunto\n";
$msg.="$mensagem\n";

if (@ mail ($mail_destino, $assunto, $msg, $mail_header))
{

Offline t_e_e_m

  • Newbie
  • *
  • Mensagens: 0
  • Karma: +0/-0
    • Ver Perfil
Ajuda em script para envio de mail por php
« Responder #6 em: Junho 25, 2009, 09:39:36 am »
ninguem, tem mais nada para me ajudar???

Offline ilovehentai

  • Newbie
  • *
  • Mensagens: 0
  • Karma: +0/-0
    • Ver Perfil
    • http://
Ajuda em script para envio de mail por php
« Responder #7 em: Junho 25, 2009, 11:20:32 pm »
O que provavelmente se passa é que quem criou esse script tinha as register_globals on, se não souberes o que isso é vê aqui,
http://pt2.php.net/manual/en/ini.core.php#...egister-globals

Provavelmente o teu servidor tem e diga-se de passagem muito correctamente as register_globals OFF visto ser um buraco de todo tamanho na segurança, o que tens que fazer é meramente declarar as tuas variáveis passando os valores do POST do formulário

Podes saber mais acerca de POST aqui : -> http://www.w3schools.com/php/php_post.asp

Assim:

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

antes da validação que tens ou seja antes de

if ($nome!="" and $mensagem!="" and $email!="")


Para concluir o código que tens aí está pobremente construido, muito mau e com imensas falhas de segurança
Força aí
« Última modificação: Junho 25, 2009, 11:23:17 pm por ilovehentai »

Offline Teotónio Ricardo

  • Administrator
  • Newbie
  • *****
  • Mensagens: 0
  • Karma: +0/-0
    • Ver Perfil
    • http://www.teotonio.pt
Ajuda em script para envio de mail por php
« Responder #8 em: Junho 26, 2009, 12:04:19 am »
Exacto.

Offline t_e_e_m

  • Newbie
  • *
  • Mensagens: 0
  • Karma: +0/-0
    • Ver Perfil
Ajuda em script para envio de mail por php
« Responder #9 em: Junho 26, 2009, 07:12:26 pm »
Citação de: ilovehentai
O que provavelmente se passa é que quem criou esse script tinha as register_globals on, se não souberes o que isso é vê aqui,
http://pt2.php.net/manual/en/ini.core.php#...egister-globals

Provavelmente o teu servidor tem e diga-se de passagem muito correctamente as register_globals OFF visto ser um buraco de todo tamanho na segurança, o que tens que fazer é meramente declarar as tuas variáveis passando os valores do POST do formulário

Podes saber mais acerca de POST aqui : -> http://www.w3schools.com/php/php_post.asp

Assim:

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

antes da validação que tens ou seja antes de

if ($nome!="" and $mensagem!="" and $email!="")


Para concluir o código que tens aí está pobremente construido, muito mau e com imensas falhas de segurança
Força aí


Com essa alteração fica seguro??

Offline ilovehentai

  • Newbie
  • *
  • Mensagens: 0
  • Karma: +0/-0
    • Ver Perfil
    • http://
Ajuda em script para envio de mail por php
« Responder #10 em: Junho 26, 2009, 10:28:43 pm »
Fica meramente mais seguro em relação as register_globals, mas no fundo não, repara por exemplo a única validação que tens para o email é ver se o valor do campo de email não está vazio, quando fazes no if $email != "" a única coisa que tás a fazer é ver se o valor $email é diferente de vazio, significa que facilmente poderia colocar o que quiser no valor do email basta la colocar um simples "a" ou fazer um ataque por injecção no email , saber mais aqui -> http://www.bl0g.co.uk/20060214/php-mail-em...-to-send-email/

Cuidado com os cabeçalhos do e-mail

O que podes fazer para resolver isso mais simplesmente é fazer uma validação do valor do e-mail por expressão regular

Código: [Seleccione]
$regexp = "/^[^0-9][A-z0-9_]+([.][A-z0-9_]+)*[@][A-z0-9_]+([.][A-z0-9_]+)*[.][A-z]{2,4}$/";
if (preg_match($regexp, $email)) {
echo "Email address is valid.";
} else {
echo "Email address is <u>not</u> valid.";
}

Acima de tudo, estudar mais um pouco e procurares saber quais os problemas existem ao enviar mails pela função mail() do PHP

Offline t_e_e_m

  • Newbie
  • *
  • Mensagens: 0
  • Karma: +0/-0
    • Ver Perfil
Ajuda em script para envio de mail por php
« Responder #11 em: Junho 27, 2009, 10:09:03 am »
[quote name=\'ilovehentai]Fica meramente mais seguro em relação as register_globals\' date=\' mas no fundo não, repara por exemplo a única validação que tens para o email é ver se o valor do campo de email não está vazio, quando fazes no if $email != "" a única coisa que tás a fazer é ver se o valor $email é diferente de vazio, significa que facilmente poderia colocar o que quiser no valor do email basta la colocar um simples "a" ou fazer um ataque por injecção no email , saber mais aqui -> http://www.bl0g.co.uk/20060214/php-mail-em...-to-send-email/

Cuidado com os cabeçalhos do e-mail

O que podes fazer para resolver isso mais simplesmente é fazer uma validação do valor do e-mail por expressão regular

Código: [Seleccione]
$regexp = "/^[^0-9][A-z0-9_]+([.][A-z0-9_]+)*[@][A-z0-9_]+([.][A-z0-9_]+)*[.][A-z]{2,4}$/";
if (preg_match($regexp, $email)) {
echo "Email address is valid.";
} else {
echo "Email address is <u>not</u> valid.";
}

Acima de tudo, estudar mais um pouco e procurares saber quais os problemas existem ao enviar mails pela função mail() do PHP[/quote]

Então acha arriscado ter o formulario num site?
 
eu não percebop muito de php. Eu vou alterar o codigo e depois posso pedir para que me reveja o mesmo?

Offline t_e_e_m

  • Newbie
  • *
  • Mensagens: 0
  • Karma: +0/-0
    • Ver Perfil
Ajuda em script para envio de mail por php
« Responder #12 em: Julho 05, 2009, 08:49:26 pm »
Agora coloquei assim o codigo:


<?php

include("config.php");

//Testa campos obrigatórios
if ($nome!="" and $mensagem!="" and $email!="")

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

   if (@ mail ($mail_destino, $assunto, $msg, $mail_header))
      {
      //Imprimindo confirmação de envio
      echo
         "
         <html>
         <meta http-equiv=refresh content=5;URL=formcall.html></html>";
         echo "$nome, a mensagem:
 $mensagem
.Foi enviada com sucesso!
";
         echo "Obrigado!


         ";
      //Enviando mensagem de confirmação para o email do internauta
      @ mail ($email, "Re: $assunto", $msg_repy, $mail_header);
      }
      else
      echo
         "
         <meta http-equiv=refresh content=5;URL=formcall.html>
         </html><center>

<font color=red>
         Erro ao enviar e-mail!
         </font></center>
         ";
   }
else
   {
   //Alerta sobre os campos obrigatórios
   echo
      "
      

<center>
      $msg_erro


      <a href=\"java script:window.history.go(-1)\" class=\"links\">Preencha correctamente os campos.[/url]
      </center>
      ";
   }
?>







Mas ao enviar a mensagem aparece a seguointe mensagem:


Parse error: syntax error, unexpected '}' in /home/crbpt/public_html/email.php on line 34

Alguem me pode ajudar neste problema!! ainda nao consegui por isto de pé e estou mesmo a precisar de uma coisa deste genero.


Podem dar uma maozinha?
« Última modificação: Julho 05, 2009, 09:12:42 pm por t_e_e_m »

Offline Teotónio Ricardo

  • Administrator
  • Newbie
  • *****
  • Mensagens: 0
  • Karma: +0/-0
    • Ver Perfil
    • http://www.teotonio.pt
Ajuda em script para envio de mail por php
« Responder #13 em: Julho 05, 2009, 09:12:55 pm »
Acho que já te respondemos a tudo... deves analisar a informação que te foi passada e tirar proveito dela.

Offline t_e_e_m

  • Newbie
  • *
  • Mensagens: 0
  • Karma: +0/-0
    • Ver Perfil
Ajuda em script para envio de mail por php
« Responder #14 em: Julho 06, 2009, 09:28:27 am »
Citação de: cenourinha
Acho que já te respondemos a tudo... deves analisar a informação que te foi passada e tirar proveito dela.

E agradeço bastante a informação passado, mas tentei fazer o que ilovehentai e da o erro que citei em cima.

Offline ilovehentai

  • Newbie
  • *
  • Mensagens: 0
  • Karma: +0/-0
    • Ver Perfil
    • http://
Ajuda em script para envio de mail por php
« Responder #15 em: Julho 10, 2009, 11:11:21 pm »
Na linha 34 tens uma chaveta a mais ou então esquecestes do ponto e vírgula, confirma

Offline t_e_e_m

  • Newbie
  • *
  • Mensagens: 0
  • Karma: +0/-0
    • Ver Perfil
Ajuda em script para envio de mail por php
« Responder #16 em: Julho 10, 2009, 11:42:51 pm »
Tirei a chaveta e da erro na linha 25!! lol

Offline ilovehentai

  • Newbie
  • *
  • Mensagens: 0
  • Karma: +0/-0
    • Ver Perfil
    • http://
Ajuda em script para envio de mail por php
« Responder #17 em: Julho 11, 2009, 01:27:13 pm »
Moço precisas de começar pelo básico mesmo antes de te aventurar mais, quando inicias uma condição um IF por exemplo usas as chavetas para englobar o procedimento a tomar caso essa condição for verdadeira

assim temos

Código: [Seleccione]
if($condicao){

  //procedimento da condição 1 caso ela seja veradeira

}else if($condicao2){

  //caso a condição tiver sido falsa e a condição 2 verdadeira executa este procedimento

}else{


  // se nenhuma das anteriores for veradeiras executa o que tiver aqui

}


No teu caso o script é assim

Código: [Seleccione]
include("config.php");

//Testa campos obrigatórios
if ($nome!="" && $mensagem!="" && $email!=""){

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

if (@mail($mail_destino, $assunto, $msg, $mail_header))
{
//Imprimindo confirmação de envio
echo
"
<html>
<meta http-equiv=refresh content=5;URL=formcall.html></html>";
echo "$nome, a mensagem:<br> $mensagem <br>.Foi enviada com sucesso!<br>";
echo "Obrigado!<br><br>
";
//Enviando mensagem de confirmação para o email do internauta
@mail($email, "Re: $assunto", $msg_repy, $mail_header);
}else{
echo
"
<meta http-equiv=refresh content=5;URL=formcall.html>
</html><center><br><br><font color=red>
<b>Erro ao enviar e-mail!</b>
</font></center>
";
}

}else{

//Alerta sobre os campos obrigatórios
echo
"
<br><br><center>
$msg_erro <br><br>
<a href=\"java script:window.history.go(-1)\" class=\"links\">Preencha correctamente os campos.</a>
</center>
";

}

?>

Offline t_e_e_m

  • Newbie
  • *
  • Mensagens: 0
  • Karma: +0/-0
    • Ver Perfil
Ajuda em script para envio de mail por php
« Responder #18 em: Setembro 03, 2009, 06:46:43 pm »
Passado algum tempo cá estou eu, por questões de saude tive de me ausentar.

eu coloquei o codigo que o  ilovehentai me indicou corrigido, e mantem os erros! o que se passara?

Offline t_e_e_m

  • Newbie
  • *
  • Mensagens: 0
  • Karma: +0/-0
    • Ver Perfil
Ajuda em script para envio de mail por php
« Responder #19 em: Setembro 03, 2009, 06:47:44 pm »
apesar de completar todos os campos, da a informação que nao preenchi os dados.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49