Lun Jun 18, 2007 12:49 pm
|
 |
errante
Perlero Nuevo

|
Registrado: 18 Jun 2007
Mensajes: 7
|
|
| Insertar link |
|
|
| Hola, soy nuevo en esto. He creado un formulario en mi web. De momento parece que funciona, solo que necesito saber como puedo decirle que me abra una página cuando se envie el formulario. O sea, quiero que haga lo mismo que hace este mismo foro al registrarse un nuevo usuario. Muchas gracias de antemano. |
|
|
|
Lun Jun 18, 2007 1:59 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4143
Ubicación: Valladolid, España
|
|
|
|
|
Bienvenido a los foros de Perl en Español.
Hay que hacer un redirect en tu CGI. Busca por la palabra redirect en este foro usando el enlace Buscar. |
|
Mar Jun 19, 2007 4:55 am
|
 |
errante
Perlero Nuevo

|
Registrado: 18 Jun 2007
Mensajes: 7
|
|
| Problema resuelto. Nuevo problema. |
|
|
| Muchas gracias por responder tan rápido. Ya lo he solucionado. Lo que ocurre es que no me manda el email con los datos introducidos. ¿A qué puede deberse? Bueno, decir que el script que coloque en el servidor es uno que encontré en Internet y creo que tiene unas cuantas líneas de código de mas. ¿Puede que eso haga mas lento el proceso de envío? Por que tarda un montón en enviar el formulario. Gracias de antemano. Espero que me podáis resolver estas dos dudas. Si queréis puede pegar el código del script a ver qué os parece. Gracias. |
|
Mar Jun 19, 2007 5:51 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4143
Ubicación: Valladolid, España
|
|
|
|
|
| Da la impresión de que tienes un problema con el servicio de resolución de nombres. |
|

Mar Jun 19, 2007 6:12 am
|
 |
errante
Perlero Nuevo

|
Registrado: 18 Jun 2007
Mensajes: 7
|
|
| Ni idea |
|
|
No tengo ni idea de lo que es eso. Aquí te dejo la joya. A ver si me puedes ayudar.
| Perl: | #!/usr/bin/perl
############################################################
#
# Justino Martinez, 1998 justino@jet.es
# http://web.jet.es/justino
#
# TotMail.cgi V1.0
#
############################################################
#
# Envia por correo el contenido de un formulario y genera
# una pagina de respuesta independientemente de como este
# construido el formulario
#
############################################################
#
# TotMail V1.0 puede copiarse, modificarse y usarse
# libremente a condicion de que no se borre ni modifique
# la cabecera ni este texto.
#
############################################################
#
# Llamada desde el formulario:
# <form method=POST action="URL de este cgi">
#
############################################################
#
# Instalacion:
# Definir las variables de abajo y dar
# permisos 755 a este script
#
############################################################
##########################
# Definimos las variables
# Donde esta el sendmail?
$mailprog = '/usr/sbin/sendmail';
# Cual es TU direccion de mail?
$mimail= 'contacto@errantes.es';
# Que subject quieres ver en estos correos?
$asunto= 'Comentarios';
# Codigo de la pagina que vera el usuario cuando haya
# enviado el formulario.
# Cada linea debe ponerse en una instruccion
# push(@codigo,"texto de la linea");
# para escribir dobles comillas debe usarse la comilla
# simple (por ejemplo push(@codigo,"<body bgcolor='#FFFFFF'>")
# puedes anyadir o quitar lineas anyadiendo o quitando
# instrucciones push(@codigo,"lo que sea");
#
####################################################################
# A partir de aqui no hay que tocar nada
####################################################################
# Toma las entradas del formulario
&toma_entradas;
&envia_mail ($mimail, $asunto);
&responde;
# ======================== SUBRUTINAS
# ---------------------------- Responde al usuario
sub responde
{
# Empieza la creacion de la pagina que vera el usuario
print "Location: http://www.errantes.es/formredirect.html\n\n";
foreach $linea (@codigo) {
print "$linea\n";
}
}
# ---------------------------- Recoge los parametros
# Subrutina original de Chispa (chispa@arrakis.es)
#
sub toma_entradas {
if ($ENV{'REQUEST_METHOD'} eq 'GET') {
# Recoge el par name-value
@pairs = split(/&/, $ENV{'QUERY_STRING'});
}
elsif ($ENV{'REQUEST_METHOD'} eq 'POST') {
# Lee la entrada
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
# Recoge el par name-value
@pairs = split(/&/, $buffer);
}
foreach $pair (@pairs) {
($name, $value) = split(/\=/, $pair);
# Eliminamos caracteres peligrosos
$name =~ tr/+/ /;
$name =~ s/% ([a-fA-F0- 9][a-fA-F0- 9])/ pack("C", hex($ 1))/eg;
$value =~ tr/+/ /;
$value =~ s/% ([a-fA-F0- 9][a-fA-F0- 9])/ pack("C", hex($ 1))/eg;
$value =~ s/<!-- (.|\n )*-->//g;
$QUERY{$name} = $value;
}
}
sub envia_mail
{
local ($recipient, $subject);
$recipient= @_[0];
$subject= @_[1];
$recipient=~ s/^ (.* )\n$/\ 1/;
if ($recipient)
{
open (MAIL, "|$mailprog $recipient") || die "No puedo abrir $mailprog!\n";
print MAIL "Reply-to: $recipient (No admite reply)\n";
print MAIL "To: $recipient\n";
print MAIL "Subject: $subject\n";
print MAIL "From: Formulario\n";
print MAIL "\n";
print MAIL "-----------------------------------------------------------\n";
while (($name, $value) = each(%QUERY)){
print MAIL "Contenido del campo $name:\n";
print MAIL "$value\n";
print MAIL "-----------------------------------------------------------\n";
}
print MAIL "-----------------------------------------------------------\n\n";
print MAIL "TotMail V1.0 Justino Martinez, 1998\n";
print MAIL "http://web.jet.es/justino\n";
close (MAIL );
}
} |
|
|

