• Publicidad

Enviar correo a cuenta GMail

¿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 a cuenta GMail

Notapor monitor9 » 2013-01-24 07:11 @341

Buenos días.

Antes de nada, agradecer la ayuda que me puedan prestar.

Estoy intentando desarrollar un proceso que envíe un correo electrónico con un texto a una dirección determinada de GMail. Para comenzar esta tarea he ido viendo la información que hay en los foros de esta web, pero me he quedado un poco atascado, el correo no se envía y muestra mensajes de error.

Dispongo de una máquina virtual (VMWare Player) que tiene instalado Linux (Debian). El código que he comenzado a desarrollar es el siguiente:

(Perdón por escribirlo sin formato Perl, pero me lo convierte mal)
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use Email::Send::SMTP::Gmail;
  3. print "Content-type: text/plain\n\n";
  4. my $mail = Email::Send::SMTP::Gmail->new(
  5.     -smtp  => 'gmail.com',
  6.     -login => '[email protected]',
  7.     -pass  => 'contraseña',
  8.     -debug => 1,
  9. );
  10. $mail->send(
  11.     -to          => '[email protected]',
  12.     -subject     => 'Hola',
  13.     -verbose     => '1',
  14.     -body        => 'Correo de prueba',
  15.     -attachments => 'full_path_to_file',
  16. );
  17. $mail->bye;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Cuando lo ejecuto muestra la siguiente información:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
root@lamp /etc/mrtg# ./envioMail6.pl
Content-type: text/plain
*******************************************************************
Using the default of SSL_verify_mode of SSL_VERIFY_NONE for client
is depreciated! Please set SSL_verify_mode to SSL_VERIFY_PEER
together with SSL_ca_file|SSL_ca_path for verification.
If you really don't want to verify the certificate and keep the
connection open to Man-In-The-Middle attacks please set
SSL_verify_mode explicitly to SSL_VERIFY_NONE in your application.
*******************************************************************
at /usr/local/share/perl/5.10.1/Email/Send/SMTP/Gmail.pm line 36.
Could not connect to SMTP server
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


El error hace referencia a una línea del siguiente archivo (o así lo entiendo) del que muestro una parte:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. package Email::Send::SMTP::Gmail;
  2. use strict;
  3. use warnings;
  4. use vars qw($VERSION);
  5. $VERSION='0.32';
  6. use Net::SMTP::SSL;
  7. use MIME::Base64;
  8. use File::Spec;
  9. use LWP::MediaTypes;
  10. sub new{
  11.   my $class=shift;
  12.   my $self={@_};
  13.   bless($self, $class);
  14.   my %properties=@_;
  15.   my $smtp='smtp.gmail.com'; # Default value
  16.   my $port=465; # Default value
  17.   $smtp=$properties{'-smtp'} if defined $properties{'-smtp'};
  18.   $port=$properties{'-port'} if defined $properties{'-port'};
  19.   $self->_initsmtp($smtp,$port,$properties{'-login'},$properties{'-pass'},$properties{'-debug'});
  20.   $self->{from}=$properties{'-login'};
  21.   return $self;
  22. }
  23.  
  24. sub _initsmtp{
  25.   my $self=shift;
  26.   my $smtp=shift;
  27.   my $port=shift;
  28.   my $login=shift;
  29.   my $pass=shift;
  30.   my $debug=shift;
  31.   # The module sets the SMTP google but could use another!
  32.   if (not $self->{sender} =
  33.   Net::SMTP::SSL->new($smtp,
  34.   Port =>  $port,
  35.   Debug => $debug)
  36.   ){
  37.         die "Could not connect to SMTP server\n";
  38.   }
  39.   # Authenticate
  40.   $self->{sender}->auth($login,$pass) || die "Authentication (SMTP) failed\n";
  41. }
  42.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Nota: he comprobado que si intento hacer ping desde el shell con ping smtp.gmail.com me muestra este error:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
ping: unknown host smtp.gmail.com
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Por otro lado puedo descargar paquetes (con apt-get install <nombrePaquete>) y módulos desde CPAN (con perl -MCPAN -e shell) sin problemas.

