An IMAP migration script
So, last December I got an email from the email hosting provider for Nidelven IT that the email server would be taken down in 6 months time.I didn't like the timing, as I was in court process, the third one in 7 years about my kids, but understand that things are expensive to maintain, a potential security hole etc. when they age.
So I wrote a little script that pretty much would do what was necessary.
Then after some thinking, it struck me that this is something others would need to do, and it wasn't completely straightforward. So I decided I could model a script based on the process I was using.
Here's the script:
https://github.com/morphex/misc/blob/master/migrate-imap.py
I found the imapsync script:
https://github.com/imapsync/imapsync
Which can be used to do the heavy lifting. I read the license file for that project, and although I'm not a lawyer, it seems straightforward enough that I can use it for my needs. It might've been a better choice to use a known license, but whatever, it is very minimalist and straightforward in its wording.
The script just lists folders for now, then I guess it could build a shell script file which calls imapsync, and that can be inspected and executed.
I was scratching my head a bit as I was writing the script, as the print() statement printed parentheses, then I saw I was running it with python 2 and not 3.
Other than that, I wasn't able to figure out a way to parse command line options for the script using just getopt, am I missing something or is there another module?
[Update on the 13th of May]
The script is now more or less complete. Gilles also responded to an email, saying imapsync imapsync also has --justfolderlists.
I couldn't quite understand the getopt module, haven't used it much before.
[Update on the 15th of May]
I'm now using this script to run imapsync, and imapsync is chugging away, at around 5-6 messages per second.
After posting the previous update I looked over the script a few times, and spotted a print() statement too much, in the generation of the shell script. That goes to show that just looking over code is useful.
Latest commit here: https://github.com/morphex/misc/commit/bcf34c85e93237e79f1920a7184bf0f4e7f5032f
I also made SSL mandatory, it's the kind of mistake someone could make, not using SSL, and it's easy to edit the script file afterwards to remove it, if you know what you're doing.
[Update on the 16th of May]
So the build migration script script is working, and imapsync looks like a sturdy piece of software, it ran through hundreds of thousands of messages in one run. Had to add a command line flag to copy header-less messages, imapsync suggested it might be Draft messages etc. and was on about a Message-ID. A second pass copying over remaining messages was uneventful.
[Permalink] [By morphex] [Python and web (Atom feed)] [09 May 19:53 Europe/Oslo]