• Publicidad

Enviar correo datos de formulario y grabarlos en txt

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Enviar correo datos de formulario y grabarlos en txt

Notapor cbrigati » 2011-01-28 13:37 @609

Buenas Tardes.

Quería saber si es posible tener una página web de tipo formulario, en la cual, cuando el usuario oprima la opcion de Registrarse, se envíe la información a una dirección de correo (del administrador, y al usuario que se registró) y a la vez, agregar esa información al final de un archivo txt del servidor (con separadores de campos)

¿Existirán rutinas de código Perl que pueda tomar como modelo y ajustarlas a la página web que estoy tratando de implementar?

Muchas gracias por las respuestas.

Saludos,
Carolina Brigati
cbrigati
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2011-01-28 13:19 @597

Publicidad

Re: Enviar correo datos de formulario y grabarlos en txt

Notapor explorer » 2011-01-28 20:53 @911

Sí, sí que se puede, claro.

En el programa, si lo construyes como un CGI, puedes recibir los parámetros a través de param(). Los formateas, abres el fichero de texto (open()) en modo añadir ('>>') y escribes en él (print()). Seguramente tendrás que tener cuidado con la ruta al fichero de texto, pero si pones una ruta absoluta, no tendrás problemas. Y que tenga los permisos de escritura para el usuario que está ejecutando el servidor web (que será www-data o algo parecido).

En cuanto al correo electrónico, hay muchos módulos que simplifican la tarea. Yo, hace una semana, lo hice así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use Email::Simple;
  2. use Email::Simple::Creator;
  3. use Email::Sender::Simple       'sendmail';
  4.  
  5. my $email = Email::Simple->create(
  6.     header => [
  7.         From    => '"Dani y Cris Web" <[email protected]>',
  8.         To      => '[email protected]',
  9.         Subject => 'Foto nueva',
  10.     ],
  11.     body => "Hay una nueva foto en el web:\n\n\tfotos/$seccion/$foto\n\nenviada por $nombre.\n\nDatos de la imagen:\n\n$salida",
  12. );
  13.  
  14. sendmail($email);
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Enviar correo datos de formulario y grabarlos en txt

Notapor cbrigati » 2011-02-03 09:07 @422

¡Hola!

Necesitaría cierta orientación.

Estoy sumamente frustrada con el proveedor de servicios.

Siguiendo las instrucciones de tutorial:
«Lo primero que debes de hacer es contactar al administrador de tu servicio de alojamiento, o buscar en su ayuda, cuál es la dirección de sendmail, pues tiende a variar dependiendo de la versión del sistema operativo, etc.»

Llamé por teléfono y me indican que ya no usan sendmail (hace poco realizaron una migración)

Lo único que me contestan es que ahora usan: MTA puerto 25 compartido.

Y no me dejan hablar con el especialista para aclarar esto.

¿Sabes a qué se refieren? ¿Son buenas o malas noticias? Esto hace más complicado el envío de correos?

¡Gracias por tu desinteresada ayuda!
Carolina
cbrigati
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2011-01-28 13:19 @597

Re: Enviar correo datos de formulario y grabarlos en txt

Notapor explorer » 2011-02-03 09:20 @430

Con esos datos te están diciendo que su gestor de transporte de correo (MTA) está escuchando en el puerto 25, así que, en lugar de usar a un intermediario para enviar el correo, deberás ocuparte de hacerlo por ti misma.

En muchos de los módulos Perl se puede indicar que el transporte de correo sea usando el protocolo SMTP, a través del mencionado puerto.

En el ejemplo que te puse, basta con poner
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $transport = Email::Sender::Transport::SMTP->new({
    host => 'smtp.example.com',
    port => 25,
});

sendmail($email, { transport => $transport });  # enviamos el correo usando el transporte $transport
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Eso sí, hay que cambiar smtp.example.com con la dirección del servidor de correo que te han dado. Bien podría ser localhost.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Enviar correo datos de formulario y grabarlos en txt

Notapor cbrigati » 2011-02-03 10:49 @492

¡Hola!
¡Muchas gracias por contestar!

Te cuento:
Del formulario llamo a la rutina enviocorreo.pl, que yo coloqué en la ruta cgi-bin/.

Me arroja un error al abrir
http://www.clubmentorexpress.com/cgi-bin/enviocorreo.pl
Dice: The website cannot display the page.

