• Publicidad

Enviar correo desde Perl

¿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 desde Perl

Notapor noa86 » 2011-05-02 15:52 @703

¡Saludos!

Me gustaría saber si hay alguna posibilidad de enviar un correo a un usuario, para que, por ejemplo, le llegue un enlace para modificación de contraseña, para la primera vez que inicia sesión en una página concreta, para el tema de seguridad.

¿Algún tutorial? ¿Ejemplo?

Gracias.
noa86
Perlero nuevo
Perlero nuevo
 
Mensajes: 93
Registrado: 2010-11-15 14:43 @655

Publicidad

Re: Enviar correo desde Perl

Notapor explorer » 2011-05-02 16:16 @719

Claro que se puede enviar.

Se puede crear un correo electrónico de muchas maneras.

Por ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use Email::Simple;
  2. use Email::Simple::Creator;
  3. use Email::Sender::Simple       'sendmail';
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Luego, en la parte del programa donde tenemos que crear el correo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.                 # Envío del correo
  2.                 my $email = Email::Simple->create(
  3.                     header => [
  4.                         From    => '"Dani y Cris Web" <informació[email protected]>',
  5.                         To      => '[email protected]',
  6.                         Subject => 'Foto nueva',
  7.                     ],
  8.                     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",
  9.                 );
  10.  
  11.                 sendmail($email);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

En la entrada body va el mensaje de texto. Ahí puedes colocar tu enlace.

Y luego lo envío con la función sendmail(). Y puedo hacerlo porque en mi sistema operativo hay un ejecutable que se llama así (el módulo Email::Sender::Simple intentará, primero, enviar el correo usando este ejecutable). Si no estás en este caso, deberás indicar un medio de transporte.

Hay otros módulos para enviar correos. En estos foros hemos hablado de MIME::Entity.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14477
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Enviar correo desde Perl

Notapor noa86 » 2011-05-03 14:55 @663

No sé si es porque tengo el ejecutable o no, pero me sale internal server error.

El ejecutable sendmail ¿tengo que instalarlo en mi Linux, o configurarlo o así??
noa86
Perlero nuevo
Perlero nuevo
 
Mensajes: 93
Registrado: 2010-11-15 14:43 @655

Re: Enviar correo desde Perl

Notapor explorer » 2011-05-03 18:13 @801

En las últimas distribuciones Linux ya no suele venir instalado. Más bien, suele venir PostFix.

Si no tienes un agente de transporte de correo en tu sistema, deberás definir otro medio de transporte.

Dicho de otra manera: ¿cómo envías correo electrónico desde tu ordenador?

Es posible que no tengas ningún agente de transporte instalado (como la mayor parte de los equipos), así que deberás, en tu programa, crear la conexión SMTP hacia los servidores de correo de tu proveedor de Internet. En el enlace que te puse había este ejemplo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  my $transport = Email::Sender::Transport::SMTP->new({
    host => 'smtp.example.com',
    port => 2525,
  });

  sendmail($email, { transport => $transport });
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Con Email::Sender::Transport::SMTP definimos un nuevo transporte basado en el protocolo SMTP. Indicamos a qué servidor y a qué puerto ha de conectarse. Luego, solo tenemos que indicar este transporte dentro de la función sendmail() (función importada por el módulo Email::Sender::Simple).

En CPAN puedes encontrar otras opciones, como Email::Sender::Transport::SMTP::TLS, que es capaz de enviar correos usando el protocolo SMTP::TLS, el que soporta Gmail (y muchos otros proveedores de correo electrónico).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14477
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Enviar correo desde Perl

Notapor noa86 » 2011-05-04 16:15 @719

¿Alguna otra manera, con algún otro módulo? Me salen muchos errores, y no consigo saber por qué. Los módulos están correctamente instalados y me salen varios errores.

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
unable to establish SMTP connection