La salida a Internet es a través de una proxy, la tengo configurada de forma correcta en el archivo bash.bashrc. No sé si este dato es importante; lo pongo porque no sé si será un problema de conexión.


Muchas gracias.
Avatar de Usuario
monitor9
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2012-12-18 08:15 @386
Ubicación: Madrid

Publicidad

Re: Enviar correo a cuenta GMail

Notapor explorer » 2013-01-24 13:51 @619

El problema es el siguiente: en la línea 300 de IO::Socket::SSL (llamado desde Net::SMTP::SSL, llamado desde Email::Send::SMTP::Gmail), se comprueba si lo que se quiere hacer es crear un servidor, o si no se ha definido el argumento SSL_verify_mode o si el valor por defecto de ese parámetro es SSL_VERIFY_NONE. Y como estamos realizando un llamada como un cliente, sí que se dan todas esas circunstancias, por lo que sale ese mensaje de error y termina (línea 303).

Lo ideal sería que en la línea 36 de Email::Send::SMTP::Gmail, la llamada a Net::SMTP::SSL->new() incorporara un argumento más, de la forma

SSL_verify_mode => SSL_VERIFY_NONE,

que es lo que el mensaje nos pide que hagamos. Así que la solución sería modificar ese módulo. Pero... no serviría de nada porque el origen del problema está en las líneas 41 a 50 de Net::SMTP: no tiene en cuenta la presencia de argumentos extra.

Puedes modificar el módulo IO::Socket::SSL, y comentar las líneas 300 a 314, para que no salga el mensaje.

Este es un error conocido e informado.

Mientras, puedes intentar enviar correos con Email::Send::SMTP::TLS.

Edito: Fijándome un poco más... resulta que ese mensaje es solo un mensaje de advertencia. El problema está en la última línea: no ha podido conectarse al servidor de correo. Y el fallo del ping también lo confirma: el sistema de resolución de nombres está fallando. Mientras no te funcione el ping en la línea de comandos, no te funcionará el programa.
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

Re: Enviar correo a cuenta GMail

Notapor explorer » 2013-01-24 15:41 @695

He solventado la salida del mensaje de la siguiente manera.

En Email::Send::SMTP::Gmail:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.   if (not $self->{sender} = Net::SMTP::SSL->new(
  2.       $smtp,
  3.       Port => $port,
  4.       Debug => $debug,
  5.       SSL_verify_mode => IO::Socket::SSL::SSL_VERIFY_NONE,
  6.   )) {
  7.       die "Could not connect to SMTP server\n";
  8.   }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

y en Net::SMTP:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.   foreach $h (@{ref($hosts) ? $hosts : [$hosts]}) {
  2.     $obj = $type->SUPER::new(
  3.       %arg,                       # <= nueva línea
  4.       PeerAddr => ($host = $h),
  5.       PeerPort => $arg{Port} || 'smtp(25)',
  6.       LocalAddr => $arg{LocalAddr},
  7.       LocalPort => $arg{LocalPort},
  8.       Proto     => 'tcp',
  9.       Timeout   => defined $arg{Timeout} ? $arg{Timeout} : 120,
  10.     )
  11.     and last;
  12.   }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Es decir: pasamos el argumento que nos piden en la llamada new() a Net::SMTP::SSL, y dentro de Net::SMTP agregamos %arg a la llamada, para que Net::SMTP::SSL pueda pasar nuestro argumento a IO::Socket::SSL.

Edito: El autor de Email::Send::SMTP::Gmail actualizó su módulo el mismo día, incorporando lo sugerido en este mensaje. Solo queda que el autor de Net::SMTP haga lo mismo. Mientras tanto, hay que editarlo a mano y agregar la línea 42 anterior.
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

Re: Enviar correo a cuenta GMail

Notapor salva » 2013-01-28 04:12 @217

Solo un comentario: enviar correo a cuentas de Gmail no tiene nada de especial y no hace falta un módulo específico. Puedes usar cualquier módulo que permita enviar correos.
Avatar de Usuario
salva
Perlero nuevo
Perlero nuevo
 
Mensajes: 200
Registrado: 2008-01-03 15:19 @680

Re: Enviar correo a cuenta GMail

