Git Product home page Git Product logo

kanmail's Introduction

Kanmail

An email client that functions like a kanban board, for Mac/Windows/Linux/Docker. Download the latest release here.

  • Build on MacOS (beta), tested with Linux & Windows (alpha)
  • Developed using Gmail, Outlook & Fastmail
  • Should be compatible with other email providers (uses IMAP/SMTP)
  • Considered in "beta" - used as my main email client for >1yr

The rest of this readme focuses on the technical details of Kanmail. For user documentation see the docs directory.

©️ License

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 protected] for more information.

🛠️ Development

Setup your system

MacOS

Python must be configured --with-framework. See this StackOverflow answer to to check whether this is enabled.

To build/release you'll need to intsall GNU tar, which can be done with brew:

brew install gnu-tar

Linux (Ubuntu)

For qt to install properly you'll need:

apt install build-essential pkg-config git python3-dev libcairo2-dev libgirepository1.0-dev

Then, after requirements are installed you need to edit this pyinstaller file and comment out the lines that add fontconfig/icons/themes (prevents the resultant bundle being >200mb).

Windows

You'll need the Visual Studio build tools.

Install Python requirements

First install the requirements:

# Generic development requirements
pip install -r requirements/development.txt

# Platform specific requirements
pip install -r requirements/[macos|linux|windows].txt

To start the server + webpack-server:

honcho start

Then go to http://localhost:4420 to view/develop the app in a browser of your choice.

Or - to start the full windowed app, use:

honcho start -f Procfile-app

Note that the webserver does not auto-reload when running in app mode.

Releases

Version numbers are generated at build in the date-based format: MAJOR.YYMMDDhhmm.

🔄 Syncing

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.

kanmail's People

Contributors

0xflotus avatar fizzadar avatar lerentis avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.