• 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.

Re: Enviar correo desde Perl

Notapor noa86 » 2011-05-06 12:58 @582

Estoy con Fedora Core... Sí, los demás módulos los instalé sin problemas. Pero este no sé por qué no me deja...

Lo he solucionado instalandolo de la siguiente manera:

yum install perl-Net-SSLeay
Última edición por noa86 el 2011-05-06 13:12 @591, editado 1 vez en total
noa86
Perlero nuevo
Perlero nuevo
 
Mensajes: 93
Registrado: 2010-11-15 14:43 @655

Publicidad

Re: Enviar correo desde Perl

Notapor explorer » 2011-05-06 13:11 @591

En una distribución como Fedora Core, es infinitamente mucho más cómodo instalar paquetes como Net::SSLeay desde el repositorio de software de Fedora, con el comando yum (o, desde el entorno gráfico, vas a System -> Administration -> Add/Remove Software). Allí, buscas el paquete que se parezca a Net::SSLeay (creo que es Perl-Net-SSLeay), y lo instalas.

La ventaja de esto, es que Fedora Core te ofrece estos módulos ya compilados, con todas las bibliotecas y todas las dependencias resueltas, por lo que no necesitarás hacer nada más.

En cambio, con el comando cpan, intentará bajarlo desde CPAN, y compilarlo para tu sistema. Y si no tienes el make, un compilador de C, y las bibliotecas de las que depende Net::SSLeay, te será muy difícil hacer la instalación.

Si fuera un módulo que no necesitara de bibliotecas externas escritas en C, la instalación desde CPAN sería muy sencilla, pero el caso de Net::SSLeay es especial.
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 13:21 @598

Vale, ahora me sale el siguiente error

Error sending email: Email::Send::Gmail: error connecting to server smtp.gmail.com at /usr/local/share/perl5/Email/Send.pm line 252

¿Puede que me falte algún módulo?
noa86
Perlero nuevo
Perlero nuevo
 
Mensajes: 93
Registrado: 2010-11-15 14:43 @655

Re: Enviar correo desde Perl

Notapor explorer » 2011-05-06 14:16 @636

No es

Email::Send::Transport::SMTP::TLS, sino

Email::Sender::Transport::SMTP::TLS
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 14:20 @639

Pero ese módulo no lo uso ahora mismo, aunque lo tengo instalado, Email::Sender::Transport::SMTP::TLS
Mi código actual es:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2. use strict;
  3. use warnings;
  4. use Email::Send;
  5. use Email::Send::Gmail;
  6. use Email::Simple::Creator;
  7.  
  8. my $email = Email::Simple->create(
  9.       header => [
  10.           From    => 'x\@gmail.com',
  11.           To      => 'y\@gmail.com',
  12.           Subject => 'Server down',
  13.       ],
  14.       body => 'The server is down. Start panicing.',
  15.   );
  16.  
  17.  
  18. my $sender = Email::Send->new(
  19.       {   mailer      => 'Gmail',
  20.           mailer_args => [
  21.               username => 'x\@gmail.com',
  22.               password => 'xxxx',
  23.           ]
  24.       }
  25.   );
  26. eval { $sender->send($email) };
  27. die "Error sending email: $@" if $@;
  28.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4



Y me sale: Error sending email: Email::Send::Gmail: error connecting to server smtp.gmail.com at /usr/local/share/perl5/Email/Send.pm line 252

Los correos y la password están correctas.
noa86
Perlero nuevo
Perlero nuevo
 
Mensajes: 93
Registrado: 2010-11-15 14:43 @655

Re: Enviar correo desde Perl

Notapor explorer » 2011-05-06 14:34 @648

Mira: los módulos de la familia Email::Send::* son antiguos, y algunos no funcionan bien. Por eso, los autores de módulos crearon la familia Email::Sender::*, que es más moderna, con menos errores y más funcionalidad.

Por otra parte... si se trata de enviar correos a Gmail, CPAN me dice que el módulo más moderno para enviarlos es Email::Send::SMTP::Gmail. Si lo instalas, no necesitarás más que este módulo y estos otros:

use Net::SMTP::SSL;
use MIME::Base64;
use File::Spec;
use LWP::MediaTypes;

de los cuales, me parece que File::Spec y MIME::Base64 ya los tendrás instalados de base. Yo creo que es la solución más sencilla y cómoda, para ti, para mandar correos desde tu máquina.