Notapor monitor9 » 2013-02-06 07:39 @361

Hola, gracias por las indicaciones. La verdad, no sé cuál puede ser el problema, pero no consigo enviar correos.

He visto que se abrió un tema de envío de correo en el foro donde finalmente consiguen enviar correos con el siguiente código:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.        
  3. use warnings;
  4. use strict;
  5. use Net::SMTP::SSL;
  6.      
  7. my $user = '[email protected]';
  8. my $pass = 'xxx';
  9. my $server = 'smtp.gmail.com';
  10. my $to = '[email protected]';
  11. my $from_email = '[email protected]';
  12. my $subject= 'Prueba desde Perl';
  13.  
  14. my $smtps      = Net::SMTP::SSL->new($server, Port => 465, DEBUG => 1, );
  15.  
  16. # authenticate
  17. defined ($smtps->auth($user, $pass))
  18. or die "Can't authenticate: $!\n";
  19.      
  20. # send preliminary data
  21. $smtps->mail("$from_email\n");
  22. $smtps->to("$to\n");
  23. $smtps->data();    
  24.  
  25. #send header
  26. $smtps->datasend("From: $user\n");
  27. $smtps->datasend("To: $to\n");
  28. $smtps->datasend("Subject: $subject\n");
  29. $smtps->datasend("Reply-To: $from_email\n");
  30. $smtps->datasend("MIME-Version: 1.0\n");
  31. $smtps->datasend("Content-Type: text/plain\n");
  32. $smtps->datasend("\n");
  33.      
  34. #send text body
  35. $smtps->datasend("Si estas leyendo este correo es que ¡¡¡¡¡¡LO HE CONSEGUIDO!!!!!.\n");
  36.      
  37. $smtps->datasend("\n");
  38. $smtps->dataend();
  39. print " email sended\n";
  40.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Me está tirando el siguiente error:
Can't call method "auth" on an undefined value at ./envioMail10.pl line 17


Lo que necesito es enviar un correo, me da igual cómo desarrollarlo y los módulos que pueda requerir. Les recuerdo un poco tengo una máquina virtual(VMWare Player), con sistema operativo Linux(Debian) y viene instalado Postfix.

Tengo instalados los siguientes módulos desde CPAN:
Net::SMTP
Net::SMTP::SSL
MIME::Lite
MIME::Base64
Authen::SASL
MIME::Lite::TT

No estoy encontrando una solución, todo lo que encuentro recomienda instalar los módulos antes mencionados. ¿Alguien tiene alguna pista de por qué da ese error? Muchas gracias

Nota: Lo necesito concretamente para una aplicación que estoy desarrollando y quiero que se envíe un correo de aviso cuando se cumplan unas condiciones. No necesito recibir correos. Llevo poco con Linux y Perl por lo que hay cosas se me escapan, puede que esta no sea la mejor forma de enviar un correo.
Avatar de Usuario
monitor9
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2012-12-18 08:15 @386
Ubicación: Madrid

Re: Enviar correo a cuenta GMail

Notapor explorer » 2013-02-06 12:14 @551

(mensaje largo. No intentar nada hasta terminar de leerlo)

