jueves, 5 de julio de 2012

Enviando Correos con PERL usando SMTP de Gmail (Windows & LINUX)

Dejando un poco de lado a Twitter, buscábamos agregar un modulo para un proyecto para enviar correos, ya tenemos uno, pero al utilizarlo para conectarse al servidor SMTP de gmail, simplemente no funcionaba. Tan fácil como buscar en google, hay muchas bibliotecas para hacerlo, el problema es que para el servidor que se va a utilizar la versión de PERL es la 5.8 o 5.10, y para estas versiones las bibliotecas de ActivePerl para windows solo soportan las versiones 5.14 >
Por eso este post menciona la forma de hacerlo en Windows con un PERL 5.8 y con LINUX usando PERL 5.14.

Vamos con la primera forma de hacerlo con LINUX:

Para esto podemos usar la biblioteca Email::Send::Gmail
en su página de CPAN podemos encontrar un ejemplo de como usarlo.

=======================================================================


#!/usr/bin/perl

use strict;
use Email::Simple;
use Email::Simple::Creator;
use Email::Send;
use Email::Send::Gmail;

send_mail();
print "mensaje enviado";

sub send_mail {

my $usuario = 'tucorreo@gmail.com';
my $password = 'tupassword';

#Creamos el correo, a quien va dirigido, de quien, el asunto y el mensaje
my $email = Email::Simple->create(
    header => [
        To => 'JuanPerez@gmail.com',
        From => $usuario,
        Subject => 'Probando 123',
        ],
    body => "Prueba desde LINUX",
    );

#Aquí especificamos que usara a Gmail como servidor SMTP
my $sender = Email::Send->new(
{    mailer => 'Gmail',
    mailer_args =>[
        username => $usuario,
        password => $password,
        ]
}
);
$sender->send($email);


}

=========================================================================

Hasta aquí todo bien, pero en windows usando PERL 5.8 no está la biblioteca, entonces hurgando un poco en su código, podemos ver como funciona esta, nos podemos dar cuenta que usa la biblioteca Net::SMTP::SSL, y esta si la podemos encontrar para PERL 5.8.

y así quedaría el código para enviarlo en windows:



#!/usr/bin/perl

use strict;
use Net::SMTP::SSL;
  
send_mail('juanPerez@gmail.com','Prueba desde windows', 'probando el correo desde windows ;D');  
print "mensaje enviado";
    
sub send_mail {
  
  my $username = 'tucorreo@gmail.com';
  my $password = '123456';
  my $dest = shift; #'destinatario@algomail.com'
  my $asunto = shift;  
  my $body_mail = shift;

  #creamos la conexión con el servidor SMTP de Gmail
  my $smtp = Net::SMTP::SSL->new(
       'smtp.gmail.com',
       Port  => 465,
       Debug => 0,
       )
        || print 'Email::Send::Gmail: error connecting to server smtp.gmail.com';
    #se realiza al autentificación 
    $smtp->auth( $username, $password )
        or
        print "Email::Send::Gmail: error authenticating username $username";
        
  $smtp->mail($username);        
  $smtp->to($dest);
  #Se envía el correo
  $smtp->data();
  $smtp->datasend("From: ". $username );
  $smtp->datasend("\n");
  $smtp->datasend("To: ". $dest );
  $smtp->datasend("\n");
  $smtp->datasend("Subject: ". $asunto. "\n");
  $smtp->datasend("\n");
  $smtp->datasend($body_mail ."\n");
  
  $smtp->dataend();
  $smtp->quit();
  
  
}
Y así podemos enviar correos usando nuestras cuentas de Gmail a traves de PERL en LINUX y Windows.