#!/usr/bin/perl -w # =========================================================================== # mbox2ezmlm.pl # # Author: Alessandro Ranellucci # Contributor : Jean-Pascal Milcent # Copyright (c) 2005. # Modification : # - utilisation d'options en ligne de commande [jpm le 26/05/2008] # - modification de l'affichage de sortie, affichage du numéro Yahoo du message [jpm le 26/05/2008] # - Recréation de l'entête Date s'il est faux à partir des entêtes Received ou X-Received [jpm le 27/05/2008] # - Suppression du postid dans l'entête From [jpm le 27/05/2008] # - Utilisation du paramêtre "jwz_From_" pour permetre une analyse du fichier Mbox plus laxiste [jpm le 28/05/2008] # see http://ezmlm-www.sourceforge.net #----------------------------------------------------------------------- use strict; use warnings; use Getopt::Long (); use Email::Folder; use Email::LocalDelivery::Ezmlm; my $VERSION_STRING = "0.1"; my $archive; my $mbox; my $help; my $version; my $min; my $max; # Extract the program basename my $progname = $0; $progname =~ s@^.*[\\/]@@; $progname =~ s/.pl$//; # Usage my $usage = <] Import mbox file into an ezmlm archive directory. --help give the usage message showing the program options --version show the program version and exit -i mbox the path to your mbox file --max year year max for a message --min year year min for a message EOF ; # main program start ############################################################################### # don't forget to modify the usage section above if you add more options! Getopt::Long::GetOptions ( 'version' => \$version, 'help' => \$help, 'min=s' => \$min, 'max=s' => \$max, 'i=s' => \$mbox, '<>' => sub { if ( $archive ) { die "Only one ezmlm list name argument allowed.\n" . $usage } $archive = $_[0] } ) || die $usage; if ( $version || $help ) { if ( $version ) { print "$progname version $VERSION_STRING.\n"; } else { print $usage; } exit 0; } #---- my %options = ('jwz_From_' => 1); my $folder = Email::Folder->new($mbox, %options); foreach my $message ($folder->messages) { # Gestion des entête Dates : correction des dates érronnées my $date = $message->header("Date"); $date =~ / (\d{4}) /; if ($1 < $min || $1 > $max) { my $received = $message->header("Received"); if ($received =~ /; (.*)$/) { $message->header_set("Date", $1); } else { my $xreceived = $message->header("X-Received"); if ($xreceived =~ /; (.*)$/) { $message->header_set("Date", $1); } } } # Gestion des entêtes From : suppression des postid my $from = $message->header("From"); if ($from =~ s/@.+\.yahoo\.invalid/\@yahoo.invalid/i) { $message->header_set("From", $from); } # Création de l'archive Email::LocalDelivery::Ezmlm->deliver($message->as_string, $archive); printf "[%s] Message Yahoo # : %s\n", $message->header("Date"), $message->header("X-Yahoo-Message-Num"); } 1;