Skip to content

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
@killmasta93

This comment has been minimized.

Copy link

killmasta93 commented Feb 22, 2020

Thank you for the script, quick question how could we add to exlude trash folder?

something like this ?

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
             --exclude "Trash"

but i dont get the command --delete2 --delete2folder?

@dassysadmin

This comment has been minimized.

Copy link

dassysadmin commented Feb 22, 2020

@Killma

Thank you for the script, quick question how could we add to exlude trash folder?

something like this ?

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
             --exclude "Trash"

but i dont get the command --delete2 --delete2folder?

You forgot to put \ on end of line :

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 \ --exclude "Trash"

@killmasta93

This comment has been minimized.

Copy link

killmasta93 commented Mar 3, 2020

Thank you

@killmasta93

This comment has been minimized.

Copy link

killmasta93 commented Mar 3, 2020

quick question to add this to the code would be something like this?

 imapsync --host1 $SRCHOST --ssl1 --port1 993 --authmech1 PLAIN --user1 $SRC$
             --host2 $DSTHOST --ssl2 --port2 993 --authmech2 PLAIN --user2 $DST$
             --delete2 --delete2folders \
             --exclude "Trash" \
           --nofoldersizes \
            --skipsize \
             --fast \
          --exclude "Papelera" \
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.