Mira el ejemplo en la sinopsis del módulo, para que veas que el modo de crear correos, adjuntos, y enviarlos, es casi igual a los otros módulos.

Es recomendable siempre usar los módulos más modernos, ya que a veces los protocolos o formas de acceder van cambiando con el tiempo. Y si, además, lo ha hecho un tal Juan José San Martín, pues seguro que también puede resolverte alguna duda :)
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 15:10 @674

Muchas gracias por el módulo, pero me sigue dando error en la conexión SMTP.

Could not connect to SMTP server

No sé cuál puede ser el problema... ¿Puede que tenga que configurar algo en Fedora? No se me ocurre cuál puede ser el problema...

¿Puede ser el problema que trabajo con localhost?
noa86
Perlero nuevo
Perlero nuevo
 
Mensajes: 93
Registrado: 2010-11-15 14:43 @655

Re: Enviar correo desde Perl

Notapor explorer » 2011-05-06 19:42 @862

Aunque trabajes en localhost, tu estás indicando el nombre de servidor al que tiene que conectarse, para enviar el correo.

¿Seguro que tienes acceso a Internet? Es decir, desde la línea de comandos, con el comando ping, ¿se conecta?

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
explorer@casa:~/Documentos/Desarrollo/perl> ping smtp.gmail.com
PING gmail-smtp-msa.l.google.com (209.85.227.109) 56(84) bytes of data.
64 bytes from wy-in-f109.1e100.net (209.85.227.109): icmp_req=1 ttl=53 time=120 ms
64 bytes from wy-in-f109.1e100.net (209.85.227.109): icmp_req=2 ttl=53 time=200 ms
^C
--- gmail-smtp-msa.l.google.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 120.895/160.676/200.458/39.783 ms
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Mira, he hecho la prueba en mi máquina:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
casa:/usr/lib/perl5 # cpanp install Email::Send::SMTP::Gmail
[MSG] Checking if source files are up to date
[MSG] Updating source file '01mailrc.txt.gz'
[MSG] Trying to get 'ftp://ftp.rediris.es/mirror/CPAN/authors/01mailrc.txt.gz'
[MSG] Updating source file '03modlist.data.gz'
[MSG] Trying to get 'ftp://ftp.rediris.es/mirror/CPAN/modules/03modlist.data.gz'
[MSG] Updating source file '02packages.details.txt.gz'
[MSG] Trying to get 'ftp://ftp.rediris.es/mirror/CPAN/modules/02packages.details.txt.gz'
[MSG] No '/root/.cpanplus/custom-sources' dir, skipping custom sources
[MSG] Rebuilding author tree, this might take a while
[MSG] Rebuilding module tree, this might take a while
[MSG] No '/root/.cpanplus/custom-sources' dir, skipping custom sources
[MSG] No '/root/.cpanplus/custom-sources' dir, skipping custom sources
Installing Email::Send::SMTP::Gmail (0.22)
[MSG] Trying to get 'ftp://ftp.rediris.es/mirror/CPAN/authors/id/P/PE/PECO/Email-Send-SMTP-Gmail-0.22.tar.gz'
[MSG] Trying to get 'ftp://ftp.rediris.es/mirror/CPAN/authors/id/P/PE/PECO/CHECKSUMS'
[MSG] Checksum matches for 'Email-Send-SMTP-Gmail-0.22.tar.gz'
[MSG] Extracted 'Email-Send-SMTP-Gmail-0.22/'
[MSG] Extracted 'Email-Send-SMTP-Gmail-0.22/META.yml'
[MSG] Extracted 'Email-Send-SMTP-Gmail-0.22/t/'
[MSG] Extracted 'Email-Send-SMTP-Gmail-0.22/t/00-load.t'
[MSG] Extracted 'Email-Send-SMTP-Gmail-0.22/t/pod-coverage.t'
[MSG] Extracted 'Email-Send-SMTP-Gmail-0.22/t/manifest.t'
[MSG] Extracted 'Email-Send-SMTP-Gmail-0.22/t/pod.t'
[MSG] Extracted 'Email-Send-SMTP-Gmail-0.22/MANIFEST'
[MSG] Extracted 'Email-Send-SMTP-Gmail-0.22/Changes'
[MSG] Extracted 'Email-Send-SMTP-Gmail-0.22/lib/'
[MSG] Extracted 'Email-Send-SMTP-Gmail-0.22/lib/Email/'
[MSG] Extracted 'Email-Send-SMTP-Gmail-0.22/lib/Email/Send/'
[MSG] Extracted 'Email-Send-SMTP-Gmail-0.22/lib/Email/Send/SMTP/'
[MSG] Extracted 'Email-Send-SMTP-Gmail-0.22/lib/Email/Send/SMTP/Gmail.pm'
[MSG] Extracted 'Email-Send-SMTP-Gmail-0.22/Makefile.PL'
[MSG] Extracted 'Email-Send-SMTP-Gmail-0.22/README'
[MSG] Extracted 'Email::Send::SMTP::Gmail' to '/root/.cpanplus/5.12.3/build/Email-Send-SMTP-Gmail-0.22'
Running [/usr/bin/perl /usr/bin/cpanp-run-perl /root/.cpanplus/5.12.3/build/Email-Send-SMTP-Gmail-0.22/Makefile.PL]...
Checking if your kit is complete...
Looks good
Warning: prerequisite Net::SMTP_auth 0 not found.
Writing Makefile for Email::Send::SMTP::Gmail
[MSG] Module 'Email::Send::SMTP::Gmail' requires 'Net::SMTP_auth' version '0' to be installed