El mensaje de error dice que $smtps no contiene un valor de objeto, así que es posible que haya fallado la llamada en la línea 14. Quizás sea porque no es 'DEBUG', sino 'Debug':

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. explorer@casa:~> perl -MNet::SMTP::SSL -E 'my $smtps = Net::SMTP::SSL->new("smtp.gmail.com", Port => 465, Debug => 1, SSL_verify_mode => SSL_VERIFY_NONE) or warn "$!\n"; say $smtps;'
  2. Net::SMTP::SSL>>> Net::SMTP::SSL(1.01)                                                                      
  3. Net::SMTP::SSL>>>   IO::Socket::SSL(1.81)
  4. Net::SMTP::SSL>>>     IO::Socket::INET6(2.69)
  5. Net::SMTP::SSL>>>       IO::Socket(1.34)
  6. Net::SMTP::SSL>>>         IO::Handle(1.33)
  7. Net::SMTP::SSL>>>           Exporter(5.66)
  8. Net::SMTP::SSL>>>   Net::Cmd(2.29)
  9. Net::SMTP::SSL=GLOB(0x2212968)<<< 220 mx.google.com ESMTP cu7sm2919957wib.8 - gsmtp
  10. Net::SMTP::SSL=GLOB(0x2212968)>>> EHLO localhost.localdomain
  11. Net::SMTP::SSL=GLOB(0x2212968)<<< 250-mx.google.com at your service, [96.20.64.223]
  12. Net::SMTP::SSL=GLOB(0x2212968)<<< 250-SIZE 35882577
  13. Net::SMTP::SSL=GLOB(0x2212968)<<< 250-8BITMIME
  14. Net::SMTP::SSL=GLOB(0x2212968)<<< 250-AUTH LOGIN PLAIN XOAUTH XOAUTH2
  15. Net::SMTP::SSL=GLOB(0x2212968)<<< 250 ENHANCEDSTATUSCODES
  16. Net::SMTP::SSL=GLOB(0x2212968)
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Prueba a hacerlo en tu equipo. Si no sale nada, entonces quizás el problema esté en la misma conexión a Internet.

Como ha dicho Salva antes, no hay nada de especial para enviar un correo a Gmail. Pero sí es especial usar Gmail para enviar un correo (a un buzón de Gmail o cualquier otro buzón). En este caso, tenemos que conectarnos vía SSL o TLS, e identificarnos con nuestro nombre de usuario y contraseña.

Esto es justo lo que tienes en tu código: te conectas al servidor de correo de Gmail y te identificas, para poder usar sus servicios y poder enviar un correo a un determinado buzón de Gmail. Pero... parece que estamos dando una vuelta de más. Así es: no es necesario autentificarse en Gmail para enviar un correo en el propio Gmail. Así que con una línea sencilla sería suficiente:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. explorer@casa:~> perl -MMIME::Lite -E 'MIME::Lite->new(From => "root\@jf.dyndns.org", To => "micorreo_en_gmail\@gmail.com", Subject => "Todo va bien...", Data => "Lo que habiamos dicho, todo correcto" )->send("smtp", "smtp.gmail.com", Debug=>1 ); '
  2. MIME::Lite::SMTP>>> MIME::Lite::SMTP
  3. MIME::Lite::SMTP>>>   Net::SMTP(2.31)
  4. MIME::Lite::SMTP>>>     Net::Cmd(2.29)
  5. MIME::Lite::SMTP>>>       Exporter(5.66)
  6. MIME::Lite::SMTP>>>     IO::Socket::INET(1.33)
  7. MIME::Lite::SMTP>>>       IO::Socket(1.34)
  8. MIME::Lite::SMTP>>>         IO::Handle(1.33)
  9. MIME::Lite::SMTP=GLOB(0x18dba50)<<< 220 mx.google.com ESMTP w5sm3500994wif.11 - gsmtp
  10. MIME::Lite::SMTP=GLOB(0x18dba50)>>> EHLO localhost.localdomain
  11. MIME::Lite::SMTP=GLOB(0x18dba50)<<< 250-mx.google.com at your service, [96.20.64.223]
  12. MIME::Lite::SMTP=GLOB(0x18dba50)<<< 250-SIZE 35882577
  13. MIME::Lite::SMTP=GLOB(0x18dba50)<<< 250-8BITMIME
  14. MIME::Lite::SMTP=GLOB(0x18dba50)<<< 250-STARTTLS
  15. MIME::Lite::SMTP=GLOB(0x18dba50)<<< 250 ENHANCEDSTATUSCODES
  16. MIME::Lite::SMTP=GLOB(0x18dba50)>>> MAIL FROM:<[email protected]>
  17. MIME::Lite::SMTP=GLOB(0x18dba50)<<< 530 5.7.0 Must issue a STARTTLS command first. w5sm3500994wif.11 - gsmtp
  18. SMTP mail() command failed:
  19. 5.7.0 Must issue a STARTTLS command first. w5sm3500994wif.11 - gsmtp
  20.  
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
Vemos un fallo: el módulo MIME::Lite no sabe que debe usar el comando STARTTLS que le exige Gmail, y seguir con parte de la comunicación codificada en TLS (salvo que Salva diga que hay otra forma más sencilla).

