Table of Contents
Introduction :
pst2md (lire pst to maildir) est un script qui permet la conversion d’un pst vers un maildir sans utiliser de client de messagerie. Il s’avère très pratique lors de la migration de plusieurs boites mails dans un réseau.
En recherchant sur internet, j’ai vu que beaucoup de gens déplaçaient simplement les mails via Outlook du pst vers le compte imap. Cette manipulation est très longue et fastidieuse, aussi elle n’est pas toujours sans erreur. J’ai donc développé ce script à partir d’outils que l’on trouve sur le net.
Dépendances :
Patch :
J’ai du créer ce patch pour que convmv puisse convertir l’utf8 du pst vers utf7 modifié qu’utilise l’IMAP.
convmv-utf7imap.patch
--- convmv 2010-09-03 14:36:52.000000000 +0200
+++ convmv 2010-09-03 14:36:02.000000000 +0200
@@ -246,6 +246,7 @@
#use Encode 'is_utf8';
use Unicode::Normalize;
use utf8;
+use Encode::IMAPUTF7;
use bytes;
Getopt::Long::Configure ("bundling");
pst2md :
Voici le script bash qui associe ces différents programmes.
pst2md.sh
#!/bin/sh
PST2MDCONF=/etc/pst2md.conf
usage() {
echo "usage :"
echo "$0 -p file1.pst [-p file2.pst] ..."
echo "$0 -c <config file> (default /etc/pst2md.conf)"
echo "$0 -h"
echo ""
echo "Your Maildir will be created in $PWD with pst.XXXXX folder's name"
}
remove_mbox() {
while read line ; do
if [ -d "$line.mbox" ] ; then
rm -r "$line" && mv "$line.mbox" "$line"
fi
done
}
remove_dot() {
while read line ; do
DIRPATH=`echo "$line" | sed 's@^\(.*/\)\([^/].*\)$@\1@g'`
DIRNAME=`echo "$line" | sed 's@^\(.*/\)\([^/].*\)$@\2@g' | tr '.' '-'`
if [ ! "$line" == "$DIRPATH$DIRNAME" ] ; then
mv "$line" "$DIRPATH$DIRNAME"
fi
done
}
test_command() {
for i in $@ ; do
if [ ! -x "$i" ] ; then
echo "command $i not found"
ERR=1
fi
done
[ "$ERR" == "1" ] && exit 1
}
while getopts "p:c:h" opt ; do
case "$opt" in
p)
PST="$PST $OPTARG"
;;
c)
PST2MDCONF=$OPTARG
;;
h)
usage
exit 0
;;
\?)
echo "Unknown parameter"
exit 1
;;
esac
done
[ -z "$PST" ] && echo "-p parameter not specified" && exit 1
if [ ! -e $PST2MDCONF ] ; then
echo "$PST2MDCONF doesn't exist"
exit 1
fi
. $PST2MDCONF
test_command $READPST $MB2MD $CONVMV
TMP=`mktemp -d $PWD/pst.XXXXX` || (echo "cannot create temporary directory" ; exit 1)
TMP2=`mktemp -d $PWD/pst.XXXXX` || (echo "cannot create temporary directory" ; exit 1)
LOG="$TMP2.log"
for i in $PST ; do
[ -f $i ] || echo "file $i doesn't exist !"
[ `echo $i | grep -i pst` ] || echo "file $i isn't an .pst file !"
$READPST -q -r -o $TMP $i >> $LOG 2>&1
done
$CONVMV --notest -f utf8 -t IMAP-UTF-7 -r $TMP >> $LOG 2>&1
find $TMP -mindepth 1 -type d -name '*.*' | remove_dot >> $LOG 2>&1
$MB2MD -s $TMP -R -d $TMP2 >> $LOG 2>&1
rm -r $TMP
find $TMP2 -type d ! -name '*.mbox*' ! -name cur ! -name tmp ! -name new | remove_mbox >> $LOG 2>&1
find $TMP2 -mindepth 1 -type d ! -name cur ! -name new ! -name tmp | sed 's@^.*/\.\(.*\)$@\1@g' >> $TMP2/subscriptions
echo "Your new maildir is $TMP2"
et son fichier de configuration
/etc/pst2md.conf
READPST=/usr/bin/readpst
MB2MD=/usr/bin/mb2md-3.20.pl
CONVMV=/usr/bin/convmv