# rm-rf.es

cPanel 11.25: error en módulo perl Mail::SPF

Al parecer en algunas versiones del nuevo cPanel 11.25.0-RELEASE se están detectando errores en la instalación del módulo de perl Mail::SPF. Si ejecutamos /scripts/checkperlmodules encontramos los siguientes errores:

CPAN.pm: Going to build J/JM/JMEHNLE/mail-spf/Mail-SPF-v2.007.tar.gz

perl-64bit-hack: enabled
# running Build.PL --otherldflags -L/usr/lib64 --config ldflags=-L/usr/lib64 --extralibdir /usr/lib64
Creating new 'MYMETA.yml' with configuration results
Creating new 'Build' script for 'Mail-SPF' version 'v2.7.0'
Prereq 'v5.6' for 'perl' is not supported by Module::Build::Compat
make: *** No targets.  Stop.
 JMEHNLE/mail-spf/Mail-SPF-v2.007.tar.gz
 /usr/bin/make OTHERLDFLAGS=-L/usr/lib64 LDFLAGS=-L/usr/lib64 EXTRALIBDIR=/usr/lib64 OTHERLDFLAGS=-L/usr/lib64 LDFLAGS=-L/usr/lib64 EXTRALIBDIR=/usr/lib64 -- NOT OK
Running make install
 Make had returned bad status, install seems impossible
perlmod--Install done

Para efectuar la instalación de un modo correcto ejecutad el siguiente comando:

 perl -MCPAN -e "get('Mail::SPF')" && cd /home/.cpan/sources/authors/id/J/JM/JMEHNLE/mail-spf && tar -xzvf Mail-SPF-v2.007.tar.gz && cd Mail-SPF-v2.007 && perl Build.PL && ./Build && ./Build test && ./Build install && /scripts/checkperlmodules --full

Fuente | Foros cPanel

Actualizar todos los módulos de Perl desde CPAN

Gracias a CPAN, existe una forma muy sencilla y cómoda de actualizar de vez todos los módulos de PERL que tengamos instalados en el sistema, para ello, simplemente ejecutad lo siguiente:

cpan -r

Automáticamente comenzará la actualización de los módulos:

$ cpan -r
CPAN: Storable loaded ok
Going to read /home/alex/.cpan/Metadata
  Database was generated on Mon, 10 Aug 2009 23:26:58 GMT
CPAN: LWP::UserAgent loaded ok
Fetching with LWP:
  ftp://ftp.perl.org/pub/CPAN/authors/01mailrc.txt.gz
Going to read /home/alex/.cpan/sources/authors/01mailrc.txt.gz
CPAN: Compress::Zlib loaded ok
Fetching with LWP:
  ftp://ftp.perl.org/pub/CPAN/modules/02packages.details.txt.gz
LWP failed with code[500] message[LWP::Protocol::MyFTP: connect: Conexi�n rechazada]
Fetching with Net::FTP:
  ftp://ftp.perl.org/pub/CPAN/modules/02packages.details.txt.gz
Going to read /home/alex/.cpan/sources/modules/02packages.details.txt.gz
  Database was generated on Fri, 18 Dec 2009 01:45:07 GMT

Fetching with LWP:
  ftp://ftp.perl.org/pub/CPAN/modules/03modlist.data.gz

Going to read /home/alex/.cpan/sources/modules/03modlist.data.gz
Going to write /home/alex/.cpan/Metadata
...................... etc etc

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

Perl: Encriptar y desencriptar base64 con MIME::Base64

El módulo de Perl MIME::Base64 proporciona funciones para codificar y descodificar cadenas en y desde base64.

Base 64 es un sistema de numeración posicional que usa 64 como base. Es la mayor potencia de dos que puede ser representada usando únicamente los caracteres imprimibles de ASCII. Esto ha propiciado su uso para codificación de correos electrónicos, PGP y otras aplicaciones. Todas las variantes famosas que se conocen con el nombre de Base64 usan el rango de caracteres A-Z, a-z y 0-9 en este orden para los primeros 62 dígitos, pero los símbolos escogidos para los últimos dos dígitos varían considerablemente de unas a otras. Wikipedia

Las funciones que nos ofrece son las siguientes:

encode_base64($str);
encode_base64($str, $eol);
decode_base64($str);

Os dejo un par de ejemplos muy sencillos, podéis encontrar más en cPan.org.

Decodificación:

#!/usr/bin/perl
use warnings;
use strict;
use MIME::Base64;

my $string_codificada = "RXN0byBlcyB1bmEgcHJ1ZWJh";
my $string = decode_base64($codificado);
print "String ($string_codificada) decodificada:\n ".$string;

Codificación:

#!/usr/bin/perl
use warnings;
use strict;
use MIME::Base64;

my $string = 'Esto es una prueba';
my $string_codificada = encode_base64($string);
print "String ($string) codificada:\n".$string_codificada;