Enviar un correo electrónico usando Perl

Perl permite a sus usuarios enviar correos utilizando el script de código de Perl. Hay varias formas de enviar correos electrónicos usando Perl. Estos correos electrónicos pueden ser correos electrónicos simples, correos electrónicos con archivos adjuntos, correos electrónicos con formato HTML, correos electrónicos con múltiples destinatarios, etc. Perl también proporciona algunos módulos para hacer lo mismo. En este artículo, veremos algunas formas de enviar un correo electrónico usando Perl-script.
 

Utilidad de envío de correo

Primero, hablaremos sobre la utilidad Sendmail. No puede esperar excelentes tasas de entrega al usarlo. A veces, los correos electrónicos se saltan la bandeja de entrada. Para Linux/Unix, Sendmail es rápido y sencillo de configurar. Para Windows y otros dispositivos, deberá buscar enfoques alternativos. 
 

Envío de correo sencillo

perl

#!/usr/bin/perl
 
# Details for email
$to = 'user1@mail.abc';
$from = 'user2@mail.abc';
$subject = 'Sending mail using perl';
$message = 'Well that was easy!!';
 
open(MAIL, "|/usr/sbin/sendmail -t");
 
# Email Header
print MAIL "To: $to\n";
print MAIL "From: $from\n";
print MAIL "Subject: $subject\n\n";
 
# Email Body
print MAIL $message;
 
$result = close(MAIL);
if($result)
{
    print "Email Sent, Bro!\n";
}
else
{
    print "There was a problem, Bro!\n";
}

Simplemente agregue su identificación de correo electrónico y la del remitente y el correo se enviará con éxito y verá resultados rápidos. Si no lo hace, asegúrese de que sendmail esté configurado correctamente en su máquina y que el servicio de correo electrónico del destinatario no bloquee los correos electrónicos que provienen de su dirección IP. 
 

Correo electrónico con formato HTML

¿Qué pasa si el usuario quiere enviar texto con formato html al receptor? En ese caso, solo agregue el código a continuación como variable $message en su script perl: 
 

$message = '<h1>H1 is the main heading</h1><p><img src="image_source_with_extension" /></p>';

El código anterior formateará su correo siguiendo la sintaxis html. Puede usar todas las etiquetas de html de la manera deseada.
 

Agregar campos CC y BCC

También puede agregar campos CC y BCC en el encabezado del mensaje. Agregue las siguientes variables en su script Perl: 
 

$cc = 'user1@mail.abc, user2@mail.abc, user3@mail.abc';
$bcc = 'user4@mail.abc';

Agregar un archivo adjunto

Es posible agregar un archivo adjunto a un mensaje, pero es un poco más complejo. Usar este módulo y agregar archivos grandes es probablemente una mala idea, pero es bueno usar archivos pequeños.
 

Nota: Antes de ejecutar el código a continuación, asegúrese de que el módulo Mail::Sendmail ya esté instalado. 

perl

use MIME::QuotedPrint;
use MIME::Base64;
use Mail::Sendmail;
%mail = ( from => 'user1@mail.abc',
          to => 'user2@mail.abc',
          subject => 'Sending mail using perl');
 
$boundary = "====" . time() . "====";
$mail{'content-type'} = "multipart/mixed; boundary=\"$boundary\"";
 
$message = encode_qp( "Well that was easy!!" );
 
# This is the perl executable
$file = $^X;
 
open (F, $file) or die "Cannot read $file: $!";
binmode F; undef $/;
$mail{body} = encode_base64(<F>);
close F;
 
$boundary = '--'.$boundary;
$mail{body} = <<END_OF_BODY;
$boundary
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
 
$message
$boundary
Content-Type: application/octet-stream; name="$^X"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="File_Name.pdf"
 
$mail{body}
$boundary--
END_OF_BODY
 
sendmail(%mail) || print "Error: $Mail::Sendmail::error\n";

Nota: No olvide configurar la sección %mail y la sección de nombre de archivo de la variable $message.

MIME::Lite

Este módulo ofrece más flexibilidad y también está disponible para máquinas que no son Linux/Unix. Con este módulo, puede enviar fácilmente el mismo correo a diferentes destinatarios, formatear su correo usando etiquetas HTML y también puede enviar múltiples archivos adjuntos. MIME::Lite está diseñado como un módulo simple e independiente para generar mensajes MIME específicamente, le permite generar un mensaje simple y decente de una o varias partes con archivos adjuntos binarios o de texto. No requiere que tenga instalados los módulos Mail:: o MIME:: pero funcionará con ellos si lo están. Para instalar solo escribe: 
 

cpan -i MIME::Lite

o simplemente puede descargarlo desde aquí .

Correo sencillo

A continuación se muestra el archivo que deberá ejecutar para enviar el correo. El siguiente código debe especificarse con «dirección de correo del destinatario», «dirección de correo del remitente», «asunto» y «cuerpo» del correo.
 

perl

#!/usr/bin/perl
use MIME::Lite;
  
$to = 'receiver_mail@anything.com';
$cc = 'anyone@anything.com';
$from = 'sender_mail@anything.com';
$subject = 'Sending mail using perl';
$message = 'Well that was easy!!';
 
$msg = MIME::Lite->new(
                 From     => $from,
                 To       => $to,
                 Cc       => $cc,
                 Subject  => $subject,
                 Data     => $message
                 );
                  
$msg->send;
print "Email Sent Successfully!\n";

Ahora, para verificar eso, simplemente revise el correo del destinatario y verá la imagen como se muestra a continuación:
 

Correo con formato HTML

Al igual que la utilidad SendMail, el módulo MIME::Lite también permite a los usuarios enviar correos electrónicos con formato HTML utilizando el script perl. 
 

