Ir para conteúdo
Fórum Script Brasil
  • 0

Formulário de email inteligente


Guest --Aprendiz --

Pergunta

Guest --Aprendiz --

Fala, galerinha.

Eu já aprendi a fazer formulário aqui pelo fórum, mas eu queria algo diferente.

O formulário que eu vi funciona de duas formas:

1 - Ele utiliza um serviço que redireciona as mensagens pra minha caixa postal particular.

Exemplo: Formulário colocado na ScriptBrasil. Caixas obrigatórias: 5 (nome, local, endereço, etc.). Se a pessoa não preencher tudo, dá página de erro. Se preencher tudo correto, dá página confirmando que foi enviado (ambas personalizadas).

Esse serviço que redireciona os formulários permite que eu veja o que cada pessoa preencheu via site ou na minha caixa postal.

O problema é que esse primeiro exemplo é bem cru, do tipo (eu posso zoar o formulário da ScriptBrasil colocando qualquer coisa lá e enviando 1.000 formulários em 1 minuto).

Esse serviço que redireciona os requests é indicado pra quem usa um host que não suporta PHP.

Seria:

<form method="POST" action="http://www.serviçoredirecionador.php">

2 - Mesma coisa, só que ao invés de utilizar um serviço à parte, o formulário é enviado via e-mail do usuário.

Seria:

<form action="mailto:meuemail@uol.com.br" method="post" enctype="text/plain">

Só que nenhum dos dois exemplos aí em cima prestam.

O primeiro não presta porque qualquer um pode zuar enviando muitos formulários seguidos, inclusive desligando Javascript, dá pra pessoa burlar a limitação de caracteres. E o segundo, abre automaticamente o Outlook Express do usuário, ao invés de mandar email direto pelo site.

Eu queria que funcionasse exatamente igual à desse site aqui:

http://anonymouse.org/anonemail.html

Como esse site funciona?

1 - Ele reconhece o que você coloca no campo "To" (Para). Se eu colocar algo que não tenha @ (sinal de arroba/email) ele não envia;

2 - Tem intervalo de flood de 1 minuto, ele verifica o IP (eu acho) de quem mandou e não deixa enviar de novo, nesse intervalo;

O problema é que não faço idéia de como colocar um sistema desses no meu site (hehe). Estava até pensando em linkar pro Anonymouse, se não tiver jeito.

Alguém tem idéia de como eu faço pra montar um sistema igual? E, claro, com mais opções que apenas "To" e "Subject" (Para/Assunto). O campo "To" poderia já ser preenchido automaticamente com meu email particular, pra pessoa não ter que preencher toda vez.

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0
Guest Aprendiz 2

Consegui fazer um código de formmail (não como eu disse), eu peguei o código de um site, e funciona assim:

- Na página do seu site, por ex. em HTML, você coloca o código do formulário, os campos que a pessoa tem que digitar (input type, textarea, etc.).

Você precisa criar um arquivo de extensão PHP que será "requisitado" por esse formulário pra enviar o email pro endereço desejado.

Exemplo, eu criei um formulário, plantei aqui no tópico e mandei o arquivo aprendiz.php enviar o formulário pro email: aprendiz@uol.com.br.

O email é enviado pelo servidor interno do host contratado, se esse suportar PHP.

Até aí tudo bem, mas agora surgiu um outro problema.

1 - Não dá mais pra obrigar o usuário a preencher todos os campos como antes. Dá mensagem de "formulário enviado com sucesso" mesmo se eu preencher 1 de 5 campos obrigatórios.

Isso é ruim, porque no primeiro exemplo lá em cima eu expliquei que existia uma página de erro customizável pro caso do usuário não preencher tudo (agora dá página de sucesso independente do que ele fizer).

Inclusive no Anonymouse também tem isso, você não consegue enviar email sem preencher todos os campos (e sem colocar arroba lá no campo de email).

2 - Preciso, como já disse, do tempo de flood (pra prevenir abusos).

Quem quiser ver como é esse código de formmail:

http://www.htmlstaff.org/ver.php?id=1988

Link para o comentário
Compartilhar em outros sites

  • 0

Para obrigar o usuário a preencher todos os campos, basta no action do script você testar se as variáveis estão vazias, ou seja, por exemplo:

$var1 = trim($_POST['campo1']);
$var2 = trim($_POST['campo2']);
$var3 = trim($_POST['campo3']);
if(empty($var1)){
echo "Var1 de preenchimento obrigatório";
}elseif(empty($var2)){
echo "Var2 de preenchimento obrigatório";
}elseif(empty($var3)){
echo "Var3 de preenchimento obrigatório";
}else{
//Aqui envia o e-mail...
}

Para controlar o envio excessivo, você pode usar um sistema de captcha ou criar uma sessão com o timestamp do momento em que é enviado o e-mail, assim toda vez que o cara tentar enviar você testa para ver se a sessão existe (se não existe está ok), ou se o timestamp gravado nela tem mais de 60 segundos de diferença em relação ao atual... o timestamp você pega com a função time().

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Aprendiz 3

Eu não queria um sistema de CAPTCHA, serviria o timestamp mesmo. Qual seria a linha de comando pra isso?

O arquivo PHP está correto desse jeito? Dá uma olhada por favor!

