[TUTORIAL]Formulário de E-mail em AS3 + PHP

Bom galera vou ensinar como se faz um simples formulário de e-mail em AS3 + PHP

Nesse tutorial eu tive ajuda do silverFox do iMasters para deixar meu código PHP melhor desenvolvido e com melhor configuração 🙂

Bom vamos ao que importa

A imagem base do meu e-mail está assim para quem quiser copiar o layout


Bom vamos lá

O que é necessário para esse e-mail
2 botões: um intânciado de btenviar outro btreset
4 campos de texto:
1 para nome intânciado nome.
1 para email instânciado email.
1 para mensagem intânciado mensagem.
1 para o status do e-mail intânciado stats.

Pronto já temos todos os campos necessários para o flash
Crie uma camada e coloque os 2 botões nela
Crie outra camada e coloque todos os campos de texto nela
Crie agora uma camada para o ActionScript:

Coloque o código na camada ActionScript:

//Criando as variáveis necessárias
var loader:URLLoader = new URLLoader();
var req:URLRequest = new URLRequest(“mail.php”); //coloque no lugar de mail.php o nome de seu formulário php no caso o meu foi mail.php
var variables:URLVariables = new URLVariables();
loader.dataFormat = URLLoaderDataFormat.VARIABLES;
req.method = URLRequestMethod.POST;
//fim

//Colocando o tabIndex para utilização de tab para mudar de campo
nome.tabIndex = 0;
email.tabIndex = 1;
mensagem.tabIndex = 2;
//fim

//Colocando o listener para verificar os campos
nome.addEventListener(Event.CHANGE, vererro);
email.addEventListener(Event.CHANGE, vererro);
mensagem.addEventListener(Event.CHANGE, vererro);
function vererro(event:Event):void {
if (stats.text.length>0) {
stats.text = “”;
}
}
//fim

//Colocando os botões
btenviar.addEventListener(MouseEvent.CLICK, sendForm);
btreset.addEventListener(MouseEvent.CLICK, resetForm);
//fim

//Valida o formulário e envia
function sendForm(evt:MouseEvent):void {
if (nome.text.length<=0) {
stats.text = “Por favor preencha o nome”;
} else if (!email.text.length || email.text.indexOf(“@”) == -1 || email.text.indexOf(“.”) == -1) {
stats.text = “Email inválido ou inexistente”;
} else if (mensagem.text==””||mensagem.text.length<=1) {
stats.text = “Por favor digite sua mensagem”;
} else {
stats.text =”Enviando e-mail”;
variables.nome = nome.text; //coloco dentrode variables os campos nome, email e mensagem.
variables.email = email.text;
variables.mensagem = mensagem.text;
req.data = variables; //Adiciono ao data do URLRequest as variáveis dos campos
loader.load(req); //Envio para o php
loader.addEventListener(Event.COMPLETE, receiveLoad); //Ao termino da leitura do php carrego a função de recebimento de variável.
}
}
//fim

//Pega a informação carregada do php
function receiveLoad(evt:Event):void {
if (evt.target.data.retval == 1) { //Verifico se a variavel de retorno retval está com o valor 1 ou 0 e aplico as fuções
stats.text = “E-mail enviado”;
} else {
stats.text=”Erro ao enviar o e-mail”;
}
}
//fim

//Reseta formulário
function resetForm(evt:MouseEvent):void {
nome.text=””;
email.text=””;
mensagem.text=””;
}
//Fim

Todas as funções já estão devidamente comentadas wink.gif

Agora vamos ao php:

if(isset($_POST[‘email’]) && isset($_POST[‘nome’]) && isset($_POST[‘mensagem’])){
$nome = $_POST[‘nome’];
$from = $_POST[‘email’];
$mensagem = $_POST[‘mensagem’];

$email_subject = “E-mail do site”; // Assunto do e-mail

$email_to = “seuemail@mail.com”; // pra onde vai o e-mail

$headers = “From: “.$from;

$semi_rand = md5(time());
$mime_boundary = “==Multipart_Boundary_x{$semi_rand}x”;

$headers .= “\nMIME-Version: 1.0\n” .
“Content-Type: multipart/mixed;\n” .
” boundary=\”{$mime_boundary}\””;

$email_message = “Mensagem:”. $mensagem. ”
“;
$email_message .= “\n\n–{$mime_boundary}\n”;
$email_message .= “Content-Type:text/html; charset=\”iso-8859-1\”\n”;
$email_message .= “Content-Transfer-Encoding: 7bit\n\n”;
$email_message .= “Esse e-mail foi enviado pelo site
“;
$email_message .= ”
Nome do cliente:
“. $nome. ”
“;
$email_message .= ”
E-mail do cliente:
“. $from .”
“;
$email_message .= ”
Mensagem:
” .$mensagem. ”
” . “\n\n”;

$ok = @mail($email_to, $email_subject, $email_message, $headers);

if($ok){
echo “&retval=1&”;
}else{
echo “&retval=0&”;
}
}
else {
echo “O e-mail não existe”;
}
?>

