Before continuing it is important to note that Kanmail is source available but not free. Kanmail is available for free download for evaluation; for continued use of Kanmail a license should be purchased.
We welcome pull requests, but note you will be contributing to a non-free project. You will be required to sign the Oxygem CLA before any contributions can be merged. We offer free license keys to contributors, please email email@example.com for more information.
Note that the webserver does not auto-reload when running in app mode.
Version numbers are generated at build in the date-based format: MAJOR.YYMMDDhhmm.
Kanmail syncs email using the IMAP protocol. Instead of implementing a “complete sync engine” (one which attempts to keep a local copy of the server data), Kanmail uses a cache and loads data on demand. This simplifies the implementation but makes it hard/impossible to behave as an offline email client.
Kanmail keeps in sync with the remote server by checking UID lists. These are cached locally and every “sync” the full list is refreshed, ensuring the local copy is up to date with the server UID list. Email headers are cached against their UIDs.
Currently no actual full email data is cached, only the headers. Meaning when offline Kanmail will load any cached threads into the column view, but it won’t be able to open any of these threads.
Initial load (get emails)
When Kanmail starts, the UI attempts to get emails for each folder (both columns and “core” folders like archive/drafts) – this API endpoint is always expected to return a valid response, even if empty, and does not require connectivity. If there is a local cache of UIDs and email headers, these will be returned.
Subsequent calls to this API endpoint will load more emails, loading headers from the server as required.
Updates (sync emails)
During the lifetime of a running Kanmail app it will periodically request to sync emails with the server. At this time the full UID list is reloaded from the server (failing if offline) and any new email headers are fetched. This endpoint returns new emails and the UIDs of any deleted emails from the UID list.