Module 'Email::Send::SMTP::Gmail' requires 'Net::SMTP_auth' to be installed

If you don't wish to see this question anymore
you can disable it by entering the following commands on the prompt:
    '
s conf prereqs 1; s save'


  1> Yes
  2> No
  3> Yes to all (for this module)
  4> No to all  (for this module)

Should I install this module? [1]: 3
[MSG] Trying to get '
ftp://ftp.rediris.es/mirror/CPAN/authors/id/A/AP/APLEINER/Net-SMTP_auth-0.08.tar.gz'
[MSG] Trying to get '
ftp://ftp.rediris.es/mirror/CPAN/authors/id/A/AP/APLEINER/CHECKSUMS'
[MSG] Checksum matches for '
Net-SMTP_auth-0.08.tar.gz'
[MSG] Extracted '
Net-SMTP_auth-0.08/'
[MSG] Extracted '
Net-SMTP_auth-0.08/eg/'
[MSG] Extracted '
Net-SMTP_auth-0.08/eg/smtp-tester.pl'
[MSG] Extracted '
Net-SMTP_auth-0.08/SMTP_auth.pm'
[MSG] Extracted '
Net-SMTP_auth-0.08/README'
[MSG] Extracted '
Net-SMTP_auth-0.08/Changes'
[MSG] Extracted '
Net-SMTP_auth-0.08/test.pl'
[MSG] Extracted '
Net-SMTP_auth-0.08/Makefile.PL'
[MSG] Extracted '
Net-SMTP_auth-0.08/MANIFEST'
[MSG] Extracted '
Net::SMTP_auth' to '/root/.cpanplus/5.12.3/build/Net-SMTP_auth-0.08'
Running [/usr/bin/perl /usr/bin/cpanp-run-perl /root/.cpanplus/5.12.3/build/Net-SMTP_auth-0.08/Makefile.PL]...
Checking if your kit is complete...
Looks good
Writing Makefile for Net::SMTP_auth
Running [/usr/bin/make]...
cp SMTP_auth.pm blib/lib/Net/SMTP_auth.pm
Manifying blib/man3/Net::SMTP_auth.3pm
Running [/usr/bin/make test]...
PERL_DL_NONLAZY=1 /usr/bin/perl "-Iblib/lib" "-Iblib/arch" test.pl
1..1
ok 1
Running [/usr/bin/make install]...
Installing /usr/lib/perl5/site_perl/5.12.3/Net/SMTP_auth.pm
Installing /usr/share/man/man3/Net::SMTP_auth.3pm
Appending installation info to /usr/lib/perl5/5.12.3/i586-linux-thread-multi/perllocal.pod
Running [/usr/bin/make]...
cp lib/Email/Send/SMTP/Gmail.pm blib/lib/Email/Send/SMTP/Gmail.pm
Manifying blib/man3/Email::Send::SMTP::Gmail.3pm
Running [/usr/bin/make test]...
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, '
blib/lib', 'blib/arch')" t/*.t
# Testing Email::Send::SMTP::Gmail 0.22, Perl 5.012003, /usr/bin/perl
t/00-load.t ....... ok
t/manifest.t ...... skipped: Author tests not required for installation
t/pod-coverage.t .. skipped: Test::Pod::Coverage 1.08 required for testing POD coverage
t/pod.t ........... skipped: Test::Pod 1.22 required for testing POD
All tests successful.
Files=4, Tests=1,  1 wallclock secs ( 0.06 usr  0.03 sys +  0.30 cusr  0.05 csys =  0.44 CPU)
Result: PASS
Running [/usr/bin/make install]...
Installing /usr/lib/perl5/site_perl/5.12.3/Email/Send/SMTP/Gmail.pm
Installing /usr/share/man/man3/Email::Send::SMTP::Gmail.3pm
Appending installation info to /usr/lib/perl5/5.12.3/i586-linux-thread-multi/perllocal.pod
*** Install log written to:
  /root/.cpanplus/install-logs/Email-Send-SMTP-Gmail-0.22-1304728468.log