Espero que gostem
Bom proveito e bom trabalho

Para baixar clique aqui

Erro mais comum pelo que vejo nos comentários é o de URLVariables.decode()
Para isso podemos usar:
variables = new URLVariables();
variables.nome = nome.text;
variables.email = email.text+”&”;
variables.mensagem = mensagem.text+”&”;

Para arrumar.

Outra coisa que muitas pessoas se descambelam é AHHHHH não chega o email fica na tela o enviando eternamente.
1 – Crie um arquivo em HTML normal e coloque nome, email e texto e chame coloque o formulário apontado para mail.php… se a função mail funcionar vc tem que receber um email, caso contrario vai receber um erro em tua tela apontando onde está o problema.
2 – Cheque se seu servidor precisa de SMTP para enviar se precisar baixe a classe PHPMailer

Abraços e até a proxima

48 comentários sobre “[TUTORIAL]Formulário de E-mail em AS3 + PHP

  1. Oba amigão beleza, belo tutorial
    segui, conforme esta ai
    mas quando eu coloque ele no meu servidor ele da erro de e-mail
    não envia
    (meu servidor tem suporte a PHP )
    não sei oque pode estar acontecendo ???

    a unica alterção que eu fiz foi no PHP, que coloquei dois e-mails como destinatarios separados por ( , )virgula
    abração
    se vc puder me dar uma ajudinha
    pois ja tentei de varias formas

    meu e-mail é

    docestilo@hotmail.com

    abraços e fique com Deus

  2. Fala Bersek!

    Ótimo tutorial. Me ajudou bastante.

    Só estou com um problema!

    Fiz tudo direitinho, até copiei o código inteiro e botei no flash e no php, mas ele continua a dar no stats: “Erro ao enviar o e-mail”.

    Os campos do formulário estão todos certinhos com suas devidas instâncias e tudo mais…

    Se puder me ajudar, agradeço desde já..

    Abraços…

    • Se isso está chegando é pq algum dado não deve ta sendo repassado para o PHP

      Aqui:
      $ok = @mail($email_to, $email_subject, $email_message, $headers);
      if($ok){
      echo “retval=1″;
      }else{
      echo “retval=0″;
      }

      Eu testo se o ok é true ou não se for true… ele faz o retval = 1 se não ele faz o 0…
      Esse tipo de configuração de envio de e-mail pode não ser aceito pelo seu servidor.

      Verifique com eles se seu mail.php está correto com os parametros que eles informam

      Abraços

  3. Ola parabens pela sua iniciativa muito bom o tutorial,seria possivel re upar o exemplo para download, pois o mesmo esta fora do ar.
    Flw abração.

  4. Boas, desde já queria dar os parabéns por ter postado este código.
    Fiz tudo direitinho, acrescentei mais uns campos e alterei os layouts e no flash não me dá nenhum tipo de erro a não ser pelo output onde aparece esta mensagem:

    Error: Error #2101: The String passed to URLVariables.decode() must be a URL-encoded query string containing name/value pairs.
    at Error$/throwError()
    at flash.net::URLVariables/decode()
    at flash.net::URLVariables()
    at flash.net::URLLoader/onComplete()

    o status fica a “enviar e-mail” sendo que a fazer publish em html acontece o mesmo, fica o status “a enviar” a não se passa nada depois.

    Será por estar a trabalhar offline sem estar no servidor?
    Agradeço disponibilidade 🙂

    abraço

    • Exatamente, o código precisa estar online, afinal ele chama um código PHP, se ele não tiver esse php ele deixa de funcionar.
      Mas o que ta errado é que voce ta tentando passar uma string sem decodificar a mesma… é isso que está escrito no seu erro, de uma olhada de como você está passando esses dados.

      Abraços

  5. Eu apenas fiz copy paste e alterei os dados, inseri o mail onde estava indicado.
    Como descodifico a string? sou um bocado leigo nesta matéria :s primeir vez a utilizar alguma coisa feita em php. Se puder ajudar agradecia.

    Abraço

    • Mas, vc precisa colocar em um servidor php isso para testes… sem servidor n vai funcionar.
      num tem que alterar nada no php… soh colocar online e ver se funciona… baixa o exemplo altera o email e testa

      Abs

  6. Olá, seu formulario é otimo é bem como eu uso. Estou com um pequeno problema preciso fazer ele com a opção de enviar um arquivo em anexo. Seria possivel???

    Obraçoss

  7. berseck, seguinte… fiz o formulario em flash só que quando roda no dominio (online) funciona normal ex: http://www.meudominio.com.br/contato.swf mas quando coloco ele na minha pagina nao funciona de jeito nenhum… ex: http://www.meudominio.com.br (quando se clica em contatos) o que estou fazendo de errado? como pode funcionar sozinho (swf) e nao funcionar no site se é o mesmo script de envio em PHP e e mesmo arquivo swf????

    Vlw pela força galera e desculpe minha ignorancia!

    Marcelo.

  8. nao funcionou….

    stop();
    SystemUseCodePage = true
    loadVariables(‘http://www.meudominio.com.br/send_email2.php’, this, ‘POST’);
    message_status.text = “enviando, por favor aguarde…”;
    var i = 0;
    function check_status()
    {
    if( success == “yes” )
    {
    message_status.text = “Sua Mensagem foi enviada com Sucesso!”;

    PS: com aspas duplas funciona tb no swf…

    • Ta faltando informação cade o this.success ou object que vai ser responsavel pelo retorno?

      E meu tutorial não tem nada disso em AS 3… e o em AS 2 não é feito assim. Sugiro você baixar o exemplo e ver como funciona.

      Ta faltando o retorno.

      Abraços

  9. Desculpa… tai o completo…

    stop();
    SystemUseCodePage = true
    loadVariables(‘http://www.meudominio.com.br/send_email2.php’, this, ‘POST’);
    message_status.text = “enviando, por favor aguarde…”;
    var i = 0;
    function check_status()
    {
    if( success == “yes” )
    {
    message_status.text = “Sua Mensagem foi enviada com Sucesso!”;
    play();
    }
    else if( success == “no” )
    {
    message_status.text = “Sua Mensagem não pode ser enviada. Por Favor, tente novamente.”;
    gotoAndStop(“stop”);;
    }
    if( i >= 20 )
    clearInterval(interval_id);
    i++;
    }
    var interval_id = setInterval(check_status, 400);

    • você deve fazer assim:
      var obj:Object = new Object;
      obj.nome = nome.text
      // faça a mesma coisa para toda as variaveis que você quer enviar.

      obj.sendAndLoad(“http://www.meudominio.com.br/send_email2.php”, obj, ‘POST’);

      obj.onLoad = function()
      {
      if(obj.success == “yes”)
      // faz sua mensagem aqui;
      else
      // mensagem de erro aqui
      }

      No php faça
      echo “&success=yes”; e outra coisa com a resposta do mail.

      De uma lida aqui

      Abraços

  10. Boa noite, sou leigo no assunto de flahs+php e estou com um problema no meu formulário, já testei ele online e não vai, estou com o mesmo problema do André, onde aparece o seguinte erro:

    Error: Error #2101: The String passed to URLVariables.decode() must be a URL-encoded query string containing name/value pairs.
    at Error$/throwError()
    at flash.net::URLVariables/decode()
    at flash.net::URLVariables()
    at flash.net::URLLoader/onComplete()

    O que preciso fazer para que corrigir este erro? Obrigado.

    • Então como eu respondi ao outro colega, coloque o endereço do mail.php online e teste localmente e vc verá o que acontece.

      Baixe o exemplo colocado para download que você poderá ver como foi feito.
      Não há alterações no código em relação ao escrito.

      Abraços

      • Então já subi o arquivo e testei online, não funciona! =/
        Estou usando AS3 devido ao liquid layout, o menu, cabeçalho, rodapé estou puxando como movie clip, será que é por isso?

      • Não tem nada a ver… se você fez tudo direito ele tem chamar tudo corretamente. Agora se tiver um erro no script ele vai quebrar todo o resto.

        Aviso logo que meu blog tem problemas com aspas simples e aspas duplas, sinal de menos e as vezes X.
        De uma olhada nisso tudo.

        Abraços

      • Bommmm, fiz um formulário utilizando ASP e agora deu certo, não sei se é isso mais acho que meu plano de hospedagem não aceita o PHP =/

        Mesmo assim, fico grato por ter me respondido e tentado me ajudar.
        Abraços

  11. ola , estava usando seu tuto para um formulario que entra com um 3Dzinho no cs4, por isso tive que usar as3 , copiei seu codigo e fiz todos os passos indicados mas da um monte de erro … e minha animaçao trava .. poderia me ajudar? thanks

  12. entao.. o erro de ontem ja resolvi.. mas na hora de enviar da esse erro ;
    Error: Error #2101: A String passada para URLVariables.decode() deve ser uma string de consulta codificada em URL que contém pares de nome/valor.
    at Error$/throwError()
    at flash.net::URLVariables/decode()
    at flash.net::URLVariables()
    at flash.net::URLLoader/onComplete()

    o que esta acontecendo ?
    grato

    • Testou online???
      Pois só pode fazer URLVariables.decode quando ele recebe informação do servidor, caso contrario ele não consegue faz isso e devolve um erro.

      Pois ele não encontra funções necessárias para fazer isso localmente.

      Abraços

  13. Primeiro parabéns pela iniciativa, mas estou com o mesmo problema de alguns:

    Error: Error #2101: A String passada para URLVariables.decode() deve ser uma string de consulta codificada em URL que contém pares de nome/valor.
    at Error$/throwError()
    at flash.net::URLVariables/decode()
    at flash.net::URLVariables()
    at flash.net::URLLoader/onComplete()

    testei on line e nada. Fiz isso:

    if($ok){
    echo “&retval = 1&”;
    }else{
    echo “&retval = 0&”;
    }

    e continua dando o mesmo erro. Se puder ajudar.
    obrigado

  14. Opa, fiz isso e o erro parou, porém ainda assim a mensagem fica “enviando email”

    variables = new URLVariables();
    variables.nome = form_mc.nome_txt.text;
    variables.email = form_mc.email_txt.text+”&”;
    variables.telefone = form_mc.tel_txt.text+”&”;
    variables.mensagem = form_mc.coment_txt.text+”&”;

  15. Lá no arquivo de PHP, dependendo do email que eu coloco, não funciona.
    Todos os emails que tenho da Locaweb não funcionaram, o status fica “enviando email”.

    • Tente usando a PHPMailer
      Colocando o SMTP etc.

      Não tenho certeza se a LocaWeb funciona a função mail… da uma checada testando um PHP normal com ela

      Abraços

    • Teste como eu falei só a função mail que vc está usando em conjunto com esse FLASH mas especifico para ver o que ela retorna, colocando os dados manualmente no lugar dos $_POST

      Para ver se retorna
      Corretamente isso: echo “&retval=1&”;
      na tela

      Abraços

  16. Cara, pra ser sincero sou um 0 em PHP.
    Eu estou usando exatamento o arquivo que vc deixou para download. Só alterei o email para meu email da locaweb.

    Se eu uso outro funciona.

      • Exatamente… usando meu formulário só troquei o meu email e coloquei o seu
        Nem tive que alterar nada… baixei o código que coloquei para download… e troquei os emails.

        Abraços

  17. Olá prezado Thiago

    Cara só estou postando aqui pra agradecer mesmo a Deus, por ter colocado um cara no mundo como você. Muito obrigado mesmo pelo seu formulário que tu colocou para download. Muito bom.

    É que fiz um curso de flash, mas é aquela velha história, não funcionou o contato, quase deixei de lado e continuei no meu CSS, mas então apareceu você com seu formulário.

    Embora sei que tu faça isso de coração, me vejo na obrigação de lhe devolver com algo em troca.

    Podemos faze assim: sou Designer Gráfico, trabalho com desenvolvimento de todo tipo de publicidade, caso precise , entre em contato que faço ae pra ti o que tu precisar, mano, tu merece mais que isso, mas é o que posso fazer no momento pra retribuir ae seu atendimento.

    Então fica assim. Um abração e se precisar de algo estou na área.
    at+

    Jonatham F. Costa

Deixar mensagem para berseck Cancelar resposta