Libertonia
Portada · Todo · Software Libre · Desarrolladores · Comunidad · Internet · Tecnología · Meta · Diarios
Biff vía jabber

atordo's Diary
Por atordo
departamento biff-r-us , Sección Diarios
Puesto a las Wed Sep 29th, 2004 at 06:33:11 PM CET
Una sencilla receta para procmail que hará que se nos envíe un aviso por jabber cuando recibamos correo.

 


Hela aquí sin más dilación:
:0
{
   :0 c:$HOME/tmp/.lockmail
   $DEFAULT

   :0 h
   | grep ^From:\\\|^Subject: \
   | /ruta/sJab -u remitente -p contraseña -t destinatario -q 'Nuevo correo'
}
Está pensada para una versión modificada de sJab que publiqué en la anterior entrada de mi diario, pero se puede usar tranquilamente la versión oficial si se prescinde del parámetro -q.

< Cómo configurar Jabber para usar MySQL como Base de Datos (7 comments) | Nuevo record de velocidad. (8 comments) >
Enlaces Relacionados
· escomposlinux.org
· jabber
· anterior entrada de mi diario
· versión oficial
· More on atordo's Diary
· Also by atordo

Menu
· crear cuenta
· FAQ
· búsqueda
· Fuentes de Noticias

Login
Nueva cuenta
Usuario:
Contraseña:

Ver: Modo: Orden:
Biff vía jabber | 2 comentarios (2 temáticos, editoriales, 0 ocultos)
Charset (none / 0) (#1)
por atordo a las Mon Oct 11th, 2004 at 10:47:04 PM CET
(Información Usuario)

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.



Re: Charset (none / 0) (#2)
por atordo a las Mon Oct 18th, 2004 at 05:04:29 AM CET
(Información Usuario)

Se puede evitar el recode usando Unicode::String para convertir los textos en el propio sJab.

La receta para procmail quedaría:
:0
{
   :0 c:$HOME/tmp/.lockmail
   $DEFAULT

   :0 h
   | $MAILDIR/cabeceras.pl \
   | $HOME/bin/sJab -u remitente -p contraseña -t destinatario -q 'Nuevo correo'
}


Este es el diff para sJab:
--- sJab.bak    Wed Oct  6 07:34:49 2004
+++ sJab        Mon Oct 18 04:25:56 2004
@@ -49,6 +49,7 @@
 #####################################################################
 use Net::Jabber qw(Client);
 use Getopt::Std;
+use Unicode::String qw(latin1 utf8);
 #use strict;

 getopt('upcstmq',\%opts); # Get options
@@ -89,7 +90,7 @@

 # Jabber-Specific "Constants"
 #my $SUBJECT   = "Aviso sJab";
-my $SUBJECT    = $opts{q};
+my $SUBJECT    = &utf8($opts{q});
 #my $SERVER    = "jabberes.org";
 my $SERVER     = "amessage.info";
 my $PORT       = 5222;           # Jabber Port
@@ -116,10 +117,10 @@

 # If a Message is defined, don't use STDIN
 if ($opts{t} && $opts{m}) {
-   jabberMessage($user, $SUBJECT, $msg);
+   jabberMessage($user, $SUBJECT, &utf8($msg));
 }
 elsif ($opts{c} && $opts{s} && $opts{m}) {
-   jabberGroup($conference,$server,$msg);
+   jabberGroup($conference,$server,&utf8($msg));
 }
 else {
    # Take input from STDIN
@@ -140,7 +141,7 @@
          exit(0);
       }
    }
-   jabberMessage($user, $SUBJECT, $msg) if ($opts{t});
+   jabberMessage($user, $SUBJECT, &utf8($msg)) if ($opts{t});
 }

 # Disconnect from Jabber Service
@@ -267,4 +268,7 @@
 }


-
+sub utf8 {
+   my $c=latin1(shift);
+   return $c->utf8;
+}


[ Padre ]


 
Biff vía jabber | 2 comentarios (2 temáticos, editoriales, 0 ocultos)
Ver: Modo: Orden:

ecol Logo Powered by Scoop
Todas las Marcas Registradas y copyrights de esta página son propiedad de sus respectivos dueños.
Los comentarios son propiedad del que los escribe.
Los iconos de las noticias y el logotipo son propiedad de Javier Malonda.
El Resto © 2002 Escomposlinux.org y aledaños.

Puedes sindicar los contenidos de libertonia en formato RSS 1.0 y RDF 0.9. También se puede sindicar la cola de envíos pendientes de moderación.

El proyecto escomposlinux.org está dedicado a la memoria de tas

crear cuenta | faq | búsqueda