Si quisiéramos usar MIME::Lite con soporte de TLS, deberíamos hacer un apaño grande.

O usar un módulo como Net::SMTP::TLS. Ejemplo.

O usar un módulo como Email::Send::SMTP::TLS (primero lo instalamos):
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. root@casa:~ # cpanp install Email::Send::SMTP::TLS
  2. Installing Email::Send::SMTP::TLS (0.04)
  3. Running [/usr/bin/perl -e use strict; BEGIN { my $old = select STDERR; $|++; select $old; $|++; $0 = shift(@ARGV); my $rv = do($0); die $@ if $@; } /root/.cpanplus/5.16.0/build/Email-Send-SMTP-TLS-0.04/Makefile.PL]...
  4. Checking if your kit is complete...
  5. Looks good
  6. Writing Makefile for Email::Send::SMTP::TLS
  7. Writing MYMETA.yml and MYMETA.json
  8.  
  9. Module 'Email::Send::SMTP::TLS' requires 'Email::Address' to be installed
  10. Module 'Email::Send::SMTP::TLS' requires 'Email::Send' to be installed
  11. Module 'Email::Send' requires 'Email::Simple' to be installed
  12. Module 'Email::Send' requires 'Return::Value' to be installed
  13. Module 'Email::Send::SMTP::TLS' requires 'Net::SMTP::TLS::ButMaintained' to be installed
  14.  
  15. Module 'Email::Send::SMTP::TLS' installed successfully
  16. No errors installing all modules
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
Fíjate, qué curioso, que instala una versión propia de TLS: Net::SMTP::TLS::ButMaintained. Y se supone que ahora podemos enviar por medio de TLS:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. explorer@casa:~> perl -MEmail::Send -MEmail::Send::SMTP::TLS -E 'my $mailer = Email::Send->new( {mailer => "SMTP::TLS", mailer_args => [ Host => "smtp.gmail.com", Port => 587, User => "micorreo\@gmail.com", Password => "Osh0hri", ]}); use Email::Simple::Creator; my $email = Email::Simple->create(header => [From => "micorreo\@gmail.com", To => "micorreo\@gmail.com", Subject => "Hola!",], body => "Todo va bien...",); eval { $mailer->send($email) }; die "Error sending email: $@" if $@;'
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
Y sí que llega. (Ejemplo sacado de la sinopsis del módulo Email::Send::SMTP::TLS).

