Talk:Maildir to zmmailbox with bash
From Zimbra :: Wiki
I modified the script to also import folders with spaces and special chars in their names. The structure of the source-folders is different in my script though.
Script uses perl (module Unicode-IMAPUtf7) to convert IMAP-folder's name to UTF-8.
cd /data/maildir
find . -type d -name 'cur' | sed 's|/cur$||' | sort | while read p; do
ZMMBOX=/opt/zimbra/bin/zmmailbox
BDIR=/data/maildir
DOMAIN=mydomain.com
UNAME="`echo "$p" | cut -d'/' -f2`"
DIRNAME="`echo "$p" | cut -d'/' -f4`"
# needs http://search.cpan.org/~fabpot/Unicode-IMAPUtf7-2.01/
DIRNAME_ZIMBRA="`perl -e "use Unicode::IMAPUtf7; my \\$t = Unicode::IMAPUtf7->new(); print \\$t->decode('$DIRNAME');"`"
DIRNAME_ZIMBRA="`echo "$DIRNAME_ZIMBRA" | sed 's/^\.\?//' | sed 's|\.|/|g'`"
if [ "$DIRNAME_ZIMBRA" = "" ]; then
DIRNAME_ZIMBRA="Inbox"
elif [ "$DIRNAME_ZIMBRA" = "Spam" ]; then
DIRNAME_ZIMBRA="Junk"
fi
#$ZMMBOX -z -m "$UNAME@$DOMAIN" emptyFolder "/$DIRNAME_ZIMBRA"
echo "Importing folder '$DIRNAME_ZIMBRA' for $UNAME@$DOMAIN from $BDIR/$UNAME/Maildir/$DIRNAME"
$ZMMBOX -z -m "$UNAME@$DOMAIN" createFolder "/$DIRNAME_ZIMBRA"
if [ "$DIRNAME_ZIMBRA" = "Inbox" ]; then
DIRNAME=
fi
for c in cur new; do
$ZMMBOX -z -m $UNAME@$DOMAIN addMessage "/$DIRNAME_ZIMBRA" "$BDIR/$UNAME/Maildir/$DIRNAME/$c"
done
done
