Sync Mail Dir 1.1.0

A set of tools to synchronize a pair of mailboxes in Maildir format
Sync Mail Dir (smd) differs from other solutions in terms of performances and lower installation requirements. The widespread solution IMAP-server plus OfflineIMAP requires an IMAP server to be installed. Alternatively Maildirsync requires no IMAP server, just ssh, but it used to load my laptop CPU too much and it seems its development stopped in 2004.

Other general purpose tools like rsync or unison may work too, but not benefit from the fact that they are synchronizing mail messages. Sync Mail Dir is similar to Maildirsync in its design and requirements, but is more efficient, having its mechanisms written in C (around 700 lines), while policies are written in scripting languages like Lua and shell script (other 900 lines).

Sync Mail Dir uses ssh to transmit and receive data, and to run commands on the remote host (but in principle it could use any bi-directional channel, like nc for example).

Sync Mail Dir needs to be installed on both hosts: we call server the host we push to and pull from, we call client the host we push from and pull to. In the most common scenario, the server is our mail server, while the client is our laptop.

The directory ~/.smd/ contains the configuration file(s), some fifo needed to short-circuit the softwares running on the client and on the server, and a cache file (called db-file from now on) that represents the status of the mailbox last time we successfully pushed. The configuration file is needed only on the client host (the one that will run smd-pull and smd-push).

Sync Mail Dir is a layered set of tools, where low level tools are implemented in low level languages (to achieve decent performances) and high level tools are written in scripting languages (to achieve better flexibility).

 * mddiff is a small and hopefully efficient C program that given a db-file (a snapshot of a previous mailbox status) generates a set of actions (a diff) a client should perform to synchronize its local mailbox copy. It is a low level tool, not meant to be used directly by the user.
 * smd-server a simple script that calls mddiff to compute the diff, sends it to the client and then listen for client requests like getting a mail body or header. Even if this tool is simple to run, redirecting its input and output to smd-client over a network may not be straightforward, thus users should not call it directly.
 * smd-client a quite complex script applying a diff locally, eventually requesting data to the server. In case the diff cannot be applied cleanly, it outputs an error message that higher level tools should display to the user. As smd-server it is a quite high level tool, but should not be called directly by the average user.
 * smd-pull thanks to ssh, it executes smd-server on the server host and smd-client on the client host. This allows to pull remote changes and apply them locally. The remote mailbox is left untouched. This tool is meant to be called by the user.
 * smd-push thanks to ssh, it executes smd-client on the server host and smd-serer on the client host. This allows to push local changes and to apply them on the remote host. The local mailbox is left untouched. This tool is meant to be called by the user.
 * smd-loop runs runs smd-push and smd-pull at regular intervals as defined by the user in a configuration file, in the style of a crontab, but catches recoverable errors (like a, non recurrent, network problem), bailing out only in cases where human intervention is needed. This is the utility you may want to run if you are using a textual environment or a graphical one not based on GNOME.
 * smd-applet is an applet for the GNOME notification area, that runs smd-loop, eventually notifying the user for critical events and allowing him to solve them clicking on buttons instead of running commands from the shell.


Syncmaildir is part of the Debian archive. If you are running Debian or one of its derivatives, you can install the syncmaildir and syncmaildir-applet packages with your favourite package manager.

If you want to install it from source you need a C compiler, the development files for GLib, GNU make and sed. For smd-applet you also need the Vala compiler, libgee and GTK+ 2. You may also want to customize few variables in the Makefile. Then typing make && make install should be enough to have syncmaildir installed. Some known platforms are supported by templates defined at the end of Makefile, for example you may want to run make osx/text/all && make osx/text/install to properly build and install text mode only syncmaildir utilities on an MacOSX platform.

Runtime dependencies are: ssh, xdelta, sha1sum, lua5.1 and bash.

More documentation can be found on project's home page.

last updated on:
September 2nd, 2010, 10:35 GMT
license type:
GPL v3 
developed by:
Enrico Tassi
ROOT \ Communications \ Email
Sync Mail Dir
Download Button

In a hurry? Add it to your Download Basket!

user rating



Rate it!
What's New in This Release:
  • The Gnome applet now check network manager status, and automatically pauses if the computer is disconnected from any network.
read full changelog

Add your review!