Talk:Maildir to zmmailbox with bash

From Zimbra :: Wiki

Jump to: navigation, search

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