Questa è una vecchia versione del documento!
Indice
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])) { next unless stat("$dir/cur") || stat("$dir/new"); print "Going into ", $dir, "\n"; 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);
Backup di tutte le cartelle di posta
In concomitanza allo script Perl sopra riportato, è stato realizzato un altro script bash per effettuare il backup automatizzato di tutte le maildir degli utenti. Tale script esegue le seguenti operazioni per ogni maildir:
- compressione in 7z di tutta la maildir così com'è
- conversione in mbox di tutte le cartelle contenute nella maildir e successiva compressione in 7z
- salvataggio degli archivi compressi su \\storage\UTSHARE\nomeUtente
Di seguito il codice dello script.
- backupMaildirs.sh
#!/bin/bash MAILDIR_ROOT=/var/vmail/3di.it OUTPUT_ROOT=/mnt/UTSHARE OUTPUT_GROUP=5106 MAILDIRS=(aalberghini abarducci afistani bcerr commerciale dcwerr dpranteda eluconi fcappelli ganastasi gmgelli helpdesk helpdesk-area itarlassi lpalumbo lsopko mb-archivio mb-proto mbelluomini mbernardini mbrugnetti mciullo mgelli mpascale mstancikova ncandelora opera-assistenza pgramaccioni ppala rtirabassi scavinato sesar siammtest spassarotto sstagni sviluppo test-archiviatore tickets vcapoccia) set -e cd "$MAILDIR_ROOT" for USER in ${MAILDIRS[@]} do echo "Processing $USER maildir" TEMPDIR=$(mktemp -d) if [ ! -d "$OUTPUT_ROOT/$USER" ] then echo "Creating output folder" install -d -m700 -g "$OUTPUT_GROUP" -o "$USER" "$OUTPUT_ROOT/$USER" fi echo "Creating maildir archive: 7z a -mx=9 -m0=LZMA2 $OUTPUT_ROOT/$USER/${USER}_maildir.7z" 7z a -mx=9 -m0=LZMA2 "$OUTPUT_ROOT/$USER/${USER}_maildir.7z" "$USER" echo "Creating mbox archives: /root/bin/dw-maildir2mbox_recur.pl $USER $TEMPDIR/${USER}.mbox" /root/bin/dw-maildir2mbox_recur.pl "$USER" "$TEMPDIR/${USER}.mbox" ( cd "$TEMPDIR" && 7z a -mx=9 -m0=LZMA2 "$OUTPUT_ROOT/$USER/${USER}_mbox.7z" *.mbox ) rm -rf "$TEMPDIR" chown $USER:$OUTPUT_GROUP "$OUTPUT_ROOT/$USER/${USER}"_{maildir,mbox}.7z done