mardi 18 septembre 2012

Copier automatiquement certains attachements dans kmail

Le défi du jour est le suivant :

KMail est installé sur un PC, et je veux que lorsque des mails avec un certain type de pièce jointes arrivent, ces pièces jointes soient automatiquement enregistrées dans un dossier particulier.

Très simple : dans KMail, il est possible de définir des filtres, et lorsque ces filtres sont activés, d'appeler une commande externe.

Un exemple de filtre correspondant à mon besoin est :

Le filtre doit correspondre à tous les critères suivants :
Sujet contient DOC
Emetteur contient <mon mail d'origine>
Dans ce cas, exécuter la commande /home/cmege/bin/kmail_save_doc

Il n'y a plus qu'à créer la commande kmail_save_doc, dont voici le contenu (un peu de perl ce coup ci) :

#!/usr/bin/perl

use Email::MIME;

my $line;
my $message='';


# on recupere l'entree (le contenu du mail) dans la variable message

while ($line=<>)
{
    $message.=$line;
}

my $email = Email::MIME->new($message);


# et on parcoure toutes les parties de ce message
$email->walk_parts(sub {

      my ($part) = @_;
      return if $part->subparts; # multipart
      

      # on recupere le type mime de la partie en cours de lecture
      my $type=$part->content_type;

      # et si c'est du ms-word, on l'enregistre
      if ( $part->content_type =~ m[application/ms-word]gi ) {
           my $body = $part->body;
            
           my $fichier = Email::MIME->invent_filename($type);
           $fichier = ">>/home/cmege/Documents/$fichier.doc"; 
           open (MYFILE, $fichier);
           print MYFILE $body;
           close (MYFILE); 
      }
  }
);


Rendre ce fichier exécutable : chmod a+x /home/cmege/bin/kmail_save_doc

Ne pas oublier d'installer la librairie perl permettant de traiter les mails : 

sudo apt-get install libemail-mime-perl

Et voilà!