Mar Jun 19, 2007 4:06 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4143
Ubicación: Valladolid, España
|
|
|
|
|
Para ver dónde está el error, sería conveniente ver los ficheros de registro de actividad (log). Si no tienes acceso a ellos, deberás ir paso a paso.
Los principales problemas que pueden ocurrir son:
* No tienes instalado o acceso a sendmail
* sendmail no está en /usr/bin
* Tu usuario (el que ejecuta el servidor web) no tiene permisos para enviar correos
* El procesador de correo sendmail corre en una máquina que no tiene acceso a un servidor de nombres o el sistema de resolución de nombres no está configurado o no está. De aquí saldría el problema de la tardanza en responder. Pero si el mensaje sale al final entonces es cosa del administrador del sistema, que tiene definido un tiempo de procesamiento de colas de correo de muchos minutos de espera. La solución interesante sería no usar sendmail e intentar enviar el correo por el protocolo SMTP directamente. Pero ahí tendríamos otros posibles problemas. |
|

Mie Jun 20, 2007 5:56 am
|
 |
errante
Perlero Nuevo

|
Registrado: 18 Jun 2007
Mensajes: 7
|
|
| Utilizar smtp |
|
|
| ¿Cómo lo hago para utilizar SMTP directamente? En el servidor no me dan ninguna solución a esto. |
|

Mie Jun 20, 2007 6:40 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4143
Ubicación: Valladolid, España
|
|
|
|
|
Siempre lo más cómodo es usar al MTA en el ordenador donde estás ejecutando tu programa. Pregunta en el servidor si disponen de algún gestor de correo, al no tener el sendmail.
Si no tienen nada de eso, puedes probar a instalar algunos módulos de Perl para imitarlo, como puede ser el Email::Send, que a su vez necesita del Net::SMTP. Y si necesitas autenticarte para poder enviar el correo, también tendrás que usar Net::SMTP::SSL si usas esa encriptación.
Otros módulos pueden ser más sencillos, como el Mail::Sender, pero dependen de otros módulos. Por cada módulo que instales tienes que ver antes de qué módulos dependen. Mira en CPAN o mejor en la página de proyecto de email sobre Perl, pero no te asustes de los centenares que hay. Vete a la caja de búsqueda y pon 'simple'.
Si al final te es muy complicado hacer la instalación, quizás lo más sencillo sea cambiar de servidor, y buscar otro que sí de soporte para poder enviar correos. Vamos, lo mínimo que tiene que decirte es cómo se llama su servidor de correo para poder enviarle algo, y si dispone de algún programa tipo sendmail o mail para hacerlo más sencillo. |
|

Mie Jun 20, 2007 6:48 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4143
Ubicación: Valladolid, España
|
|
|
|
|
| Quizás Mail::Sender sea el más sencillo. Sólo necesitarás tener a mayores los módulos MIME::Base64 y MIME::QuotedPrint (y alguno más si necesitas autenticarte al servidor). |
|
Mie Jun 20, 2007 7:30 am
|
 |
errante
Perlero Nuevo

|
Registrado: 18 Jun 2007
Mensajes: 7
|
|
| ¡Funciona! O casi... |
|
|
Bueno, ya me envía los e-mails, no sé cómo ni porqué, pero así es. Lo que ocurre es que solo me manda los del campo nombre. No me envía los demás datos. ¿A qué se debe?
Aquí está el dichoso formulario:
http://www.errantes.es/Contacto.html |
|
Mie Jun 20, 2007 8:08 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4143
Ubicación: Valladolid, España
|
|
|
|
|
| Pues... o es un error muy oculto... o es quizás la codificación del <form>, que está como enctype="text/plain". Quizás sea eso... pero no estoy seguro... prueba a quitarlo. |
|
Mie Jun 20, 2007 9:22 am
|
 |
errante
Perlero Nuevo

|
Registrado: 18 Jun 2007
Mensajes: 7
|
|
| Muchas gracias explorer! |
|
|
| ¡Muchas gracias tío! Ya funciona todo perfectamente, ¡incluso va rápido y todo! Sin tu ayuda no lo hubiera conseguido, ya que no tengo ni idea de esto. Y ya que es de "bien nacidos ser agradecidos", voy a poner mi granito de arena para que sigáis haciéndolo igual de bien durante mucho tiempo. |
|
Mie Jun 20, 2007 9:59 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4143
Ubicación: Valladolid, España
|
|
|
|
|
Me alegro.
Estaría bien investigar a ver si descubres el cómo conseguiste hacer funcionar el Totmail, al final. ¿Algún tema de permisos, quizás? |
|
Mie Jun 20, 2007 12:41 pm
|
 |
errante
Perlero Nuevo

|
Registrado: 18 Jun 2007
Mensajes: 7
|
|
| Ni idea |
|
|
| La verdad que no sé a qué se debe el que funcione ahora y antes no (además lo hace a la velocidad del rayo), porque no he cambiado nada en el script. De lo que estoy convencido es de que el error estaba en el servidor, pero eso no me lo van a decir, me temo. Al final, el último problema que me surgió lo solucioné poniendo en tipo de codificación "application/x-www-form-urlencoded". Así me devuelve los datos de todos los campos. Lo dicho, muchas gracias y ahí va mi humilde donación que espero os ayude a seguir como hasta ahora. Gracias. |
|
Powered by phpBB © 2001, 2005 phpBB Group
|