# rm-rf.es | Administración de sistemas

Bitácora personal de un SysAdmin Gnu/Linux, Windows, BSD...

Perl: Enviar correos con el módulo MIME::Lite


Hoy vamos a ver un ejemplo sencillo de programación en Perl, mediante el cual vamos a enviar un correo electrónico. Utilizamos el módulo MIME::Lite, que permite mandar contenido html (u otro MIME) en el cuerpo del mensaje.

El ejemplo que os voy a mostrar envía el correo utilizando el método de envío por defecto que tenga el sistema en el que se ejecuta (si es Linux, normalmente sendmail). Ahí va:

#!/usr/bin/perl -w
use MIME::Lite;
use strict;

my $subject = "Asunto del correo";
my $from = "test\@dominio.com";
my $to = "destinatario\@dominio.com";
my $body = "Esto es el cuerpo del correo ...";

my $msg = MIME::Lite->new
        (
            Subject => $subject,
            From    => $from,
            To      => $to,
            Type    => 'text/html',
            Data    => $body
        ); 
$msg->send();

Básicamente declaramos las variables que contienen el asunto, destinatarios, cuerpo del mensaje, etc y abrimos la clase para trabajar con ella, finalmente enviamos el correo.

En la propia página de cpan hay bastantes ejemplos y muy útiles, os dejo un par de ellos, podéis ver los demás aquí.

Agregar una imagen a un mensaje con varios destinatarios:

    ### Start with a simple text message:
    $msg = MIME::Lite->new(
        From    =>'me@myhost.com',
        To      =>'you@yourhost.com',
        Cc      =>'some@other.com, some@more.com',
        Subject =>'A message with 2 parts...',
        Type    =>'TEXT',
        Data    =>"Here's the GIF file you wanted"
    );

    ### Attach a part... the make the message a multipart automatically:
    $msg->attach(
        Type     =>'image/gif',
        Path     =>'aaa000123.gif',
        Filename =>'logo.gif'
    );

Utilizar otro método de envío de correo si no tenemos sendmail:

    ### Do something like this in your 'main':
    if ($I_DONT_HAVE_SENDMAIL) {
       MIME::Lite->send('smtp', $host, Timeout=>60
           AuthUser=>$user, AuthPass=>$pass);
    }

    ### Now this will do the right thing:
    $msg->send;         ### will now use Net::SMTP as shown above