Strumenti Utente

Strumenti Sito


documentazione_3di_riservata:manuali_sysadmin:mail

Questa è una vecchia versione del documento!


Gestione servizi di posta

Mail interna

Mail esterna

Procedure automatizzate

Conversione maildir posftfix in file mbox

Dalla wiki di Dovecot si è estratto e riadattato uno script perl per convertire in mbox anche le maildir prodotte da postfix mediante il programma formail (già presente nella suite di postfix).

Si riporta il codice utilizzato per la conversione. Lo script necessita del pacchetto Path::Iterator::Rule (presente anche su CPAN) per funzionare. Nel caso la propria distro non lo preveda tra i suoi pacchetti, è possibile installarlo mediante il comando:

cpan -i Path::Iterator::Rule
maildir2mbox.pl
#!/usr/bin/perl
 
use Path::Iterator::Rule;
use Cwd;
use File::Basename;
use File::Spec;
 
use warnings;
 
sub recurse_maildir {
  my $rule = Path::Iterator::Rule->new;
 
  $rule->directory;
  $rule->skip_subdirs ("cur","new","tmp");
 
  foreach my $dir ( $rule->all($_[0])) {
    print "Going into ",  $dir, "\n";
    next unless stat("$dir/cur") || stat("$dir/new");
    my $pwd = getcwd;
    chdir ($dir);
    if ($dir eq $parentDir ) {
      $dir = "INBOX";
    }                                                                                                                                                                                                 
    my $cleanDir = basename($dir);                                                                                                                                                                    
    if ($cleanDir =~ m/^\.(.*)/ ) {                                                                                                                                                                   
       $cleanDir = $1;                                                                                                                                                                                
    }                                                                                                                                                                                                 
    my $finalOutputFile = File::Spec->catfile (dirname ($outputfile),$cleanDir . "_" .  basename ($outputfile));                                                                                      
    print "Saving all mails to $finalOutputFile)\n";
    my @files = (<cur/*>,<new/*>);
    foreach my $file (@files) {
       next unless -f $file; # skip non-regular files
       next unless -s $file; # skip empty files
       next unless -r $file; # skip unreadable files
       $file =~ s/'/'"'"'/;  # escape ' (single quote)
       my $run = "cat '$file' | $cmd >>'$finalOutputFile'";
       system($run) == 0 or warn "cannot run \"$run\".";
    }
    chdir ($pwd);
  }
 
}
 
# dw-maildirtombox.pl
# dw = Dovecot Wiki :-)
# NOTE! The output file must not contain single quotes (')!
# figure out which program to run
$cmd="reformail -f1";
system("$cmd </dev/null >/dev/null 2>/dev/null") == 0 or $cmd="formail";
system("$cmd </dev/null >/dev/null 2>/dev/null") == 0
or die "cannot find reformail or formail on your \$PATH!\nAborting";
$parentDir=$ARGV[0];
$outputfile=$ARGV[1];
if (($outputfile eq '') || ($parentDir eq ''))
{ die "Usage: ./archivemail.pl mailbox outputfile\nAborting"; }
 
recurse_maildir ($parentDir);
/data/attic/documentazione_3di_riservata/manuali_sysadmin/mail.1451564351.txt.gz · Ultima modifica: 2017/09/08 10:59 (modifica esterna)