Cristalab

Envío de emails en Flash CS3 con PHP y Actionscript 3

Por: Sr. QUHO + 05.09.2007

La gran mayoría de nosotros requerimos en nuestras webs incluir formularios de envío de correo, ya sea para contacto, reservas, etc...

He buscado esto por la Web, pero no lo he encontrado, al menos a mi gusto, o solo en Flex (el cual no manejo actualmente).

Aquí muestro de manera muy sencilla (apto para principiantes), cómo enviar un correo electrónico y recibir respuesta en Flash de confirmación del envío.


Nombres de los campos Input:

Nombres de los campos Dynamic:

Nombre del botón:

Se verá de esta forma:


Ahora solo hay que agregar en el primer frame (donde está el formulario) este código AS3 (dentro del código va una pequeña explicación):

Código :

//Función que se ejecuta al presionar el botón btEnviar.
function irAEnviar(event:MouseEvent):void {
   
   //Creamos misVariables la cual contendrá nuestros campos.
   var misVariables:URLVariables = new URLVariables();
   
   //Definimos los campos y les agregamos el valor de las cajas de texto.
   misVariables.nombre = txtNombre.text;
   misVariables.apellidos = txtApellidos.text;
   misVariables.email = txtEmail.text;

   //Creamos la instancia pedido que contendrá los datos de envío.
   var pedido:URLRequest = new URLRequest();

   //Pasamos los datos al pedido, el método de envío y le cargamos misVariables.
   pedido.url = "http://www.tuDominio.com/correo/enviarCorreo.php";
   pedido.method = URLRequestMethod.POST;
   pedido.data = misVariables;

   //Creamos la instancia cargador.
   var cargador:URLLoader = new URLLoader();

   //Damos formato de Variables a cargador .
   cargador.dataFormat = URLLoaderDataFormat.VARIABLES;

   //Listener de cargador que espera se COMPLETE la carga para ejecutar la función completeHandler.
   cargador.addEventListener(Event.COMPLETE, completeHandler);

   //intentamos cargar el pedido y si hay algún error lo detectamos
   try {
      cargador.load(pedido);
   } catch (error:Error) {
      lbError.text= "Error en el envío";
   }
   
   //Aquí obtenemos la respuesta del PHP para confirmar en flash que todo salió bien o mal.
   function completeHandler(event:Event):void {
      lbRespuesta.text=event.target.data.respuestaPHP;
   }
}

//Listener que está esperando el Click en el btEnviar para ejecutar la función irAEnviar
btEnviar.addEventListener(MouseEvent.CLICK, irAEnviar);

Guardamos nuestro archivo flash con el nombre Correo (o el que quieran) y presionamos F12 para publicarlo.

Ahora hay que crear el archivo PHP que enviará el mail (Es la dirección que encuentran en el código Actionscript de arriba):

Código :

<?php
    $cuerpo = "Nombre: "    . $HTTP_POST_VARS["nombre"] . "\n"
          . "Apellidos: " . $HTTP_POST_VARS["apellidos"] . "\n"
          . "Email: "    . $HTTP_POST_VARS["email"];
   
   if(mail("tuCorreo@recibir.com","Forma de contacto",$cuerpo)){
      echo "respuestaPHP=Mensaje enviado";
   }else{
      echo "respuestaPHP=Error, mensaje no enviado";
   };
?>

Lo guardamos con el nombre enviarCorreo.php

Ahora solo subimos los archivos al servidor (hay que subirlos a un servidor que pueda enviar correo, si no, no funcionará), el HTML que contiene el SWF, el SWF y el PHP.

Capturamos datos y presionamos enviar, debe verse de la siguiente manera:



¡Listo, tenemos nuestro formulario de envío!

Ahora solo nos resta (si deseamos) cambiar los campos por los que necesitamos y agregarle las validaciones necesarias.

Etiquetas actionscript_3 php

Comentarios | Enviar un comentario
hey muchas gracias lo voy a probar..!ª
Por: jripper
Muy interesante, de hecho ando buscando un server que soporte php para poder cargarlo, ya que en geocites no me da nada, pero en fin.
Me gusto la manera tan digerible en la que explicates el problema, pero hasta no ver no creer je je je. suerte y grax, cuando tenga los resultados te informaré grax.
Por: jashiser
Pruebalo y avisas, verás que es así de fácil Sonrisa
Por: Sr. QUHO
1084: Error de sintaxis: se esperaba identifier antes de function.