Tengo varias dudas:
- ¿Quizás debo primero instalar los módulos que mencionas? ¿Cómo se instala un módulo?

- Los proveedores de servicio me indican que para conexión al correo vía Web use: http://mail.clubmentorexpress.com:32000 . ¿Debo colocar el ":32000" también?

La rutina enviocorreo.pl contiene el código que me mencionaste. (Por ahora muy básica para probar)

use Email::Simple;
use Email::Simple::Creator;
use Email::Sender::Simple 'sendmail';

my $email = Email::Simple->create(
header => [
From => '"Club Mentor Express" <[email protected]>',
To => '[email protected]',
Subject => 'Prueba envio',
],
body => "Esta es una prueba de envio de correos",
);

my $transport = Email::Sender::Transport::SMTP->new({
host => 'mail.clubmentorexpress.com',
port => 25,
});

sendmail($email, { transport => $transport }); # enviamos el correo usando el transporte $transport
cbrigati
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2011-01-28 13:19 @597

Re: Enviar correo datos de formulario y grabarlos en txt

Notapor explorer » 2011-02-03 11:34 @523

El URL que acaba en :32000 es un webmail. Tú necesitas un servidor de correo normal y corriente, que entienda el protocolo SMTP. Nada más y nada menos.

Si tu proveedor no es capaz de dártelo, sal de ahí inmediatamente.

Para que te funcione mi solución debes tener los módulos instalados (Email::Simple, Email::Sender, y demás).

Para instalarlos, valdría con colocarlos en el mismo directorio cgi-bin de tu programa.

En mi ordenador, los módulos están instalados así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
root@hs-988:~# locate Email/Simple
/usr/share/perl5/Email/Simple
/usr/share/perl5/Email/Simple/Creator.pm
/usr/share/perl5/Email/Simple/Header.pm
/usr/share/perl5/Email/Simple.pm
root@hs-988:~# locate Email/Sender
/usr/share/perl5/Email/Sender
/usr/share/perl5/Email/Sender/Failure
/usr/share/perl5/Email/Sender/Failure/Multi.pm
/usr/share/perl5/Email/Sender/Failure/Permanent.pm
/usr/share/perl5/Email/Sender/Failure.pm
/usr/share/perl5/Email/Sender/Failure/Temporary.pm
/usr/share/perl5/Email/Sender/Manual
/usr/share/perl5/Email/Sender/Manual.pm
/usr/share/perl5/Email/Sender/Manual/QuickStart.pm
/usr/share/perl5/Email/Sender.pm
/usr/share/perl5/Email/Sender/Role
/usr/share/perl5/Email/Sender/Role/CommonSending.pm
/usr/share/perl5/Email/Sender/Role/HasMessage.pm
/usr/share/perl5/Email/Sender/Simple.pm
/usr/share/perl5/Email/Sender/Success
/usr/share/perl5/Email/Sender/Success/Partial.pm
/usr/share/perl5/Email/Sender/Success.pm
/usr/share/perl5/Email/Sender/Transport
/usr/share/perl5/Email/Sender/Transport/DevNull.pm
/usr/share/perl5/Email/Sender/Transport/Failable.pm
/usr/share/perl5/Email/Sender/Transport/Maildir.pm
/usr/share/perl5/Email/Sender/Transport/Mbox.pm
/usr/share/perl5/Email/Sender/Transport.pm
/usr/share/perl5/Email/Sender/Transport/Print.pm
/usr/share/perl5/Email/Sender/Transport/Sendmail.pm
/usr/share/perl5/Email/Sender/Transport/SMTP
/usr/share/perl5/Email/Sender/Transport/SMTP/Persistent.pm
/usr/share/perl5/Email/Sender/Transport/SMTP.pm
/usr/share/perl5/Email/Sender/Transport/Test.pm
/usr/share/perl5/Email/Sender/Transport/Wrapper.pm
/usr/share/perl5/Email/Sender/Util.pm
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4

pero en tu servidor es muy posible que no puedas colocarles en /usr/share/perl5 ni en /usr/lib/perl5 ni en ninguno de los directorios que indique la variable @INC. Además, dependen de muchos otros, como el monstruoso Moose. Además de saber qué módulos necesitas, debes colocarles dentro de cgi-bin/ (por ejemplo cgi-bin/Email/Simple/Creator.pm)