<?
//Esse é o texto da mensagem que será enviada ao seu e-mail. Sete o texto como desejar
$msg = "Mensagem enviada em ".date("d/m/Y").", seguem abaixo os dados:\n";
while(list($campo, $valor) = each($HTTP_POST_VARS)) {
    $msg .= ucwords($campo).": ".$valor."\n";
}
$var1 = trim($_POST['nome']);
$var2 = trim($_POST['email']);
$var3 = trim($_POST['endereco']);
$var4 = trim($_POST['comentarios']);
if(empty($var1)){
echo "Var1 de preenchimento obrigatório";
}elseif(empty($var2)){
echo "Var2 de preenchimento obrigatório";
}elseif(empty($var3)){
echo "Var3 de preenchimento obrigatório";
}elseif(empty($var4)){
echo "Var4 de preenchimento obrigatório";
}else{
//Aqui envia o e-mail...
}
//Configurações para que o PHP envie os dados ao seu e-mail. Sete o seguinte: Em "seu_email@seu_provedor.com.br" você deverá setar o seu e-mail, que é para onde serão enviados os dados preenchidos no formmail; Em "Dados enviados por formmail" você deverá setar o texto que irá como assunto do formmail
mail("aprendiz@uol.com.br","Fale conosco!",$msg,"From: $REMOTE_ADDR");

//Mensagem de confirmação que o formmail foi enviado com sucesso. Sete o texto como desejar
echo "Formulário enviado com sucesso!";
?>

Esse código PHP aí é o seguinte:

1 - Página faleconosco.html chamando faleconosco.php

2 - Campos obrigatórios: input type = text (nome, email e endereço);

3 - Campo obrigatório (textarea) - esse textarea tem nome também, se chama "comentarios";

Quando a pessoa clicar em Enviar, eu vou receber o recado direto na minha caixa postal, graças ao meu host.

Agora tem um problema ali. Se a pessoa não preencher tudo corretamente, ao invés de ir pra essa página de sucesso, ele não deveria ir pra outra dizendo que está errado? Ou senão, recusar logo na página faleconosco.html ?

Porque essa página faleconosco.php já possui o aviso de que o formulário foi enviado com sucesso, então se aparecer algum aviso de que o formulário foi preenchido errado, aí complica.

Eu queria que recusasse logo na tela principal, ou melhor ainda, em outra página, de erro, não de "formulário enviado com sucesso".

Link para o comentário
Compartilhar em outros sites

  • 0

Você tinha que ter colocado o envio no e-mail lá no else....

<?
//Esse é o texto da mensagem que será enviada ao seu e-mail. Sete o texto como desejar
$msg = "Mensagem enviada em ".date("d/m/Y").", seguem abaixo os dados:\n";
while(list($campo, $valor) = each($HTTP_POST_VARS)) {
    $msg .= ucwords($campo).": ".$valor."\n";
}
$var1 = trim($_POST['nome']);
$var2 = trim($_POST['email']);
$var3 = trim($_POST['endereco']);
$var4 = trim($_POST['comentarios']);
if(empty($var1)){
echo "Var1 de preenchimento obrigatório";
}elseif(empty($var2)){
echo "Var2 de preenchimento obrigatório";
}elseif(empty($var3)){
echo "Var3 de preenchimento obrigatório";
}elseif(empty($var4)){
echo "Var4 de preenchimento obrigatório";
}else{
//Configurações para que o PHP envie os dados ao seu e-mail. Sete o seguinte: Em "seu_email@seu_provedor.com.br" você deverá setar o seu e-mail, que é para onde serão enviados os dados preenchidos no formmail; Em "Dados enviados por formmail" você deverá setar o texto que irá como assunto do formmail
mail("aprendiz@uol.com.br","Fale conosco!",$msg,"From: $REMOTE_ADDR");

//Mensagem de confirmação que o formmail foi enviado com sucesso. Sete o texto como desejar
echo "Formulário enviado com sucesso!";
}
?>

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Aprendiz!

Opa, valeu amigo. Agora sim, deu certo.

Fica uma página mesmo pra erros e acertos, e tem a falha de informar apenas um campo que deixou de ser preenchido, na hipótese da pessoa esquecer mais de um, então coloquei uma mensagem do tipo "Você esqueceu de preencher um ou mais campos do formulário, volte e tente novamente".

Mas qual o código pro negócio de timestamp, mesmo? E ele verifica o tempo de flood por IPs ou por cookie?

Só falta o timestamp pra ficar perfeito.

Além disso, também queria saber qual o truque do Anonymouse pra ter exigido que o campo de e-mail fosse mesmo um e-mail.

Tipo, se você colocar qualquer coisa sem o símbolo de @ (arroba), ele recusa também.

Link para o comentário
Compartilhar em outros sites

  • 0

O negócio para saber se é um não e-mail -> http://scriptbrasil.com.br/forum/index.php?showtopic=91221

O negócio que eu te falei é parecido com um contador de usuários online... só que no seu caso ele teria que ficar apagando os registros que foram cadastradas a mais de um minuto, a lógica é essa -> http://scriptbrasil.com.br/forum/index.php?showtopic=98659

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652,1k
×
×
  • Criar Novo...