Al tiempo de usar esta receta me percaté de que Jabber (o por lo menos el servidor al que me conecto) pasa olímpicamente de los mensajes que contengan caracteres iso-8859-1. Así que la he cambiado:
:0
{
:0 c:$HOME/tmp/.lockmail
$DEFAULT
:0 h
| $MAILDIR/cabeceras.pl | recode -qf latin9..utf-8 \
| $HOME/bin/sJab -u remitente -p contraseña -t destinatario -q 'Nuevo correo'
}
El script cabeceras.pl es el siguiente:
#!/usr/bin/perl
#
# Parsear cabeceras de email
#
use strict;
#use Mail::Internet;
use MIME::QuotedPrint;
use MIME::Base64;
use HTTP::Date;
use POSIX qw(strftime);
use POSIX qw(locale_h);
setlocale(LC_TIME, "es_ES\@euro");
my $ext;
#my $header = Mail::Internet->new(*STDIN)->head()->header_hashref();
while (<STDIN>) {
$ext.="De: ".dc($1) if (m/^From: (.*)/);
# $ext.="Para: ".dc($1) if (m/^To: (.+)/);
$ext.="Tema: ".dc($1) if (m/^Subject: (.+)/);
$ext.="Fecha: ".strftime ("%A %e de %B de %Y (%H:%M:%S %Z)", localtime(str2time($1)))."\n"
if (m/^Date: (.+)/);
}
print $ext;
sub dc {
my $c=shift;
my $d;
if ($c=~ m/=\?(iso|us)-\S+\?q\?(\S+)\?=/i) {
$c=~ s/=\?(iso|us)-\S+\?q\?(\S+)\?=/$2/ig;
$d=decode_qp($c);
$d=~ s/_/ /g;
#print "ES: ".substr($c, -1, 1)."\n\n" if (substr($c, -1, 1) ne "\n");
}
elsif ($c=~ m/=\?(iso|us)-\S+\?b\?(\S+)\?=/i) {
$d=decode_base64($2);
$c=~ s/=\?(iso|us)-\S+\?b\?(\S+)\?=/$d/ig;
#$c=decode_base64($c);
$d=$c;
}
else { $d=$c; }
$d.="\n" if (substr($d, -1, 1) ne "\n");
return $d;
}
La función dc intenta averiguar la codificación usada y actuar en consecuencia, de momento con bastante éxito. Aunque muy posiblemente haya que retocarla, ya que parece haber tantas formas de codificar el texto como lectores de correo (aunque se supone que son estándar).
Respecto al tema de la entrada, he encontrado un interesante artículo que trata la cuestión.
|