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.
Primero hay que crear un nuevo archivo de flash.
Insertar (para este ejemplo) 3 cuadros de texto de tipo input.
Insertar 2 cuadros de texto de tipo dynamic.
Crear un botón
Nombres de los campos Input:
txtNombre
txtApellidos
txtEmail
Nombres de los campos Dynamic:
lbRespuesta
lbError
Nombre del botón:
btEnviar
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):
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.
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 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()
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()
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.
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.
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
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;
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)){
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 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.
Gracias, lo probé y funciona bien. Soy nuevo por aquí. Saludos! Por:oracito_blog
Muy bien, es bueno escuchar eso
* 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
tenes que poner
cargador.dataFormat = URLLoaderDataFormat.TEXT;
y se arregla Por:puelo-blog
hey, si manada el correo, pero lo manda en blanco, solo aparece
nombre:
apellidos:
correo:
que hago?
necesito ayuda!!! Por:melvin-blog
hola, plix, necesito ayuda,....
solo recibo el mensaje. en blanco
solo me aparece
nombre:
apellido:
correo:
por favor.... Por:melvin-blog
ya no se molesten, ya lo solucione..
y gracias, por el tuto.... Por:melvin-blog
primeramente muy buena tu explicacion Qhuo, igual les dejo un videotutorial que esta bastante bueno para los que quieran expandirse mas: http://www.gotoandlearn.com/player.php?id=50
saludos Por:emanuel-blog
quisiera saber si se puede que el mensaje que envian al correo aparezca en un campo Dynamic cuando apreta el boton enviar Por:Clary -blog
Hola, sabes, hice copy-paste de todo, cree todo tal cual, los mismos nombres, todo igual, cree el .php solamente con el codigo que colocaste aqui, sin ninguna otra cosa, y sin espacios al inicio, lo subi a una cuenta lycos.es, y el correo me lo envia, pero no me dice si lo envio o no en el flash..
es decir, el lbError, o el lbRespuestas, no me funcionan, eso seria... alguna sugerencia .
Gracias de Antemano. Por:Luis-blog
hola, ahorita tengo el formulario corriendo desde mi pc y me da el error:
TypeError: Error #2007: El valor del parámetro text debe ser distinto de null.
at flash.text::TextField/set text()
at MethodInfo-200()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/onComplete()
estoy bajando el xampp con eso bastara?? Por:rzc-blog
hola! este codigo hay quen meterlo dentro de un package?
esque estoy un poco perdida para saber en donde debe ir
gracias Por:Bea-blog
interenbsante man ya llevo 4 dias en php y ya se mas que lo basico ahroa toy parendiendo cs3 y me sirve loq ue aprendi de php sta interesante saludos, lo voy a probar Por:xnandresst-blog
pero como valido los input text de flash para que no me lo envie en blanco si le dan al boton enviar...?
necesito validarlo
ya probe con
if (txtNombre eq ""){
if (txtNombre.text == ""){
Ojo Flash esta ACTIONSCRIPT 3.0 Por:melvin-blog
ya lo solucione, gracias de todos modos
if(txtNombre.text.length<1){
lbError.text="Por favor introduce tu nombre completo"; Por:Melvin-blog
comoestas hola qui en loconteste Por:norma-blog
amigo, al publicar F12, sale
====
No se pudo cargar la clase o interfaz 'MouseEvent'.
====
No se pudo cargar la clase o interfaz 'URLVariables'.
====
No se pudo cargar la clase o interfaz 'URLRequest'.
====
No se pudo cargar la clase o interfaz 'URLLoader'.
====
No se pudo cargar la clase o interfaz 'Event'.
====
por favor me ayuda?
Gracias.
mi correo cram83@hotmail.com Por:Cesar Ramirez-blog
Otra pregunta, el boton enviar no tiene acciones? Por:Cesar Ramirez-blog
hola me pueden ayudar porfavor
solo recibo el mensaje. en blanco
solo me aparece
nombre:
apellido:
correo: Por:Luis L-blog
Hola...
alguien ha solucionado lo de recibir el correo con los campos en blanco?
Muchisimas gracias Por:Manson-blog
mmm... como compruebo que mi hostingperimite enviar correos ? Por:Rodrigo-blog
A mi me da un error al enviar datos de texto y combobox. ¿Qué tengo que poner en PHP para que cargue las variables del Combobox? Yo he puesto en el código flash AS3 .selectedLabel (equivalente al .text del TextInput). ¿Sirve esto?
ReferenceError: Error #1069: No se encontró la propiedad respuestaPHP en String y no hay ningún valor predeterminado.
at MethodInfo-1961()
at flash.events::EventDispatcher/flash.events:EventDispatcher::dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/flash.net:URLLoader::onComplete() Por:joseureba
Hola, he logrado hacer funcionar el mail con exito. Pero llega con remitente "Apache (apache@ws14.host4g.com)" en lugar de los datos de los campos.
Alguien conoce alguna solucion? Por:Lucas-blog
Sr Quho
me parece que algo estoy haciendo mal y no logro hacer funcionar el programa seria posible enviarte mis archivos y me digas que estoy haciendo mal??
gracias Por:PIONERO69
nuevamente yo Sr. Quho:
te envio el error que me da el formato 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()
gracais Por:PIONERO69
Hola, hice el ejemplo de este tutorial y no me queda, me marca el error 1069. Como en lo que estoy mas interesada es en mandar variables quite la parte del evio del correo, el codigo quedo de la siguiente forma:
Codigo flash:
function enviar(Mouse:Event):void{
var req:URLRequest=new URLRequest("http://localhost/archivo.php");
req.method=URLRequestMethod.POST;
var vars:URLVariables=new URLVariables;
vars.nombre=nombre_txt.text;
vars.apellidos=apellidos_txt.text;
vars.email=email_txt.text;
req.data=vars;
var ldr:URLLoader=new URLLoader();
ldr.dataFormat=URLLoaderDataFormat.TEXT;
ldr.addEventListener(Event.COMPLETE,onVarsLoaded);
try {ldr.load(req);}
catch(error:Error){nombre_lbl.text="Error de envio";}
}
De verdad agradeceria alguien pudiera ayudarme con esto. Gracias Por:saab
Hola, ya subi el php, el swf y mi html donde esta mi swf pero sigue sin funcionar, no me envia mensajes de recibido ni me llegan a a mi corre, espero su ayuda, gracias! Por:MARY-blog