En cambio, si no fuera GMail, para enviar a otros servidores de correo, no habría problemas en usar MIME::Lite...
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. explorer@casa:~> perl -MMIME::Lite -E 'MIME::Lite->new(From => "root\@jf.dyndns.org", To => "micorreo\@jferrero.com", Subject => "Todo va bien...", Data => "Lo que habiamos dicho, todo correcto" )->send("smtp", "smtp.jferrero.com", Debug=>1 ); '
  2. MIME::Lite::SMTP>>> MIME::Lite::SMTP
  3. MIME::Lite::SMTP>>>   Net::SMTP(2.31)
  4. MIME::Lite::SMTP>>>     Net::Cmd(2.29)
  5. MIME::Lite::SMTP>>>       Exporter(5.66)
  6. MIME::Lite::SMTP>>>     IO::Socket::INET(1.33)
  7. MIME::Lite::SMTP>>>       IO::Socket(1.34)
  8. MIME::Lite::SMTP>>>         IO::Handle(1.33)
  9. MIME::Lite::SMTP=GLOB(0xf24b00)<<< 220 aprosi310.aprosi.net ESMTP Exim 4.72 Wed, 06 Feb 2013 16:20:38 +0100
  10. MIME::Lite::SMTP=GLOB(0xf24b00)>>> EHLO localhost.localdomain
  11. MIME::Lite::SMTP=GLOB(0xf24b00)<<< 250-aprosi310.aprosi.net Hello 223.64.20.96.dynamic.jazztel.es [96.20.64.223]
  12. MIME::Lite::SMTP=GLOB(0xf24b00)<<< 250-SIZE 94371840
  13. MIME::Lite::SMTP=GLOB(0xf24b00)<<< 250-PIPELINING
  14. MIME::Lite::SMTP=GLOB(0xf24b00)<<< 250-AUTH LOGIN
  15. MIME::Lite::SMTP=GLOB(0xf24b00)<<< 250-STARTTLS
  16. MIME::Lite::SMTP=GLOB(0xf24b00)<<< 250 HELP
  17. MIME::Lite::SMTP=GLOB(0xf24b00)>>> MAIL FROM:<[email protected]>
  18. MIME::Lite::SMTP=GLOB(0xf24b00)<<< 250 OK
  19. MIME::Lite::SMTP=GLOB(0xf24b00)>>> RCPT TO:<[email protected]>
  20. MIME::Lite::SMTP=GLOB(0xf24b00)<<< 250 Accepted
  21. MIME::Lite::SMTP=GLOB(0xf24b00)>>> DATA
  22. MIME::Lite::SMTP=GLOB(0xf24b00)<<< 354 Enter message, ending with "." on a line by itself
  23. MIME::Lite::SMTP=GLOB(0xf24b00)>>> MIME-Version: 1.0
  24. MIME::Lite::SMTP=GLOB(0xf24b00)>>> Content-Disposition: inline
  25. MIME::Lite::SMTP=GLOB(0xf24b00)>>> Content-Transfer-Encoding: 8bit
  26. MIME::Lite::SMTP=GLOB(0xf24b00)>>> Content-Type: text/plain
  27. MIME::Lite::SMTP=GLOB(0xf24b00)>>> X-Mailer: MIME::Lite 3.028 (F2.84; T1.34; A2.09; B3.13; Q3.13)
  28. MIME::Lite::SMTP=GLOB(0xf24b00)>>> Date: Wed, 6 Feb 2013 16:20:33 +0100
  29. MIME::Lite::SMTP=GLOB(0xf24b00)>>> From: [email protected]
  30. MIME::Lite::SMTP=GLOB(0xf24b00)>>> To: [email protected]
  31. MIME::Lite::SMTP=GLOB(0xf24b00)>>> Subject: Todo va bien...
  32. MIME::Lite::SMTP=GLOB(0xf24b00)>>> Lo que habiamos dicho, todo correcto
  33. MIME::Lite::SMTP=GLOB(0xf24b00)>>> .
  34. MIME::Lite::SMTP=GLOB(0xf24b00)<<< 250 OK id=1U36nf-0005Bk-8x
  35. MIME::Lite::SMTP=GLOB(0xf24b00)>>> QUIT
  36. MIME::Lite::SMTP=GLOB(0xf24b00)<<< 221 aprosi310.aprosi.net closing connection
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
aunque... depende de cada servidor (en algunos pedirán un tiempo de greylisting u otras medidas antispam parecidas).

Y tampoco nos autentificamos, porque el destinatario del buzón está en el mismo dominio que el servidor de correo. En el ejemplo: enviamos un correo a "[email protected]" a través del servidor "smtp.jferrero.com".

Así que necesitamos un poco de ayuda para enviar a Gmail, usando el propio Gmail.