por que me sale ese error algo hize mal
??????????

ayuda por favor
Por: aprendis_blog
YA SOLUCIONES ESE ERROR AHORA LO QUE ME DICE ES ESTO
1120: Acceso a una propiedad lbError no definida.
1120: Acceso a una propiedad lbRespuesta no definida.
AHORA QUE ESTARE HACIENDO MAL??????
Por: APRENDIS_blog
Hola, encontre este tutorial muy util, pero sabes ya lo hice todo, tal cual, pero me sale el siguiente error:

TypeError: Error #2007: El valor del parámetro text debe ser distinto de null.
at flash.text::TextField/set text()
at MethodInfo-1()
at flash.events::EventDispatcher/flash.events:EventDispatcher::dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/flash.net:URLLoader::onComplete()

Hice el siguiente formulario:

http://www.aure-quim.com/Formulario/formulario.html

Lo llenas y a la hora de mandar, sale ese error, aunque si manda el mensaje al correo asignado, sale esa ventana y no te dice si se envio o no.

Espero que me puedan ayudar, gracias.
Por: Alfredo_blog
Hola, muy bueno el tuto! pero debo tener algo mal porque me da el mismo error que a Alfredo_blog, saben que puede ser?

TypeError: Error #2007: El valor del parámetro text debe ser distinto de null.
at flash.text::TextField/set text()
at MethodInfo-213()
at flash.events::EventDispatcher/flash.events:EventDispatcher::dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/flash.net:URLLoader::onComplete()


Gracias y slds!
Por: Creattive
Disculpen, pero continuando con el anterior error....

Si comento// la siguiente linea

Código :


function completeHandler(event:Event):void {
      //lbRespuesta.text=event.target.data.respuestaPHP;
   }

el error desaparece por lo que entiendo que no esta llegando la respuesta desde php. Es asi?

Yo lo estoy probando sobre xampp (localHost), voy a ver sobre un server "real", pero no tengo muchas esperanzas... alguna ayudita?

Gracias.
Por: Creattive

Creattive :


Yo lo estoy probando sobre xampp (localHost), voy a ver sobre un server "real", pero no tengo muchas esperanzas... alguna ayudita?


Sr. QUHO :


Ahora solo subimos los archivos al servidor (hay que subirlos a un servidor que pueda enviar correo, si no, no funcionará), el HTML que contiene el SWF, el SWF y el PHP.

Por: Sr. QUHO
Un favor soy inexperto en esto pero curioso, alguien me puede decir como hago para poner el codigo en flash, a que opcion voy o cuales son los pasos a seguir. De antemano agradezco por su ayuda y sorry por la ignorancia.
Por: u2alej_blog
Muy buen tutorial, a mi si me funciona lo de enviar el correo, el unico problema que tengo es que parece que no esta recibiendo la respuestaPHP y cuando le doy click al boton de submit/enviar no recibo ninguna repuesta en mi pagina aunque si me envia el correo. Algun consejo?
Gracias!
Por: Renata_blog
Pon cuidado en esta parte en Flash:

//Listener de cargador que espera se COMPLETE la carga para ejecutar la función completeHandler.
cargador.addEventListener(Event.COMPLETE, completeHandler);

//intentamos cargar el pedido y si hay algún error lo detectamos
try {
cargador.load(pedido);
} catch (error:Error) {
lbError.text= "Error en el envío";
}

//Aquí obtenemos la respuesta del PHP para confirmar en flash que todo salió bien o mal.
function completeHandler(event:Event):void {
lbRespuesta.text=event.target.data.respuestaPHP;
}



Y en esta parte en el PHP:
if(mail("tuCorreo@recibir.com","Forma de contacto",$cuerpo)){
echo "respuestaPHP=Mensaje enviado";
}else{
echo "respuestaPHP=Error, mensaje no enviado";
};


Revisa bien los nombres de tus variables y toda la sintaxis.

