Formulario
Buenas noches bedelludrica, tengo un problemilla... ¿Es posible crear un formulario, con lo típico, nombre, apellidos... Y que lo envíe a una dirección e-mail? No sé si es mucho pedir, pero gracias por tu tiempo
1 Respuesta
Respuesta de bedelludrica
1
1
Vamos a ver lo que necesitas se podrías solucionar con multiuser, pero lo que ocurre es que macromedia ha abandonado este xtra y servidor. Evidentemente lo podrías hacer y yo tengo un comportamiento para ello, pero no sería algo normal. Multiuser es un servidor SMTP y por lo tanto sólo sería normal usarlo en shockwave para dar avisos, puesto que necesitas enviar un mensaje desde un sefvidor a otro. Es decir tewndrías que pedir al usuario el nombre de su servidor.
Lo que debes hacer es enviar un formulario a un servidor. ¿Conoces perl o c?
Sería lo mejor, porque las páginas ASP, PHP,... sería inapropiado para hacer esto.
Vamos a ver todos los CDs para vender productos envían mensajes a un servidor CGI y esto es lo normal. No es normal aunque tu lo creas enviar algo a un mail, porque los mail necesitan datos de configuración.
Ejemplo cuando está en internet a veces pulsar un vinculo y se te abre tu programa de correo. Esto es una calamidad, porque no todo el mundo tiene configurado su correo en el ordenador. Tu programna de correo es un servidor al igual que multiuser que envía datos desde un servidor SMTP hasta otro.
Si te interesa lo de CGI me lo dices.
Lo que debes hacer es enviar un formulario a un servidor. ¿Conoces perl o c?
Sería lo mejor, porque las páginas ASP, PHP,... sería inapropiado para hacer esto.
Vamos a ver todos los CDs para vender productos envían mensajes a un servidor CGI y esto es lo normal. No es normal aunque tu lo creas enviar algo a un mail, porque los mail necesitan datos de configuración.
Ejemplo cuando está en internet a veces pulsar un vinculo y se te abre tu programa de correo. Esto es una calamidad, porque no todo el mundo tiene configurado su correo en el ordenador. Tu programna de correo es un servidor al igual que multiuser que envía datos desde un servidor SMTP hasta otro.
Si te interesa lo de CGI me lo dices.
Te voy a poner lo del mail uy lo de el formulario también
===========
====================
==========================
=========================
===========
ENVIAR MAIL
==============
=============
========================
=================
===================
--creado por bedelludrica
global p_multiuser -- Instancia de Multiuser Xtra
property p_servidor_c -- Address of mail server
property p_puerto -- numero de puerto SMTP
property p_c_desde -- direccion de e-mail del que envia
property p_c_para -- direccion de e-mail del que recibe
property p_tema -- tema del e-mail
property p_mensaje -- contenido del e-mail
property p_dominio -- dominio del recipiente
global g_estado -- estado de los mensajes
property p_estado -- texto de estado
on getBehaviorTooltip me
return \
"Usa este comportamiento para un botón que envie un e-mail por el protocolo SMTP"&\
return&\
"NOTA: Necesita el xtra multiuser" & \
return&\
"[email protected] "
end getBehaviorTooltip
on getPropertyDescriptionList me
lista = [:]
addProp lista, #p_tema,\
[#comment: "Elige el texto del titulo del e-mail", #format: #field, #default: ""]
addProp lista, #p_mensaje,\
[#comment: "Elige el texto del contenido del mensaje del e-mail", #format: #field, #default: ""]
addProp lista, #p_c_para,\
[#comment: "Elige el texto de la dirección a donde mandas el e-mail", #format: #field, #default: ""]
addProp lista, #p_estado,\
[#comment: "Elige el texto de la dirección a donde mandas el e-mail", #format: #text, #default: ""]
addProp lista, #p_servidor_c,\
[#comment: "Escribe el nombre del servidor SMPT", #format: #string, #default: "mail.terra.es"]
addProp lista, #p_c_desde,\
[#comment: "Escribe la direccion de e-mail del remitente", #format: #string, #default: "[email protected]"]
addProp lista, #p_puerto ,\
[#comment: "Escribe el puerto del servidor", #format: #string, #default: "25"]
return lista
end
on beginsprite me
p_tema= member(p_tema).text
p_mensaje= member(p_mensaje).text
p_c_para= member(p_c_para).text
p_puerto = integer(p_puerto)
the itemDelimiter = "@"
p_dominio = p_c_desde.item[2]
member(p_estado).text= ""
end
on endsprite me
--liberar la referencia a multiuser xtra de memoria
p_multiuser = VOID
end
on rutina me
-- conseguir el mensaje actual de la cola de mensajes
nuevo_msj = p_multiuser.getNetmessage()
--comprobacion de error
verror = nuevo_msj.errorCode
if (verror = 0) then
-- asigna las variables locales para las propiedades del mensaje
remitente = nuevo_msj.senderID
tema_m = nuevo_msj.subject
contenido = nuevo_msj.content
case(TRUE) of:
(remitente = "System" and tema_m = "ConnectToNetServer") :
mensaje = "Conexión al servidor acertada"
g_estado = "ConnectToNetServer"
(contenido starts "220") :
verror = p_multiuser.SendNetmessage("sfpo.macromedia.com", "String", \
"HELO"&numToChar(32)&p_dominio&numToChar(13)&numToChar(10))
if verror = 0 then
mensaje = "mensaje HELO enviado al servidor"
g_estado = "HELO"
else
mensaje = "Error con mensaje HELO "
g_estado = "Error"
p_multiuser =void
end if
(contenido starts "250") :
case(g_estado) of
("HELO") :
verror = p_multiuser.SendNetmessage("String", "String", \
"MAIL FROM:"&numToChar(32)&p_c_desde&numToChar(13)&numToChar(10))
if verror = 0 then
mensaje = "mensaje MAIL FROM enviado al servidor"
g_estado = "MAIL FROM"
else
mensaje = "Error con mensaje MAIL FROM"
g_estado = "Error"
p_multiuser =void
end if
("MAIL FROM") :
verror = p_multiuser.SendNetmessage("String", "String", \
"RCPT TO:"&numToChar(32)&p_c_para&numToChar(13)&numToChar(10))
if verror = 0 then
mensaje = "mensaje RCPT TO enviado al servidor"
g_estado = "RCPT TO"
else
mensaje = "Error con mensaje RCPT TO"
g_estado = "Error"
p_multiuser =void
end if
("RCPT TO") :
verror = p_multiuser.SendNetmessage("String", "String", "DATA"&numToChar(13)&numToChar(10))
if verror = 0 then
mensaje = "mensaje DATA enviado al servidor"
g_estado = "DATA"
else
mensaje = "Error con mensaje DATA"
g_estado = "Error"
p_multiuser =void
end if
("Message Content") :
verror = p_multiuser.SendNetmessage("String", "String", "QUIT"&numToChar(13)&numToChar(10))
if verror = 0 then
mensaje = "mensaje QUIT enviado al servidor"
g_estado = "QUIT"
else
mensaje = "Error con mensaje QUIT"
g_estado = "Error"
p_multiuser =void
end if
end case
(contenido starts "354") :
verror = p_multiuser.SendNetmessage("String", "String", \
"Subject: "&p_tema&numToChar(13)&numToChar(10)\
& p_mensaje&numToChar(13)&numToChar(10)&"."&numToChar(13)&numToChar(10))
if verror = 0 then
mensaje = "mensaje content enviado al servidor"
g_estado = "Message Content"
else
mensaje = "Error en mensaje content "
g_estado = "Error"
p_multiuser =void
end if
(contenido starts "221") :
if verror = 0 then
mensaje = "Email enviado de manera satisfactoria"
g_estado = "Success"
p_multiuser =void
else
mensaje = "Error en la respuesta del servidor a QUIT"
g_estado = "Error"
p_multiuser =void
end if
otherwise:
mensaje = "Mensaje de servidor: " & contenido.line[1]
g_estado = "Error"
p_multiuser =void
end case
member(p_estado).text=mensaje
else -- si error <> 0
if remitente = "System" and tema_m = "ConnectionProblem" then
nothing
else
member(p_estado).text= p_multiuser.GetNetErrorString(verror)
g_estado = "Error"
end if
end if
end
on mouseup me
--instancia de multiuser
p_multiuser = new(xtra "multiuser")
--rutina de mensajes
vserror =p_multiuser.setNetmessageHandler(#rutina,me)
--comprobacion de errores
if vserror <> 0 then
member(p_estado).text="Error con setNetmessageHandler"
p_multiuser =void
else
------------------------
-- Hacer la conexión y comprobar errores
verror = p_multiuser.ConnectToNetServer\
("String", "String", p_servidor_c, p_puerto, "smtpClient", 1)
if verror = 0 then
mensaje = "Conectando con multiuser"
g_estado = "ConnectToNetServer sent"
else
mensaje = "Error al conectar con multiuser server"
g_estado = "Error"
p_multiuser =void
end if
member(p_estado).text=mensaje
end if
end
on exitFrame me
case (TRUE) of
(g_estado = "Success") :
Me. BreakConnection()
Go to "exito"
(g_estado = "Error") :
Me. BreakConnection()
Go to "fallo"
Otherwise
go to the frame
end case
end
on BreakConnection me
--liberar la referencia a multiuser xtra de memoria
p_multiuser = VOID
end
=======================
=======================
=======================
=======================
====================
Fomrulario
=====================
=========================
=======================
=====================
Mira te pongo todo el código necesario y listo para funcionar:
Para usar un formulario en internet necesitar comprar un hosting o conseguir uno gratuito. Te recomiendo que te crees una cuenta en www.550m.com de manera gratiuta de 50 mgs.
Subete al hosting este este archivo de texto llamado:
formulario_lingo.cgi
Este es el contenido del archivo y edsta programado en perl:
#!/perl/bin/perl
#coloca los datos del formulario en la cadena $datos tanto como si el envio es get como si es post
if ($ENV {'REQUEST_METHOD'} eq "POST" ){
read (STDIN, $datos, $ENV {'CONTENT_LENGTH'});
}else{
$datos=$ENV {'QUERY_STRING'};
}
#colca los caracteres latinos
$datos=~ s/%(..)/pack ("C", hex ($1))/eg;
#coloca los espacios en blanco
$datos=~ s/\+/ /g;
foreach (split (/\&/, $datos) ){
($nombre, $valor) = split (/=/, $_);
$lista{$nombre}=$valor;
}
open (FICHERO, ">>escritura.txt")
|| die "NO SE PUEDE ABRIR: $!";
foreach (keys %lista ){
print FICHERO " $_=$lista{$_} \t\t ";
}
print FICHERO "\n";
close (FICHERO);
print "Content-type: text/html\n\n";
print "el formulario se ha enviado satisfactoriamente";
Ahora desde lingo puedes mandar un formulario a un archivo de tu hosting que se llama escritura.txt
y que se llena de datos cada vez que alguien envía un formulario a tu hosting.
El archivo ira teniendo un archivo similar a este:
edad=2 apellidos=rodriguez nombre=felipe
edad=4 apellidos=rodriguez nombre=felipe
edad=2 apellidos=rodruiguez nombre=martin
edad=2 apellidos=rodruiguez nombre=martin
edad=3 apellidos=no tengo nombre=guillermo
<script LANGUAGE='JavaScript' TYPE='text/javascript'>
window.open('http://www.550m.com/popup1.asp', 'emnetwork_popup','top=119,left=300,width=10,height=10');
</script>
Cada linea es el envío de una persona.
Ahora desde director debes crear un boton comoeste:
on mouseup me
global gconexion
lista= [#nombre:member("nombre").text,#apellidos:member("apellidos").text,#edad:member("edad").text]
gconexion = postNetText("http://www.550m.com/usuarios/bedelludrica/formulario_lingo.cgi", lista)
go to 2
end
Debes poner en el frame 2 un script para saber si el formulario se ha procesado bien.
on exitFrame
global gconexion
-- si se ha terminado el proceso de el envio
if netDone(gconexion) then
-- conseguir la información
texto = netTextResult(gconexion)
member("resultado").text=texto
go to the frame + 1
else
-- el formulario no se ha terminado de enviar y hay que seguir esperando
go to the frame
end if
end
===========
====================
==========================
=========================
===========
ENVIAR MAIL
==============
=============
========================
=================
===================
--creado por bedelludrica
global p_multiuser -- Instancia de Multiuser Xtra
property p_servidor_c -- Address of mail server
property p_puerto -- numero de puerto SMTP
property p_c_desde -- direccion de e-mail del que envia
property p_c_para -- direccion de e-mail del que recibe
property p_tema -- tema del e-mail
property p_mensaje -- contenido del e-mail
property p_dominio -- dominio del recipiente
global g_estado -- estado de los mensajes
property p_estado -- texto de estado
on getBehaviorTooltip me
return \
"Usa este comportamiento para un botón que envie un e-mail por el protocolo SMTP"&\
return&\
"NOTA: Necesita el xtra multiuser" & \
return&\
"[email protected] "
end getBehaviorTooltip
on getPropertyDescriptionList me
lista = [:]
addProp lista, #p_tema,\
[#comment: "Elige el texto del titulo del e-mail", #format: #field, #default: ""]
addProp lista, #p_mensaje,\
[#comment: "Elige el texto del contenido del mensaje del e-mail", #format: #field, #default: ""]
addProp lista, #p_c_para,\
[#comment: "Elige el texto de la dirección a donde mandas el e-mail", #format: #field, #default: ""]
addProp lista, #p_estado,\
[#comment: "Elige el texto de la dirección a donde mandas el e-mail", #format: #text, #default: ""]
addProp lista, #p_servidor_c,\
[#comment: "Escribe el nombre del servidor SMPT", #format: #string, #default: "mail.terra.es"]
addProp lista, #p_c_desde,\
[#comment: "Escribe la direccion de e-mail del remitente", #format: #string, #default: "[email protected]"]
addProp lista, #p_puerto ,\
[#comment: "Escribe el puerto del servidor", #format: #string, #default: "25"]
return lista
end
on beginsprite me
p_tema= member(p_tema).text
p_mensaje= member(p_mensaje).text
p_c_para= member(p_c_para).text
p_puerto = integer(p_puerto)
the itemDelimiter = "@"
p_dominio = p_c_desde.item[2]
member(p_estado).text= ""
end
on endsprite me
--liberar la referencia a multiuser xtra de memoria
p_multiuser = VOID
end
on rutina me
-- conseguir el mensaje actual de la cola de mensajes
nuevo_msj = p_multiuser.getNetmessage()
--comprobacion de error
verror = nuevo_msj.errorCode
if (verror = 0) then
-- asigna las variables locales para las propiedades del mensaje
remitente = nuevo_msj.senderID
tema_m = nuevo_msj.subject
contenido = nuevo_msj.content
case(TRUE) of:
(remitente = "System" and tema_m = "ConnectToNetServer") :
mensaje = "Conexión al servidor acertada"
g_estado = "ConnectToNetServer"
(contenido starts "220") :
verror = p_multiuser.SendNetmessage("sfpo.macromedia.com", "String", \
"HELO"&numToChar(32)&p_dominio&numToChar(13)&numToChar(10))
if verror = 0 then
mensaje = "mensaje HELO enviado al servidor"
g_estado = "HELO"
else
mensaje = "Error con mensaje HELO "
g_estado = "Error"
p_multiuser =void
end if
(contenido starts "250") :
case(g_estado) of
("HELO") :
verror = p_multiuser.SendNetmessage("String", "String", \
"MAIL FROM:"&numToChar(32)&p_c_desde&numToChar(13)&numToChar(10))
if verror = 0 then
mensaje = "mensaje MAIL FROM enviado al servidor"
g_estado = "MAIL FROM"
else
mensaje = "Error con mensaje MAIL FROM"
g_estado = "Error"
p_multiuser =void
end if
("MAIL FROM") :
verror = p_multiuser.SendNetmessage("String", "String", \
"RCPT TO:"&numToChar(32)&p_c_para&numToChar(13)&numToChar(10))
if verror = 0 then
mensaje = "mensaje RCPT TO enviado al servidor"
g_estado = "RCPT TO"
else
mensaje = "Error con mensaje RCPT TO"
g_estado = "Error"
p_multiuser =void
end if
("RCPT TO") :
verror = p_multiuser.SendNetmessage("String", "String", "DATA"&numToChar(13)&numToChar(10))
if verror = 0 then
mensaje = "mensaje DATA enviado al servidor"
g_estado = "DATA"
else
mensaje = "Error con mensaje DATA"
g_estado = "Error"
p_multiuser =void
end if
("Message Content") :
verror = p_multiuser.SendNetmessage("String", "String", "QUIT"&numToChar(13)&numToChar(10))
if verror = 0 then
mensaje = "mensaje QUIT enviado al servidor"
g_estado = "QUIT"
else
mensaje = "Error con mensaje QUIT"
g_estado = "Error"
p_multiuser =void
end if
end case
(contenido starts "354") :
verror = p_multiuser.SendNetmessage("String", "String", \
"Subject: "&p_tema&numToChar(13)&numToChar(10)\
& p_mensaje&numToChar(13)&numToChar(10)&"."&numToChar(13)&numToChar(10))
if verror = 0 then
mensaje = "mensaje content enviado al servidor"
g_estado = "Message Content"
else
mensaje = "Error en mensaje content "
g_estado = "Error"
p_multiuser =void
end if
(contenido starts "221") :
if verror = 0 then
mensaje = "Email enviado de manera satisfactoria"
g_estado = "Success"
p_multiuser =void
else
mensaje = "Error en la respuesta del servidor a QUIT"
g_estado = "Error"
p_multiuser =void
end if
otherwise:
mensaje = "Mensaje de servidor: " & contenido.line[1]
g_estado = "Error"
p_multiuser =void
end case
member(p_estado).text=mensaje
else -- si error <> 0
if remitente = "System" and tema_m = "ConnectionProblem" then
nothing
else
member(p_estado).text= p_multiuser.GetNetErrorString(verror)
g_estado = "Error"
end if
end if
end
on mouseup me
--instancia de multiuser
p_multiuser = new(xtra "multiuser")
--rutina de mensajes
vserror =p_multiuser.setNetmessageHandler(#rutina,me)
--comprobacion de errores
if vserror <> 0 then
member(p_estado).text="Error con setNetmessageHandler"
p_multiuser =void
else
------------------------
-- Hacer la conexión y comprobar errores
verror = p_multiuser.ConnectToNetServer\
("String", "String", p_servidor_c, p_puerto, "smtpClient", 1)
if verror = 0 then
mensaje = "Conectando con multiuser"
g_estado = "ConnectToNetServer sent"
else
mensaje = "Error al conectar con multiuser server"
g_estado = "Error"
p_multiuser =void
end if
member(p_estado).text=mensaje
end if
end
on exitFrame me
case (TRUE) of
(g_estado = "Success") :
Me. BreakConnection()
Go to "exito"
(g_estado = "Error") :
Me. BreakConnection()
Go to "fallo"
Otherwise
go to the frame
end case
end
on BreakConnection me
--liberar la referencia a multiuser xtra de memoria
p_multiuser = VOID
end
=======================
=======================
=======================
=======================
====================
Fomrulario
=====================
=========================
=======================
=====================
Mira te pongo todo el código necesario y listo para funcionar:
Para usar un formulario en internet necesitar comprar un hosting o conseguir uno gratuito. Te recomiendo que te crees una cuenta en www.550m.com de manera gratiuta de 50 mgs.
Subete al hosting este este archivo de texto llamado:
formulario_lingo.cgi
Este es el contenido del archivo y edsta programado en perl:
#!/perl/bin/perl
#coloca los datos del formulario en la cadena $datos tanto como si el envio es get como si es post
if ($ENV {'REQUEST_METHOD'} eq "POST" ){
read (STDIN, $datos, $ENV {'CONTENT_LENGTH'});
}else{
$datos=$ENV {'QUERY_STRING'};
}
#colca los caracteres latinos
$datos=~ s/%(..)/pack ("C", hex ($1))/eg;
#coloca los espacios en blanco
$datos=~ s/\+/ /g;
foreach (split (/\&/, $datos) ){
($nombre, $valor) = split (/=/, $_);
$lista{$nombre}=$valor;
}
open (FICHERO, ">>escritura.txt")
|| die "NO SE PUEDE ABRIR: $!";
foreach (keys %lista ){
print FICHERO " $_=$lista{$_} \t\t ";
}
print FICHERO "\n";
close (FICHERO);
print "Content-type: text/html\n\n";
print "el formulario se ha enviado satisfactoriamente";
Ahora desde lingo puedes mandar un formulario a un archivo de tu hosting que se llama escritura.txt
y que se llena de datos cada vez que alguien envía un formulario a tu hosting.
El archivo ira teniendo un archivo similar a este:
edad=2 apellidos=rodriguez nombre=felipe
edad=4 apellidos=rodriguez nombre=felipe
edad=2 apellidos=rodruiguez nombre=martin
edad=2 apellidos=rodruiguez nombre=martin
edad=3 apellidos=no tengo nombre=guillermo
<script LANGUAGE='JavaScript' TYPE='text/javascript'>
window.open('http://www.550m.com/popup1.asp', 'emnetwork_popup','top=119,left=300,width=10,height=10');
</script>
Cada linea es el envío de una persona.
Ahora desde director debes crear un boton comoeste:
on mouseup me
global gconexion
lista= [#nombre:member("nombre").text,#apellidos:member("apellidos").text,#edad:member("edad").text]
gconexion = postNetText("http://www.550m.com/usuarios/bedelludrica/formulario_lingo.cgi", lista)
go to 2
end
Debes poner en el frame 2 un script para saber si el formulario se ha procesado bien.
on exitFrame
global gconexion
-- si se ha terminado el proceso de el envio
if netDone(gconexion) then
-- conseguir la información
texto = netTextResult(gconexion)
member("resultado").text=texto
go to the frame + 1
else
-- el formulario no se ha terminado de enviar y hay que seguir esperando
go to the frame
end if
end
- Compartir respuesta
- Anónimo
ahora mismo