Giter Site home page Giter Site logo

electronmail's Introduction

ElectronMail is an Electron-based unofficial desktop client for ProtonMail. The app aims to provide enhanced desktop user experience enabling features that are not supported by the official in-browser web clients. It is written in TypeScript and uses Angular.

Travis CI AppVeyor CI License GitHub top language

view-toggling

Download

The download page with Linux/OSX/Windows installation packages is here.

The way of verifying that the installation packages attached to the releases have been assembled from the source code is being provided.

Pacman and Snap packages are also available for installing from the following repositories (both repositories are being maintained by @joshirio):

Get it from the AUR

Get it from the Snap Store

Features

  • :octocat: Open Source.
  • ⚙️ Reproducible builds.
  • ⚙️ Cross platform. The app works on Linux/OSX/Windows platforms.
  • 🔎 Full-text search. Enabled with v2.2.0 release. See the respective issue for details.
  • 📦 Offline access to the emails. The local store feature enables storing your messages in the encrypted database.bin file, so you could view your messages offline, perform a full-text search against them and export them to EML files. Enabled since v2.0.0 release.
  • 📫 Multi accounts support per each email provider including supporting individual entry point domains.
  • 🔓 Automatic login into the app with a remembered master password using keytar module (keep me signed in feature).
  • 🔓 Automatic login into the email accounts, including filling 2FA tokens. Two auto-login delay scenarios supported in order to make it harder to correlate the identities, see the respective issue.
  • 🔓 Persistent email account sessions. The feature introduced since v4.2.0 version with the experimental label, #227. The feature enables the scenario when you to enter the account credentials on the login form only once, manually or automatically by the app, and then you never see the login form anymore for this email account even if you restart the app (unless you explicitly dropped the session in the admin area or it got dropped by the service due to the inactivity/expiration). If this feature is enabled for the account, manual credentials filling is the preferred option as a more secure option since you don't save the account credentials anywhere (credentials are encrypted though even if saved, see settings.bin file description in the FAQ).
  • 🔐 Encrypted local storage with switchable predefined key derivation and encryption presets. Argon2 is used as the default key derivation function.
  • 🔔 Native notifications for individual accounts clicking on which focuses the app window and selects respective account in the accounts list.
  • 🔔 System tray icon with a total number of unread messages shown on top of it. Enabling local messages store improves this feature (how to enable), see respective issue.
  • ⚙️ Starting minimized to tray.
  • ⚙️ Closing to tray.
  • ⚙️ Switchable accounts handle buttons positioning (top , left, left-thin). See details in #36 and #175. Demo screenshots placed in the images folder (specifically this image).
  • 📦 Batch emails export to EML files. Feature released with v2.0.0-beta.4 version, requires local messages store feature to be enabled (how to enable).
  • 🔐 Built-in/prepackaged web clients. The built-in web clients are built from source code, see respective official Protonmail repository. See 79 and 80 issues for details.
  • ⚙️ Configuring proxy per account support. Enabled since v3.0.0 release. See 113 and 120 issues for details.
  • 📝 Spell Checking.

How to build your own installation package from source code

Building on Continuous Integration server

The reproducible builds idea is respected by the project. So the simplest way to prepare your own installation package from the source code is to clone the project and hook it up to the AppVeyor and Travis CI systems. The respective config files appveyor.yml and .travis.yml come with the project.

Building locally

  • Regardless of the platform you are working on, you will need to have Node.js v12 installed. v12 as it's recommended to go with the same Node.js version Electron comes with. If you already have Node.js installed, but not the v12, then you might want to use Node Version Manager to be able to switch between multiple Node.js versions:
    • Install NVM.
    • Run nvm install 12.
    • Run nvm use 12.
  • Some native modules require compiling process to be involved and for that Python and C++ compiler need to be installed on the system:
    • On Windows: the simplest to install all the needed stuff on Windows is to run npm install --global --production windows-build-tools CLI command.
    • On Linux: python v2.7, make and a C/C++ compiler toolchain, like GCC are most likely already installed. Besides keytar needs libsecret library to be installed.
    • On macOS: python v2.7 and Xcode need to be installed. You also need to install the Command Line Tools via Xcode, can be found under the Xcode -> Preferences -> Downloads menu.
  • ProtonMail's WebClient requires addition environment setup if you run Windows, see.
  • Clone this project to your local device. If you are going to contribute, consider cloning the forked into your own GitHub account project.
  • Install Yarn.
  • Install dependencies running yarn --pure-lockfile.
  • Build app running yarn run app:dist.
  • Build a package to install running yarn run electron-builder:dist command to build Windows/Mac OS X package and one of the following commands to build Linux package:
    • yarn run electron-builder:dist:linux:appimage
    • yarn run electron-builder:dist:linux:deb
    • yarn run electron-builder:dist:linux:freebsd
    • yarn run electron-builder:dist:linux:pacman
    • yarn run electron-builder:dist:linux:rpm
    • yarn run electron-builder:dist:linux:snap
  • If you don't need a package to install, but a folder to execute app from, simply run yarn run electron-builder:dir command.
  • Binary executable, whether it's a folder or package to install, comes into the ./dist folder.

To recap, considering that all the described build requirements are met, the short command to build let's say Arch Linux package will be yarn --pure-lockfile && yarn app:dist && yarn electron-builder:dist:linux:pacman.

Data/config files created and used by the app

If you want to backup the app data these are only files you need to take care of (files localed in the settings folder):

  • config.json file keeps config parameters. There is no sensitive data in this file, so unencrypted.
  • settings.bin file keeps added to the app accounts including credentials if a user decided to save them. The file is encrypted with 32 bytes length key derived from the master password.
  • database.bin file is a local database that keeps fetched emails/folders/contacts entities if the local store feature was enabled for at least one account. The file is encrypted with 32 bytes length key randomly generated and stored in settings.bin. The app by design flushes and loads to memory the database.bin file as a whole thing but not like encrypting only the specific columns of the database. It's of course not an optimal approach in terms of performance and resource consumption but it allows keeping the metadata hidden. You can see some details here.
  • database-session.bin file is being used in the same way and for the same purpose as database.bin but it holds the current session data only. The data from this file will be merged to the database.bin on the next app unlocking with the master password.
  • session.bin file holds the session data of the email accounts. The file is used if the Persistent Session feature is enabled for at least one account (the feature introduced since v4.2.0 version with experimental label, #227). The file is encrypted with 32 bytes length key randomly generated and stored in settings.bin.
  • log.log file keeps log lines. The log level by default is set to error (see config.json file).

Removing the app

It's recommended to perform the following actions before uninstalling the app:

  • If you had the Keep me signed in feature enabled (see screenshot), click Log-out action in the app menu (see screenshot). That will remove locally stored master password (done with node-keytar). You can also remove it having the app already uninstalled, but that would be a more complicated way as you will have to manually edit the system's keychain.
  • Remove settings folder manually. You can locate settings folder path clicking Open setting folder app/tray menu item (see screenshot) or reading app.getPath(name ="userData") related app.getPath(name) section here.

electronmail's People

Contributors

joshirio avatar vladimiry avatar

Stargazers

 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.