Saludos!
Por: Sr. QUHO
Muchas Gracias. El problema por el cual no estaba recibiendo la respuesta de PHP fue que cree el archivo de PHP usando el editor de Dreamweaver y por default agrega codigo de HTLM, lo que hice fue que inclui el codigo de PHP dentro del body del HTML y eso estaba impidiendo que recibiera respuestaPHP en flash. La solucion fue eliminar el codigo de HTML y dejar el codigo de PHP solo. Mi forma ya funciona y me quedo muy claro gracias al tutorial como se comunican Flash y PHP. Gracias otra vez!
Por: Renata_blog
Por nada, para eso estamos Guiño
Por: Sr. QUHO
Muy buena la explicacion, soy princiapiante en esto asi es que se me presenta una duda:
Si quiero agregar un campo donde el usuario pueda escribir el texto del mail como hago? Muchas gracias.
Por: Vero_blog
Inserta un caja mas de texto y la agregas en el AS en esta parte:

Código :

//Definimos los campos y les agregamos el valor de las cajas de texto.
   misVariables.nombre = txtNombre.text;
   misVariables.apellidos = txtApellidos.text;
   misVariables.email = txtEmail.text;
   misVariables.mensaje= txtMensaje.text;


Y la agregas en el PHP:

Código :

<?php

    $cuerpo = "Nombre: "    . $HTTP_POST_VARS["nombre"] . "\n"

          . "Apellidos: " . $HTTP_POST_VARS["apellidos"] . "\n"

          . "Email: " . $HTTP_POST_VARS["email"] . "\n"

          . "Mensaje: "    . $HTTP_POST_VARS["mensaje"];

Por: Sr. QUHO
mira muy bueno el tuto pero cuando lo hago en flash me tira el erro (es obvio xq no llega al dominio)pero una vez q lo subo hago click y no hace nada, no lo envia ni nada y segun lo q veo esta todo bien
te dejo mi mail x las dudas
emmanuelbolli@hotmail.com
Por: Emmanuel_blog
Lo primero que hay que verificar, es que tu servidor tenga la capacidad de enviar correos.
Prueba accediendo directamente (por la URL) a tu archivo .PHP (el que envía el correo) y luego revisa tu correo. Si tu servidor funciona, debes recibir un mail.

también recuerda que en:
if(mail("tuCorreo@recibir.com","Forma de contacto",$cuerpo)){

Debes de cambiar "tuCorreo@recibir.com" POR tu dirección y nombre de dominio donde deseas recibirlo, ejemplo:
if(mail("emmanuelbolli@hotmail.com","Forma de contacto",$cuerpo)){

Saludos!
Por: Sr. QUHO
Tengo el mismo problema y no se por q no me sale aun.. el envio de mail si me sale pero no lee la respuesta del php y lo hago justo como aqui Triste ayuda
Por: Carmen_blog
Es raro, mándame un MP para tratar de resolverlo y no saturar el post, ya si encontramos la solución la publicas aquí mismo.

Saludos!
Por: Sr. QUHO
Gracias, lo probé y funciona bien. Soy nuevo por aquí. Saludos!
Por: oracito_blog
Muy bien, es bueno escuchar eso Guiño

* leer, si, quise decir eso, leer, si quise decir leer, leer eso, es bueno leer eso, si eso dije, no hay duda.
Por: Sr. QUHO
lo he provado y me sale esto:

Error: Error #2101: La cadena transmitida a URLVariables.decode() debe ser una cadena de consulta con formato URL codificado y pares nombre/valor.
at Error$/throwError()
at flash.net::URLVariables/decode()
at flash.net::URLVariables$iinit()
at flash.net::URLLoader/flash.net:URLLoader::onComplete()



pero si me registra los datos que yo quiero
Por: Ricardo_blog
Deja un comentario
IMPORTANTE

Recuerda ser respetuoso, no insultes a otras personas, ni uses palabrotas, hay una persona al otro lado de la pantalla.

Habla bien, NO ESCRIBAS EN MAYUSCULA TODO, no escribas como en un SMS, evita cosas como "ke", "x q" y demás abreviaciones.

Aquí funcionan las etiquetas de los foros, puedes usar [b] para negrita, [img] para las imágenes, [url] para los enlaces, etc.

Si tienes preguntas técnicas, envíalas mejor al foro.