/imap_copy

Simple tool to copy folders from one IMAP server to another server.

Primary LanguagePythonBSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

IMAP Copy

This is a very simple tool to copy folders from one IMAP server to another server.

Example:

The example below copies all messages from the INBOX of your other server into the 'OTHER-SERVER/Inbox' folder of Gmail.

python imapcopy.py "imap.otherserver.com.au:993" "username:password" \
"imap.googlemail.com:993" "username@gmail.com:password" \
"INBOX" "OTHER-SERVER/Inbox" --verbose

Since Gmail terribly throttles uploading and downloading mails over IMAP, you may find the 'skip' and 'limit' options handy. If Gmail disconnected you after copying 123 emails out of your total 1000 emails in the example shown above, you may use the following command to resume copying skipping the first 123 messages.

python imapcopy.py "imap.otherserver.com.au:993" "username:password" \
"imap.googlemail.com:993" "username@gmail.com:password" \
"INBOX" "OTHER-SERVER/Inbox" --skip 123

Similarly the 'limit' option allows you to copy only the N number of messages excluding the skipped messages. For example, the following command will copy message no. 124 to 223 into Gmail.

python imapcopy.py "imap.otherserver.com.au:993" "username:password" \
"imap.googlemail.com:993" "username@gmail.com:password" \
"INBOX" "OTHER-SERVER/Inbox" --skip 123 --limit 100

There is also 'recurse' option that copies contents of folders with all of its subfolders. Also if you replace source mailbox with empty string, it will copy all contents of that mailbox:

python imapcopy.py "imap.otherserver.com.au:993" "username:password" \
"imap.googlemail.com:993" "username@gmail.com:password" \
"" "OTHER-SERVER" --recurse

Usage:

usage: imapcopy.py [-h] [-q] [-v]
               source source-auth destination destination-auth mailboxes
               [mailboxes ...]

positional arguments:
  source            Source host ex. imap.googlemail.com:993
  source-auth       Source host authentication ex. username@host.de:password
  destination       Destination host ex. imap.otherhoster.com:993
  destination-auth  Destination host authentication ex.
                    username@host.de:password
  mailboxes         List of mailboxes alternate between source mailbox and
                    destination mailbox.

optional arguments:
  -h, --help        show this help message and exit
  -c, --create-mailboxes
                    Create the mailboxes on destination
  -r, --recurse     Recurse into submailboxes
  -q, --quiet       ppsssh... be quiet. (no output)
  -v, --verbose     more output please (debug level)
  -s N, --skip N    skip the first N message(s)
  -l N, --limit N   only copy N number of message(s)

Only tested on Python 2.7.