Como root, instalo la última versión de Email::Send::SMTP::Gmail
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. root@casa:~ # cpanp install Email::Send::SMTP::Gmail
  2. [MSG] No '/root/.cpanplus/custom-sources' dir, skipping custom sources
  3. [MSG] No '/root/.cpanplus/custom-sources' dir, skipping custom sources
  4. [MSG] No '/root/.cpanplus/custom-sources' dir, skipping custom sources
  5. Installing Email::Send::SMTP::Gmail (0.32)
  6. *** Install log written to:
  7.   /root/.cpanplus/install-logs/Email-Send-SMTP-Gmail-0.32-1360164571.log
  8.  
  9. Module 'Email::Send::SMTP::Gmail' installed successfully
  10. No errors installing all modules
  11.  
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Y ya puedo usarlo, incluso desde la línea de comandos:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. explorer@casa:~> perl -MEmail::Send::SMTP::Gmail -E 'my $mail=Email::Send::SMTP::Gmail->new( -smtp=>"smtp.gmail.com",-login=>"micorreo\@gmail.com",-pass=>"O5ishhcr5", -debug => 1); $mail->send(-to=>"micorreo\@gmail.com", -subject=>"Hola!", -body=>"Todo va bien...", -contenttype => "text/plain",); $mail->bye;'
  2. *******************************************************************
  3.  Using the default of SSL_verify_mode of SSL_VERIFY_NONE for client
  4.  is depreciated! Please set SSL_verify_mode to SSL_VERIFY_PEER
  5.  together with SSL_ca_file|SSL_ca_path for verification.
  6.  If you really don't want to verify the certificate and keep the
  7.  connection open to Man-In-The-Middle attacks please set
  8.  SSL_verify_mode explicitly to SSL_VERIFY_NONE in your application.
  9. *******************************************************************
  10.   at /usr/lib/perl5/site_perl/5.16.0/Email/Send/SMTP/Gmail.pm line 36.
  11. Net::SMTP::SSL>>> Net::SMTP::SSL(1.01)
  12. Net::SMTP::SSL>>>   IO::Socket::SSL(1.81)
  13. Net::SMTP::SSL>>>     IO::Socket::INET6(2.69)
  14. Net::SMTP::SSL>>>       IO::Socket(1.34)
  15. Net::SMTP::SSL>>>         IO::Handle(1.33)
  16. Net::SMTP::SSL>>>           Exporter(5.66)
  17. Net::SMTP::SSL>>>   Net::Cmd(2.29)
  18. Net::SMTP::SSL=GLOB(0x16c1288)<<< 220 mx.google.com ESMTP s10sm3975391wiw.4 - gsmtp
  19. Net::SMTP::SSL=GLOB(0x16c1288)>>> EHLO localhost.localdomain
  20. Net::SMTP::SSL=GLOB(0x16c1288)<<< 250-mx.google.com at your service, [96.20.64.223]
  21. Net::SMTP::SSL=GLOB(0x16c1288)<<< 250-SIZE 35882577
  22. Net::SMTP::SSL=GLOB(0x16c1288)<<< 250-8BITMIME
  23. Net::SMTP::SSL=GLOB(0x16c1288)<<< 250-AUTH LOGIN PLAIN XOAUTH XOAUTH2
  24. Net::SMTP::SSL=GLOB(0x16c1288)<<< 250 ENHANCEDSTATUSCODES
  25. Net::SMTP::SSL=GLOB(0x16c1288)>>> AUTH LOGIN
  26. Net::SMTP::SSL=GLOB(0x16c1288)<<< 334 VXNlcg5hbWU6
  27. Net::SMTP::SSL=GLOB(0x16c1288)>>> amZlcgJlcm9AZ21ha6wuY29t
  28. Net::SMTP::SSL=GLOB(0x16c1288)<<< 334 UGFzc3gcmQ6
  29. Net::SMTP::SSL=GLOB(0x16c1288)>>> T2hjcglzaDA1
  30. Net::SMTP::SSL=GLOB(0x16c1288)<<< 235 2.7.0 Accepted
  31. Net::SMTP::SSL=GLOB(0x16c1288)>>> MAIL FROM:<[email protected]>
  32. Net::SMTP::SSL=GLOB(0x16c1288)<<< 250 2.1.0 OK s10sm4975391wiw.4 - gsmtp
  33. Net::SMTP::SSL=GLOB(0x16c1288)>>> RCPT TO:<[email protected]>
  34. Net::SMTP::SSL=GLOB(0x16c1288)<<< 250 2.1.5 OK s10sm4975391wiw.4 - gsmtp
  35. Net::SMTP::SSL=GLOB(0x16c1288)>>> DATA
  36. Net::SMTP::SSL=GLOB(0x16c1288)<<< 354  Go ahead s10sm4975391wiw.4 - gsmtp
  37. Net::SMTP::SSL=GLOB(0x16c1288)>>> From: [email protected]
  38. Net::SMTP::SSL=GLOB(0x16c1288)>>> To: [email protected]
  39. Net::SMTP::SSL=GLOB(0x16c1288)>>> Reply-To: [email protected]
  40. Net::SMTP::SSL=GLOB(0x16c1288)>>> Subject: Hola!
  41. Net::SMTP::SSL=GLOB(0x16c1288)>>> MIME-Version: 1.0
  42. Net::SMTP::SSL=GLOB(0x16c1288)>>> Content-Type: text/plain; charset=UTF-8
  43. Net::SMTP::SSL=GLOB(0x16c1288)>>> Todo va bien...
  44. Net::SMTP::SSL=GLOB(0x16c1288)>>> .
  45. Net::SMTP::SSL=GLOB(0x16c1288)<<< 250 2.0.0 OK 1360165067 s10sm4975391wiw.4 - gsmtp
  46. Net::SMTP::SSL=GLOB(0x16c1288)>>> QUIT
  47. Net::SMTP::SSL=GLOB(0x16c1288)<<< 221 2.0.0 closing connection s10sm4975391wiw.4 - gsmtp
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Y el correo salió.