Module '
Email::Send::SMTP::Gmail' installed successfully
No errors installing all modules

casa:/usr/lib/perl5 #
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
He escrito este programa:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. use Email::Send::SMTP::Gmail;
  4.  
  5. my $mail=Email::Send::SMTP::Gmail->new(
  6.     -smtp=>'gmail.com',
  7.     -login=>'[email protected]',
  8.     -pass=>'contraseña',
  9. );
  10.  
  11. $mail->send(
  12.     -to=>'miotra@dirección.de.correo.com',
  13.     -subject=>'Hello!',
  14.     -verbose=>'1',
  15.     -body=>'Just testing it',
  16. #    -attachments=>'full_path_to_file',
  17. );
  18.  
  19. $mail->bye;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
y sale:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
explorer@casa:~/Documentos/Desarrollo> ./kk.pl
Attachments successfully verified
With No attachments
Sending email
Mail sent!
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
y, a los pocos segundos, me llegó el correo.
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-07 04:29 @228

Puedo hacer ping sin problemas, y he copiado el código a un archivo en mi escritorio. He ejecutado desde terminal ./email.pl y me sale lo mismo que a ti, y me ha llegado también el correo a la perfección.

El error me sale al ejecutarlo en el navegador, con http://localhost/cgi-bin/email.pl

[Sat May 07 11:24:34 2011] [error] [client x.x.x.x] Could not connect to SMTP server
[Sat May 07 11:24:34 2011] [error] [client x.x.x.x] Premature end of script headers: email.pl
noa86
Perlero nuevo
Perlero nuevo
 
Mensajes: 93
Registrado: 2010-11-15 14:43 @655

Re: Enviar correo desde Perl

Notapor explorer » 2011-05-07 06:07 @296

A ver... una cosa es ejecutar un programa en la línea de comandos y otra bien distinta, como si fuera un CGI.

Para ejecutar como CGI, el programa debe enviar un preámbulo al navegador del usuario, para que sepa qué es lo que está recibiendo.

Eso es justo lo que dice la segunda línea del error.

Solo tienes que poner un

print "Content-type: text/html\n\n";

o un

print "Content-type: text/plain\n\n";

nada más empezar el programa.
(Más información, en la sección Tutoriales / CGI de este sitio web, en la parte de arriba de esta página.)

En cuanto al primer error, parece ser que sale de la línea 32 del módulo, indicando que no se ha podido conectar al servidor de correo. Veo también, en esa línea, que hay una opción para activar el modo de depurado en el módulo Net::SMTP::SSL, así que ahí te puede dar más información.

Las primeras líneas del programa quedarían ahora:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. use Email::Send::SMTP::Gmail;
  4.  
  5. print "Content-type: text/plain\n\n";
  6.  
  7. my $mail=Email::Send::SMTP::Gmail->new(
  8.     -smtp   => 'gmail.com',
  9.     -login  => '[email protected]',
  10.     -pass   => 'contraseña',
  11.     -debug  => 1,
  12. );
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Con el debug activado, verás más información del momento de la conexión, y así podrías saber por qué sale error.
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

AnteriorSiguiente

Volver a Básico

¿Quién está conectado?

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