• Publicidad

Insertar link

Todo lo relacionado con el desarrollo Web con Perl: desde CGI hasta Mojolicious

Insertar link

Notapor errante » 2007-06-18 13:49 @617

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.
errante
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2007-06-18 13:43 @613

Publicidad

Notapor explorer » 2007-06-18 14:59 @666

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.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Problema resuelto. Nuevo problema.

Notapor errante » 2007-06-19 05:55 @288

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.
errante
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2007-06-18 13:43 @613

Notapor explorer » 2007-06-19 06:51 @327

Da la impresión de que tienes un problema con el servicio de resolución de nombres.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Ni idea

Notapor errante » 2007-06-19 07:12 @342

No tengo ni idea de lo que es eso. Aquí te dejo la joya. A ver si me puedes ayudar.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl

############################################################
#
#  Justino Martinez, 1998   [email protected]
#                           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= '[email protected]';

# 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 ([email protected])
#
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);
}
}
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
errante
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2007-06-18 13:43 @613

Notapor explorer » 2007-06-19 17:06 @754

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.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Utilizar smtp

Notapor errante » 2007-06-20 06:56 @331

¿Cómo lo hago para utilizar SMTP directamente? En el servidor no me dan ninguna solución a esto.
errante
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2007-06-18 13:43 @613

Notapor explorer » 2007-06-20 07:40 @361

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.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor explorer » 2007-06-20 07:48 @366

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).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

¡Funciona! O casi...

Notapor errante » 2007-06-20 08:30 @396

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
errante
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2007-06-18 13:43 @613

Siguiente

Volver a Web

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado