(Comments)
Zimbra is a fantastic open source mail
server. It basically wraps Postfix, and has a beautiful webmail interface
including a great calendar system. Yes, AJAX, buzzwords, all apply.
I've been wanting to migrate my mail into an IMAP server with a nice webmail
frontend for a while. The advantages: being able to use mail from more than
one machine, including my laptop when away and disconnected, other members of
the family being able to use mail, etc, etc. Zimbra seemed like the best fit
I'd seen since my last set of investigations (which incorporated dovecot,
Hula, etc, etc).
At first I thought I'd just try out moving my mail in and see what problems I
hit. By the time I had that done, I thought it would be a waste of time to
retreat so I advanced headlong into the fray... Thus eating up a week of time
or so, in which I was mostly unable to do very much with mail or anything
else. (I should have thought beforehand, "I'm not really a mail admin
person").
Anyhow, at the end of the process I think its been very successful and am very
happy with Zimbra. This post is basically a summary of what I've learnt in the
hope that other people will try out Zimbra and I will feel relief at the sense
of not having to go through that again...
I had around 270000 messages in my Mozilla folder hierarchy, some dating back
to around 1996. Total size about 4GB. This meant that the actual process of
copying the mails was fairly cumbersome, especially if I wanted to check that
everything copied OK (don't want to lose mail in the process!)
I installed Zimbra on Fedora Core 4, on my normal development / server machine.
Don't be too concerned about the admonition to use a separate server, you can
run Zimbra happily alongside existing instances of MySQL, Apache etc (Zimbra
installs its own, hopefully in the future you can integrate it into your
existing apps). I just needed to set Zimbra to only serve https, then I can
access webmail etc on that port and my normal Apache takes care of port 80.
I then ended up developing some Python code to be able to do the things I
wanted to fix up my mailbox etc. I've called this
pyzimbra. These don't really
consist of bindings to Zimbra code yet, but rather code to interact with the
database, the message store, etc.
Issues encountered included:
Messages that refused to be copied (like finding a needle in a haystack), - I still have to resolve this one, only a dozen or so.
Dates on messages that didn't have proper date headers came out as 1st Jan
1970. Dates in the webmail view showed the time the message was copied rather than its original time. To fix these problems I wrote modules to connect to the zimbra database, and find the message file corresponding to each message in the database. I then checked if the message lacked a Date header and gratuitously added one based on other headers like Received (I'm sure this is naughty...). I then update the received date in the database (and alter the content-length if I added a date header). It was quite fun finding my way around the database etc, and the modules for doing this are fairly generic.
I'd also like to retrieve the Mozilla Flags (replied to etc) but unfortunately
they don't get stored in the headers on the IMAP server after copying so that
would involve finding the original message in the Mozilla mailbox that
corresponds to the one in the Zimbra store.
Migrating my Mozilla mail filters to Zimbra: Zimbra uses
Sieve
for mail filtering. There is a nice utility for converting Mozilla's msgFilterRules.dat
to a Sieve script (Javascript in a web page - use "/" as a separator in the option):
mozilla2sieve.
The Sieve script is stored in an LDAP attribute that I couldn't seem to access.
You can access it via the zmprov utility, but there are
caching problems.
The more serious issues are that Zimbra's Sieve implementation uses regular
expressions, which makes havoc when you try and download a few thousand
messages that have been queuing up and none of them get filtered - it will
only display errors with the script when it actually tries to filter them.
Look out for [ and *!!!
Interestingly the Webmail Filters page basically deals with an XML
representation of the Sieve script that it sends back and forth to the server.
If you're just running a few accounts through Zimbra and your main domain is hosted elsewhere,
the
Split Domain
article on the wiki is really helpful.
Since I'm on an ADSL connection with a changing IP address, I'm using
fetchmail to retrieve my mail periodically. Refused SPAM messages give a 501 response
to the SMTP instruction.
Finally I wrote some nice backup scripts and utilities. zimbra/scripts/linkfolders.py
is quite neat - it creates a directory structure on disk like the Folder
structure in Zimbra, and symlinks the messages to their home on the message
store. Nice for working out disk allocation, and as an alternate backup
mechanism.
Share on Facebook
Comments