All Projects β†’ Oxygem β†’ Kanmail

Oxygem / Kanmail

Licence: other
πŸ“₯ An email client that functions like a kanban board.

Programming Languages

javascript
184084 projects - #8 most used programming language
python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Kanmail

Meli
🐝 experimental terminal mail client, mirror of https://git.meli.delivery/meli/meli.git https://crates.io/crates/meli
Stars: ✭ 242 (-70.95%)
Mutual labels:  email, imap
himalaya
Command-line interface for email management
Stars: ✭ 1,715 (+105.88%)
Mutual labels:  email, imap
attachment-downloader
Simple tool for downloading email attachments for all emails in a given folder using an IMAP client
Stars: ✭ 52 (-93.76%)
Mutual labels:  email, imap
Mailer
A light-weight, modular, message representation and mail delivery framework for Python.
Stars: ✭ 225 (-72.99%)
Mutual labels:  email, imap
Deltachat Core Rust
Delta Chat Rust Core library, used by Android/iOS/desktop apps and bindings
Stars: ✭ 300 (-63.99%)
Mutual labels:  email, imap
Mailu
Insular email distribution - mail server as Docker images
Stars: ✭ 3,151 (+278.27%)
Mutual labels:  email, imap
Imap
Object-oriented, fully tested PHP IMAP library
Stars: ✭ 678 (-18.61%)
Mutual labels:  email, imap
Mnm
The legitimate email replacement β€” n-identity, decentralized, store-and-forward, open protocol, open source. (Server)
Stars: ✭ 162 (-80.55%)
Mutual labels:  email, imap
Php Imap Client
a easy solution for simple IMAP email access in php
Stars: ✭ 254 (-69.51%)
Mutual labels:  email, imap
imapx
A cross-platform IMAP library for .NET, supporting .Net 2.0 - 4.5, Mono and Windows Phone
Stars: ✭ 28 (-96.64%)
Mutual labels:  email, imap
Vmime
VMime Mail Library
Stars: ✭ 218 (-73.83%)
Mutual labels:  email, imap
Sieve
Sieve Script Editor
Stars: ✭ 452 (-45.74%)
Mutual labels:  email, imap
Lumail
A console-based mail-client with integrated Lua scripting support.
Stars: ✭ 187 (-77.55%)
Mutual labels:  email, imap
Rust Imap
IMAP client library for Rust
Stars: ✭ 237 (-71.55%)
Mutual labels:  email, imap
Imap tools
Work with email and mailbox by IMAP
Stars: ✭ 167 (-79.95%)
Mutual labels:  email, imap
yggmail
End-to-end encrypted email for the mesh networking age
Stars: ✭ 72 (-91.36%)
Mutual labels:  email, imap
Magma
The magma server daemon, is an encrypted email system with support for SMTP, POP, IMAP, HTTP and MOLTEN,. Additional support for DMTP and DMAP is currently in active development.
Stars: ✭ 1,740 (+108.88%)
Mutual labels:  email, imap
Mattermail
Email Integration for Mattermost
Stars: ✭ 145 (-82.59%)
Mutual labels:  email, imap
ESP-Mail-Client
⚑️Arduino Mail Client Library to send, read and get incoming mail notification for ESP32, ESP8266 and SAMD21 devices. The library also supported other Arduino devices using Clients interfaces e.g. WiFiClient, EthernetClient, and GSMClient.
Stars: ✭ 78 (-90.64%)
Mutual labels:  email, imap
Mailkit
A cross-platform .NET library for IMAP, POP3, and SMTP.
Stars: ✭ 4,477 (+437.45%)
Mutual labels:  email, imap

Kanmail

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

  • Works on MacOS, Windows & Docker (see Linux support issue)
  • Developed using Gmail, Outlook & Fastmail
  • Should be compatible with other email providers (uses IMAP/SMTP)
  • Considered in "beta" - used as primary email client for >1yr

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

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

Development

Setup your system

MacOS

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

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

brew install gnu-tar

Windows

You'll need the Visual Studio build tools.

Linux (Ubuntu)

For gtk to install properly you'll need:

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

Install requirements

Python

Kanmail requires Python 3.7. Install the Python requirements with pip:

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

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

JavaScript

Install the JavaScript requirements with yarn:

yarn

Start the app

Run as a server

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.

Run as an app

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.

Building

Per the pyinstaller documentation, for maximum compatability Kanmail is ideally built on the oldest systems available. MacOS + Linux builds are forward, but not backward, compatible.

Kanmail is currently built on:

  • MacOS 10.15 (using 10.12 SDK), compatible with 10.12+
  • Ubuntu 18 64 bit, compatible with libc6 2.27+
  • Windows 10 64 bit, compatible with ?

Build environments

MacOS

Should use the oldest SDK possible. Kanmail will be compatible with the SDK version of any newer versions, but nothing older, so target the oldest realistic SDK, which is currently 10.12 / Sierra. Heavily based on this gist.

Setup a separate environment
export BUILD_ENV_PREFIX=/opt/osx10.12-env

export PATH="$BUILD_ENV_PREFIX/Frameworks/Python.framework/Versions/3.7/bin:$BUILD_ENV_PREFIX/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin"

export MACOSXSDK=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk

export MACOSX_DEPLOYMENT_TARGET="10.12"

export CFLAGS="-isysroot $MACOSXSDK  -I$MACOSXSDK/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I$BUILD_ENV_PREFIX/include "
export LDFLAGS="-isysroot $MACOSXSDK -L$BUILD_ENV_PREFIX/lib "
export LD_LIBRARY_PATH="$BUILD_ENV_PREFIX/lib/"
export CXXFLAGS="-isysroot $MACOSXSDK -I$BUILD_ENV_PREFIX/include "
export CPPFLAGS="-I$MACOSXSDK/usr/include -I$BUILD_ENV_PREFIX/include -I$BUILD_ENV_PREFIX/include/openssl "
OpenSSL

Download & untar openssl-1.0.2u.

./Configure --prefix=$BUILD_ENV_PREFIX \
    no-hw no-hw-xxx no-ssl2 no-ssl3 no-zlib zlib-dynamic \
    shared enable-cms darwin64-x86_64-cc enable-ec_nistp_64_gcc_128 \
    -isysroot$MACOSXSDK \
    -mmacosx-version-min=$MACOSX_DEPLOYMENT_TARGET
make depend
make
make install
Python

Download & untar Python-3.7.6.

./configure --prefix=$BUILD_ENV_PREFIX/ \
    --enable-ipv6 \
    --enable-framework=$BUILD_ENV_PREFIX/Frameworks/ \
    --with-openssl=$BUILD_ENV_PREFIX \
    MACOSX_DEPLOYMENT_TARGET="$MACOSX_DEPLOYMENT_TARGET"
make
make install PYTHONAPPSDIR=$BUILD_ENV_PREFIX/Applications

# Tidy up
cd $BUILD_ENV_PREFIX/Frameworks/Python.framework/Versions/3.7/bin
ln -s python3 python
ln -s pip3 pip

Finally install the requirements (from source, no binaries):

pip install pip -U
pip install -r requirements/macos.txt

Using this environment should now build apps compatible with MacOS 10.12+. This can be tested by installing a MacOS 10.13 VM.

Linux (Ubuntu)

Should use the oldest libc possible. Currently building using Ubuntu 18 which has libc6 2.27, which is pretty recent.

TBC instructions to build on an older libc.

Windows

Currently builds on Windows 10. Unsure if compatible with previous versions.

Doing a build

Building Kanmail should be as simple as running python -m make.

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.

User Interface

The Kanmail UI consists of a collection of React apps, one per window "category".

EmailsApp

The main Kanmail window, including the column and email thread views. This is where the interesting stuff lives!

Column / thread renders

Rendering columns can be expensive, so Kanmail uses a few "hacks" to reduce the amount of renders required. For example, when archiving or trashing a thread, it's hidden from the user but the underlying component remains in-place. Only the thread component itself updates and the surrounding column does not re-render.

Keyboard navigation

Kanmail supports navigating between threads and between columns using the keyboard. To achieve this every thread component contains a reference to access the component above/below (other threads same column) and also the adjacent columns left/right. This is achieved using React references.

SendApp

The send/reply/forward email window and editor.

SettingsApp

The settings window. Handles account management as well as general application settings.

ContactsApp

The contacts window. Handles add/remove/delete contacts API.

LicenseApp

The license window. Add/remove a license key.

MetaApp

The meta/about window, includes license information.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].