Tienes que ponerte en contacto con ellos y preguntarles si en el sistema no tienen un gestor de transporte de correo, aunque no sea el sendmail. Y que lo que quieres es enviar correo como respuesta a una petición web. Lo que NO quieres es enviar correo usando un webmail (bueno, también se podría, pero estamos hablando de una tarea igual o más grande que subir todos esos módulos).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Enviar correo datos de formulario y grabarlos en txt

Notapor cbrigati » 2011-02-03 12:58 @581

¡Hola!

¡Lo del sendmail lo pude aclarar con el proveedor de servicios!
Me entregaron la ruta correcta: /usr/sbin/sendmail.

Bueno... ahora voy a intentar con lo de la grabación en archivos txt.

Te contaré.

¡¡¡Un millón de gracias!!!
Carolina
cbrigati
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2011-01-28 13:19 @597

Re: Enviar correo datos de formulario y grabarlos en txt

Notapor cbrigati » 2011-02-04 04:59 @249

Una pregunta:
Para abrir o editar un archivo del servidor, ¿éste debe estar en alguna ruta en particular? Cuando trato de abrirlo siempre me da error y ya yo le coloqué toda la permisología.

Cuando me indicas "ruta absoluta" ¿podría ser: http://www.clubmentorexpress.com/usr-bin/tabla.txt ?

¿Cómo identificar por qué no puede abrir el archivo?

¿Debe estar en la misma ruta del formulario html o en la misma ruta de las rutinas pl?

¿Habría una rutina super básica para abrir y mostrar lo que tiene un archivo en el servidor? También creo que en el servidor no tengo el módulo strict.

Gracias,
Carolina
cbrigati
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2011-01-28 13:19 @597

Re: Enviar correo datos de formulario y grabarlos en txt

Notapor explorer » 2011-02-04 06:42 @321

cbrigati escribiste:Una pregunta:
Más bien, unas cuantas... :)

cbrigati escribiste:Para abrir o editar un archivo del servidor, ¿éste debe estar en alguna ruta en particular? Cuando trato de abrirlo siempre me da error y ya yo le coloqué toda la permisología.
No lo sé, depende del alojamiento. Lo normal es que puedas editar cualquier fichero que sea de tu propiedad. Eso sí: recuerda que el servidor web ejecutará tu programa con SU personalidad, con lo que es posible que ÉL no tenga permisos de escritura en TUS ficheros.

cbrigati escribiste:Cuando me indicas "ruta absoluta" ¿podría ser: http://www.clubmentorexpress.com/usr-bin/tabla.txt ?
No, me refiero a la ruta absoluta en el sistema de ficheros de tu alojamiento. Por ejemplo: /home/users/clubmentorexpress/public_html/usr-bin/tabla.txt .

cbrigati escribiste:¿Cómo identificar por qué no puede abrir el archivo?
Mira mi CGI mínimo. Con la ayuda de CGI::Carp los errores salen en la pantalla del navegador. También es importante que puedas ver los ficheros de registro (los logs) de actividad y de errores de tu sitio web. Ahí estarán reflejados (casi) todos los errores.

cbrigati escribiste:¿Debe estar en la misma ruta del formulario html o en la misma ruta de las rutinas pl?
No tiene porqué. Mientras el programa tenga acceso (permisos) de lectura entre él y la carpeta donde se encuentran, todo va bien.

cbrigati escribiste:¿Habría una rutina super básica para abrir y mostrar lo que tiene un archivo en el servidor?

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use CGI ':standard';
  2. my $archivo = do { undef $/; open F, "archivo.txt"; <F> };
  3. print header,
  4.       start_html,
  5.       pre($archivo),
  6.       end_html,
  7.       ;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


cbrigati escribiste:También creo que en el servidor no tengo el módulo strict.
Eso es imposible. Entonces no es un Perl de verdad. Comenta la línea o quítala, y luego te buscas otro proveedor.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Enviar correo datos de formulario y grabarlos en txt

Notapor cbrigati » 2011-02-04 12:04 @544

¡No sé cómo agradecerte!

¡¡¡Ya estoy encaminada!!! Parece funcionar poco a poco.

Es todo un misterio para mi, a pesar que estudie Sistemas no conozco este lenguaje Perl. Me desempeño como consultor SAP de Finanzas.

Estos formularios y archivos son para la página del Club de Atletismo al cual pertenezco.

Muchas gracias por todo.
Carolina
cbrigati
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2011-01-28 13:19 @597

Siguiente

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron