Página 1 de 3

Enviar correo desde Perl

NotaPublicado: 2011-05-02 15:52 @703
por noa86
¡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.

Re: Enviar correo desde Perl

NotaPublicado: 2011-05-02 16:16 @719
por explorer
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.003 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.

Re: Enviar correo desde Perl

NotaPublicado: 2011-05-03 14:55 @663
por noa86
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í??

Re: Enviar correo desde Perl

NotaPublicado: 2011-05-03 18:13 @801
por explorer
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).

Re: Enviar correo desde Perl

NotaPublicado: 2011-05-04 16:15 @719
por noa86
¿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.

Re: Enviar correo desde Perl

NotaPublicado: 2011-05-04 17:20 @763
por explorer
¿Y seguro que para enviar el correo debe conectarse al servidor 'smtp.gmail.com' por el puerto 2525?

Lo dudo...

Re: Enviar correo desde Perl

NotaPublicado: 2011-05-05 03:04 @169
por noa86
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...

Re: Enviar correo desde Perl

NotaPublicado: 2011-05-05 04:38 @234
por explorer
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.

Re: Enviar correo desde Perl

NotaPublicado: 2011-05-06 12:34 @565
por noa86
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?

Re: Enviar correo desde Perl

NotaPublicado: 2011-05-06 12:38 @568
por explorer
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...