Trace begun at /usr/local/share/perl5/Email/Sender/Transport/SMTP.pm line 95
Email::Sender::Transport::SMTP::_throw('Email::Sender::Transport::SMTP=HASH(0x9c9b138)', 'unable to establish SMTP connection') called at /usr/local/share/perl5/Email/Sender/Transport/SMTP.pm line 62
Email::Sender::Transport::SMTP::_smtp_client('Email::Sender::Transport::SMTP=HASH(0x9c9b138)') called at /usr/local/share/perl5/Email/Sender/Transport/SMTP.pm line 104
Email::Sender::Transport::SMTP::send_email('Email::Sender::Transport::SMTP=HASH(0x9c9b138)', 'Email::Abstract=ARRAY(0x9c81998)', 'HASH(0xa4da1a8)') called at /usr/local/share/perl5/Email/Sender/
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2.  
  3. use Email::Simple::Creator;
  4. use Email::Sender::Simple qw(sendmail);
  5. use Email::Sender::Transport::SMTP;
  6.  
  7.  
  8. my $transport = Email::Sender::Transport::SMTP->new({
  9.         host => 'smtp.gmail.com',
  10.     port => 2525,
  11.  
  12. });
  13.  
  14. # Envío del correo
  15. my $email = Email::Simple->create(
  16.                     header => [
  17.                         From    =>
  18.                         To      =>
  19.                         Subject => 'Foto nueva',
  20.                     ],
  21.                     body => 'Hay una nueva foto en el web:',
  22.                 );
  23.  
  24.  
  25.  
  26. sendmail($email, { transport => $transport }) ||  die "Error sending email: $_";;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


En los campos from y to tengo los correos adecuados como has puesto tu anteriormente con comillas simples.
noa86
Perlero nuevo
Perlero nuevo
 
Mensajes: 93
Registrado: 2010-11-15 14:43 @655

Re: Enviar correo desde Perl

Notapor explorer » 2011-05-04 17:20 @763

¿Y seguro que para enviar el correo debe conectarse al servidor 'smtp.gmail.com' por el puerto 2525?

Lo dudo...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14477
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Enviar correo desde Perl

Notapor noa86 » 2011-05-05 03:04 @169

Disculpa, no me había dado cuenta, lo tengo puesto con el puerto 587, que vi, que era con ese... y también probé con el 465. Y nada. sigue saliendo el mismo error...
noa86
Perlero nuevo
Perlero nuevo
 
Mensajes: 93
Registrado: 2010-11-15 14:43 @655

Re: Enviar correo desde Perl

Notapor explorer » 2011-05-05 04:38 @234

Si quieres usar el servidor de Gmail, deberás usar Email::Sender::Transport::SMTP::TLS, como te enlacé en la anterior respuesta. No solo hay que indicar servidor y puerto, sino que también tienes que identificarte.

Es más, en estos días, salvo que tengas un servidor de correo en tu propia red local, casi siempre vas a tener que identificarte.

En la sinopsis del módulo tienes un ejemplo completo.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14477
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Enviar correo desde Perl

Notapor noa86 » 2011-05-06 12:34 @565

He intentado utilizar este mismo ejemplo

http://search.cpan.org/~lbrocard/Email- ... d/Gmail.pm

y me sale un error:

Can't locate Net/SSLeay.pm in @INC ...

Lo que interpreto es que no tengo instalado el módulo Net::SSleay, pero realizo en el terminal

perl -MCPAN -e shell

install Net::SSLeay

Y no me deja instalarlo.

Sintáxis: [ Descargar ] [ Ocultar ]
  1. make: *** [SSLeay.o] Error 1 
  2.  FLORA/Net-SSLeay-1.36.tar.gz 
  3.  /usr/bin/make -- NOT OK 
  4. Running make test 
  5.  Can't test without successful make 
  6. Running make install 
  7.  Make had returned bad status, install seems impossible 


¿Alguna sugerencia?
noa86
Perlero nuevo
Perlero nuevo
 
Mensajes: 93
Registrado: 2010-11-15 14:43 @655

Re: Enviar correo desde Perl

Notapor explorer » 2011-05-06 12:38 @568

No te deja instalarlo porque dice que no tienes un programa make.

¿En qué sistema operativo estás? Si es Linux/Unix, debería estar...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14477
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

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