$message = '<h1>H1 is the main heading</h1><p><img src="image_source_with_extension" /></p>';

El código anterior formateará su correo siguiendo la sintaxis HTML. Puede usar todas las etiquetas de HTML de la manera deseada.

Enviar el mismo correo electrónico a diferentes destinatarios

Ahora la pregunta es qué sucede si tiene múltiples receptores. En ese caso, no tiene que hacer nada, solo configure $a la variable como:

$to = 'receiver1_mail@anything.com, receiver2_mail@anything.com, receiver3_mail@anything.com';

Nota: asegúrese de separar cada dirección de correo usando una coma (,)

Envío de archivos adjuntos

Los archivos adjuntos pueden ser documentos, pdf o imágenes. Puede agregar un mensaje de texto a su archivo adjunto. Una de las ventajas de este módulo es que facilita el envío de archivos adjuntos. Puede incluir varios archivos en un solo correo electrónico con el método adjunto(). Para enviar un archivo adjunto solo escriba:
 

perl

# Add text message.
$msg->attach(Type => 'text',
             Filename => 'filename.extension',
             Data => $message);
             
# Specify your file as attachment.
$msg->attach(Type => 'image/gif',
             Path => 'Provide_Full_Path',
             Filename => 'Filename.extension',
             Disposition => 'attachment');    

Último paso

Entonces, el código final después de una configuración anterior, como agregar múltiples receptores, formatear el correo usando HTML y agregar archivos adjuntos, se verá así:
 

perl

#!/usr/bin/perl
use MIME::Lite;
 
$to = 'receiver1_mail@anything.com, receiver2_mail@anything.com, receiver3_mail@anything.com';
$cc = 'anyone@anything.com';
$from = 'sender_mail@anything.com';
$subject = 'Sending mail using perl';
$message = 'Well that was easy!!';
 
$msg = MIME::Lite->new(From     => $from,
                       To     => $to,
                       Cc     => $cc,
                       Subject => $subject,
                       Data     => $message);
 
# Add text message.
$msg->attach(Type     => 'text',
             Filename => 'filename.extension',
             Data     => $message);
             
# Specify your file as attachment.
$msg->attach(Type     => 'image/gif',
             Path     => 'Provide_Full_Path',
             Filename => 'Filename.extension',
             Disposition => 'attachment');
                 
$msg->send;
print "Email Sent Successfully!\n";

MIME::Lite:TT::HTML

Esta es una variación de MIME::Lite que ha aumentado su popularidad. Es similar a MIME::Lite pero diferente en la capacidad de usar plantillas en lugar de codificar el contenido de los mensajes.
Para instalar este módulo: 
 

cpan -i MIME::Lite::TT::HTML

Ahora primero tendrá que crear una plantilla para enviar correo.
Nombre de archivo: aviso.txt.tt 
 

This is from notice.txt

Nombre de archivo: aviso.html.tt 
 

<p>This is from</p> <p>notice.html</p>

Ahora el código fuente configurado que usa la plantilla se verá como se muestra a continuación.
 

perl

#!/usr/bin/perl
 
use strict;
use warnings;
use MIME::Lite::TT::HTML;
 
my %params;
 
$params{first_name} = 'Piotr';
$params{client_name} = 'Jane';
 
my %options;
$options{INCLUDE_PATH} = '/path/to/templates';
 
 
my $msg = MIME::Lite::TT::HTML->new(
    From => 'user1@mail.abc',
    To => 'user2@mail.abc',
    Subject => 'Sending mail',
    Template => {text => 'notice.txt.tt',
                 html => 'notice.html.tt',},
    TmplOptions => \%options,
    TmplParams => \%params,
);
 
$msg->send;

Enviando archivo adjunto

Para enviar archivos adjuntos, simplemente agregue el siguiente código después de la variable $msg.
 

perl

$msg->attr("content-type" => "multipart/mixed");
 
$msg->attach(Type => 'application/pdf',
             Path => '/path/to/prison_map.pdf',
             Filename => 'prison_map.pdf',
             Disposition => 'attachment');

Nota: Proporcione la ruta completa y la extensión completa para agregar el archivo.

Ahora el código fuente completo se verá así: 
 

perl

#!/usr/bin/perl
 
use strict;
use warnings;
use MIME::Lite::TT::HTML;
 
my %params;
 
$params{first_name} = 'Piotr';
$params{client_name} = 'Jane';
 
my %options;
$options{INCLUDE_PATH} = '/path/to/templates';
 
 
my $msg = MIME::Lite::TT::HTML->new(
    From => 'user1@mail.abc',
    To => 'user2@mail.abc',
    Subject => 'Sending mail',
    Template => {text => 'notice.txt.tt',
                 html => 'notice.html.tt',},
    TmplOptions => \%options,
    TmplParams => \%params,
);
 
$msg->attr("content-type" => "multipart/mixed");
$msg->attach(Type => 'application/pdf',
             Path => '/path/to/prison_map.pdf',
             Filename => 'prison_map.pdf',
             Disposition => 'attachment');
 
$msg->send;

Uso de SMTP

De forma predeterminada, los métodos anteriores usan localhost para enviar correos electrónicos y el servidor de configuración local no garantiza que se entregará. Una vez que elija su proveedor o decida configurar un servidor SMTP por su cuenta, ajuste el código en sus módulos MIME y proporcione las credenciales SMTP en el método send():
 

$msg->send('smtp', "smtp.example.com", AuthUser=>"your_id", AuthPass=>"your_password" );

Publicación traducida automáticamente

Artículo escrito por MohdArsalan y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *