Create a gist now

Instantly share code, notes, and snippets.

Embed
What would you like to do?
imapsync script to migrate multiple IMAP accounts in a row
# <SRCUSER> <SRCPW> <DSTUSER> <DSTPW>
#!/bin/bash
############# CONFIGURATION ###########
ACCOUNTS=accounts.list
SRCHOST=imap.example.com
DSTHOST=imap.onlime.ch
#######################################
EXTRALOG=sync.log
TSFORMAT="%Y-%m-%d %H:%M:%S"
# loop through all accounts
grep -ve '^#.*' $ACCOUNTS | while read SRCUSER SRCPW DSTUSER DSTPW
do
MESSAGE="[`date +"$TSFORMAT"`] synchronizing $SRCUSER@$SRCHOST to $DSTUSER@$DSTHOST ..."
echo $MESSAGE
echo $MESSAGE >> $EXTRALOG
# security: temporarly store passwords to files in order
# not to pass them directly by command line option
echo -n $SRCPW > imap-secret-src
echo -n $DSTPW > imap-secret-dst
## VARIANT 1) source host supports SSL/TLS (imap port 993)
imapsync --host1 $SRCHOST --ssl1 --port1 993 --authmech1 PLAIN --user1 $SRCUSER --passfile1 imap-secret-src \
--host2 $DSTHOST --ssl2 --port2 993 --authmech2 PLAIN --user2 $DSTUSER --passfile2 imap-secret-dst \
--delete2 --delete2folders
## VARIANT 2) source host does not support SSL/TLS (imap port 143)
#imapsync --host1 $SRCHOST --port1 143 --authmech1 PLAIN --user1 $SRCUSER --passfile1 imap-secret-src \
# --host2 $DSTHOST --ssl2 --port2 993 --authmech2 PLAIN --user2 $DSTUSER --passfile2 imap-secret-dst \
# --delete2 --delete2folders
## VARIANT 3) source host has different INBOX prefix, transform it while syncing
#imapsync --host1 $SRCHOST --ssl1 --port1 993 --authmech1 PLAIN --user1 $SRCUSER --passfile1 imap-secret-src \
# --host2 $DSTHOST --ssl2 --port2 993 --authmech2 PLAIN --user2 $DSTUSER --passfile2 imap-secret-dst \
# --delete2 --delete2folders
# --regextrans2 "s/INBOX.INBOX/INBOX/"
rm -f imap-secret-*
done
MESSAGE="[`date +"$TSFORMAT"`] imapsync sucessfully completed!"
echo $MESSAGE
echo $MESSAGE >> $EXTRALOG
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment