Zarafa is an email groupware system that aims to provide the capabilities of Microsoft Exchange on Linux servers. It's almost entirely open source, the only exception being an Outlook compatibility layer for business users who are used to Outlook and don't want to switch away. Over the last few months I've been investigating it for some of my clients and have been very impressed, it's been very stable and unlike the other Exchange alternatives out there it has a totally open source implementation of Microsoft's ActiveSync for push email and contact synchronisation with smartphones such as the Apple iPhone.
That said, there are a few minor niggles with it. Progress seems to be rapid so far and I'm sure they'll be fixed shortly, but in the meantime some workarounds are needed. The biggest (only?) real problem I've found with it so far is that there's no inbuilt functionality for users to change their passwords via the web interface. The semi-official Zarafa integrations project includes a plugin to allow users to change their password but unfortunately I found it a little bit flaky during testing. This led me to supply my clients with a different solution. It doesn't integrate as elegantly with the main interface but it is rather more reliable. Credit where credit's due: it's an improved version of the code on the Zarafa forums provided by samu, so a big “Thank you!” to samu.
Drupal seems to get confused when I try to paste the code directly into in this article, so it's attached below as change_password.php_.txt instead. To install it onto your Zarafa setup save the file below as 'change_password.php' and copy it into the zarafa-webaccess directory on your Zarafa webserver. You can then direct users to e.g. https://zarafa.example.com/webaccess/change_password.php when they want to change their password. The code is public domain so you are free to do what you want with it, although credit to samu and to Kitson Consulting would be appreciated.