Ves que sale un aviso de error, por el tema del SSL_verify_mode, pero eso se puede solventar como te dije en el mensaje anterior.

Resumen: para enviar a servidores de correo usando el protocolo SMTP, no necesitas nada en especial. Si el servidor de correo exige algo (como el caso de Gmail), pues habrá que adaptarse a ello, incluso cambiando de módulo. Para usar Gmail, hay que usar una conexión SSL o TLS. Esto lo ofrece Net::SMTP::SSL o Net::SMTP::TLS, que podemos manejar cómodamente a través de Email::Send::SMTP::Gmail o Email::Send::SMTP::TLS.

Hay otro módulo para enviar a Gmail: Email::Send::Gmail.

¿Has probado a ejecutar el comando mail del sistema?
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. explorer@casa:~/bin> echo 'Todo bien' |MAILRC=/dev/null mail -v -s "Ok"  -S smtp-use-starttls -S ssl-verify=ignore -S smtp-auth=login -S smtp=smtp.gmail.com:587 -S smtp-auth-user='[email protected]' -S smtp-auth-password='5gshOhcr05' [email protected]
  2. Resolving host smtp.gmail.com . . . done.
  3. Connecting to 173.194.66.109:587 . . . connected.
  4. 220 mx.google.com ESMTP cu7sm4083985wib.8 - gsmtp
  5. >>> EHLO jf.dyndns.org
  6. 250-mx.google.com at your service, [96.20.64.223]
  7. 250-SIZE 35882577
  8. 250-8BITMIME
  9. 250-STARTTLS
  10. 250 ENHANCEDSTATUSCODES
  11. >>> STARTTLS
  12. 220 2.0.0 Ready to start TLS
  13. >>> EHLO jf.dyndns.org
  14. 250-mx.google.com at your service, [96.20.64.223]
  15. 250-SIZE 35882577
  16. 250-8BITMIME
  17. 250-AUTH LOGIN PLAIN XOAUTH XOAUTH2
  18. 250 ENHANCEDSTATUSCODES
  19. >>> AUTH LOGIN
  20. 334 VXNlcm5hbWU6
  21. >>> amZlcnJlcm9AZ21haWwuY29t
  22. 334 UGFzc3dvcmQ6
  23. >>> T2hjcmlzaDA1
  24. 235 2.7.0 Accepted
  25. >>> MAIL FROM:<[email protected]>
  26. 250 2.1.0 OK cu7sm4083985wib.8 - gsmtp
  27. >>> RCPT TO:<[email protected]>
  28. 250 2.1.5 OK cu7sm4083985wib.8 - gsmtp
  29. >>> DATA
  30. 354  Go ahead cu7sm4083985wib.8 - gsmtp
  31. >>> .
  32. 250 2.0.0 OK 1360170093 cu7sm4083985wib.8 - gsmtp
  33. >>> QUIT
  34. 221 2.0.0 closing connection cu7sm4083985wib.8 - gsmtp
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Otra opción. Dices que tienes el Postfix instalado. Si está bien configurado, se puede usar como transporte de correo, en lugar de usar el protocolo SMTP de forma directa, pero... el resultado sería el mismo (el correo sale desde nuestra propia máquina)... excepto si está configurado para usar un determinado servidor de correo.
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


Volver a Básico

¿Quién está conectado?

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