All Projects → femto-email → client

femto-email / client

Licence: MIT license
A simple, extendable mail client written in Node.JS

Programming Languages

CSS
56736 projects
javascript
184084 projects - #8 most used programming language
HTML
75241 projects

Projects that are alternatives of or similar to client

wp-smtp
Simple package for handling WordPress SMTP with .env when using the Roots stack.
Stars: ✭ 31 (+55%)
Mutual labels:  mail
iA-Writer-Templates
📎 Templates for iA Writer
Stars: ✭ 29 (+45%)
Mutual labels:  mail
inox
Email with notmuch rust
Stars: ✭ 22 (+10%)
Mutual labels:  mail
mailer
Generic mailer
Stars: ✭ 16 (-20%)
Mutual labels:  mail
laravel-mail-aliyun
📧 Aliyun DrirectMail Transport for Laravel Application.
Stars: ✭ 69 (+245%)
Mutual labels:  mail
COSCUP2013Secretary-Toolkit
✉️ COSCUP2013 行政組專用的小工具 AWS SES, SQS, SNS, twilio
Stars: ✭ 13 (-35%)
Mutual labels:  mail
KP.GmailClient
A Gmail client for C#
Stars: ✭ 17 (-15%)
Mutual labels:  mail
crowd-admin
crowd-admin是一个基于Spring,Shiro,Redis/ehcache,Mybatis的通用后台权限管理系统,这里推荐本人另一个基于sprinboot的单点登录系统
Stars: ✭ 51 (+155%)
Mutual labels:  mail
email-validator.dart
A simple Dart class for validating email addresses without using RegEx 📧
Stars: ✭ 156 (+680%)
Mutual labels:  mail
vertx-mail-client
No description or website provided.
Stars: ✭ 30 (+50%)
Mutual labels:  mail
mlmmjadmin
A simple RESTful API server used to manage mlmmj (http://mlmmj.org) mailing list manager.
Stars: ✭ 39 (+95%)
Mutual labels:  mail
go-imap-idle
IDLE extension for go-imap
Stars: ✭ 30 (+50%)
Mutual labels:  mail
mu4e-thread-folding
Functions for folding threads in mu4e headers view
Stars: ✭ 124 (+520%)
Mutual labels:  mail
javayh-platform
javayh-platform 使用Springboot2.2.6为开发脚手架,SpringCloud为云端服务框架,Nacos为注册中心、分布式配置管理中心,Oauth2协议实现统一授权,Mybatis作为持久层框架,提供了代码生成器,SQL防注入,SwaggerAPI文档,Redis 作为缓存服务等强大的功能
Stars: ✭ 32 (+60%)
Mutual labels:  mail
vue-mail-front
A front system base on vue.基于vue的邮件系统前端部分
Stars: ✭ 57 (+185%)
Mutual labels:  mail
aliyun-direct-mail
[DEPRECATED] 阿里云 DirectMail for Laravel.
Stars: ✭ 26 (+30%)
Mutual labels:  mail
skirnir
Skirnir Email Server
Stars: ✭ 31 (+55%)
Mutual labels:  mail
nettemp
Interface for controlling the temperature sensors DS18B20, supports; serial DS9097, usb DS9097U, usb DS2490, Raspberry Pi GPIO
Stars: ✭ 53 (+165%)
Mutual labels:  mail
james-jdkim
Mirror of Apache James jdkim
Stars: ✭ 19 (-5%)
Mutual labels:  mail
fs2-mail
asynchronous library for sending and receiving mail via fs2._
Stars: ✭ 39 (+95%)
Mutual labels:  mail

Build Status

logo

A cross-platform mail-client with the intent to be fast, reliable and easy to use.

screenshot

This is an attempt to see how simple a Node.JS app can be yet still have the full functionality a user can expect. It aims to be a good training project for people to start working on, even if they have very little knowledge on contributing to Node.JS projects, or open source projects in general.

At the moment of writing, we don't have any external build tools, gulpfile.js is simply included in case we wish to use any *.scss files. Setting up the development environment is a single command, as is starting the application.

Production

We're very sorry, at the moment no production builds are available! Please stand-by as we get our monkeys typing as fast as we can.

Dev

Looking to get started? We've kept things as simple as possible, right now there are only three commands required to setup this project. If you get any problems, feel free to contact me on Discord, we have a dedicated channel here or create an issue within Github.

Before getting started, please make sure you have the following installed:

  • Node V7+ (check with node -v, install from here)
  • NPM (check with npm -v, comes pre-installed with Node)
  • Git (check with git --version, install from here)
  • Electron (check with electron -v, install with npm i -g electron)
$ npm install

Run

$ npm start

This command runs the 'start' function defined within package.json. It is a universal way to run programs, and in this project is simply runs electron ..

Build

$ npm run dist

Layout

The top-level folder mainly contains information relating to the project, as well as how specific tools can run/build the project. Important files in here are:

  • index.js, which is the file run when one starts the application, it creates a new window and loads up our application.
  • package.json, contains information about this project such as licensing and author information. Also contains a list of all node modules required to run this project, which are installed when npm i is run.

The app folder contains the mail client, seperated into the HTML for layout, JavaScript modules for the logic and CSS for the styling.

  • main.html, a page which is always loaded, it forms the basis of each of our pages. Contains the script to load app.js and any styles we will need.
  • welcome.html, contains user onboarding information to get them setup with an account.
  • mail.html, contains the page design for the actual mail application.
  • app.js, the entry point for the JavaScript code.

There are also three folders, css contains all the styling for the project, as well as fonts. helpers contains a series of commands that aim to make the rest of the project easier to use (one hopes there are very few reasons to edit files in here), whilst modules implements a lot of the functionality you see. Within the modules folder, we have:

  • setup.js, when the project is first loaded this module is run to setup basic information required globally and deciding which state the user is currently in. Once it gains this information, it routes the user to the correct location.
  • welcome.js, handles all the logic for the user onboarding.
  • mail.js, handles all the logic for the mail application itself.
  • mailer.js, a module which attempts to abstract the IMAP plugin to our needs, handles the base authentication with the mail server as well as retrieving messages.

Electron is built for single page applications, thus we use our own router (navigo in app.js) and insert the HTML of each page ourselves. To attempt to seperate the CSS into logical files, we also enable/disable them on page change. Most of this has been completed before hand so we can normally ignore it. When creating a new page however, one should run the following command:

page(<pageName>, ['basic', <cssFiles...>])

It will handle switching the HTML, as well as enabling/disabling required CSS files. When this new page is loaded, for development purposes it is also useful to add in:

if (!testLoaded(<pageName>)) return

Which makes sure this page isn't being called from a reload operation, but instead is being routed from the router. If the page has not loaded, it is likely the setup function has not run yet and variables you may normally have access to are no longer defined.

Contributing

This is an OPEN open source project, which means that any individuals making significant and valuable contributions are given commit-access to the project to contribute as they see fit. This project is more like an open wiki than a standard guarded open source project. Noting this however, please do not change the git history, commit on-going work (which is unfinished) to the master branch or push major design changes without at least opening an issue for debate.

Coding Style Tests

We enforce several code standards in order to keep the codebase maintainable, the full list can be found here but the key points are:

  • We use two spaces for indentation.
  • Always handle errors.
  • Never have unused variables.
  • Don't define multiple variables in one statement
  • No semicolons at the end of lines

Roadmap

Functionality

  • Allow people to use the service online. (major parts: db, page changes)
  • List folders from an account.
  • List emails from an account.
  • Add an account/edit an account.
  • Send emails via SMTP.
  • Compile multiple emails into one thread.
  • Render HTML and plaintext.
  • Implement anti-spam.
  • Test an account with a specific email.
  • Persistant caches for emails and folders from a user.
  • Ability to snooze emails.
  • Delay email sending.
  • Contacts list.
  • Implement a method of searching.
  • Add a settings page for hotkeys & etc.
  • Allow people to create their own plugins.
  • Unified email account.
  • Add "topics" and "attributes" to emails that can be sorted from.
  • Template responses for many different things.
  • Placeholders in response templates ( like {{ source.to.firstName }} ).
  • Inbuilt PGP support.
  • Automatic folder rules & actions (perhaps based on Regex or something?)

Styling

  • Login page redesign (in progress).
  • Settings page.
  • Account testing page (in progress).
  • Email list.
  • Compose email page.
  • List of contacts page.
  • Customisable layouts.
  • Image effects in the email editor.

Various Useful Commands

// Reset Current Account
(async () => { let y = await mailStore[state.account.hash].removeAsync({}, { multi: true }); console.log(y); stateSet('state', 'new'); location.reload(); })()
// List All Emails on Current Account
(async () => { let y = await mailStore[state.account.hash].findAsync({}, {}); console.log(y); })()
// Change Current State (available: 'new', 'mail')
stateSet('state', 'new')
// See Loaded CSS Files
(() => { for (let i = 0; i < document.styleSheets.length; i++) { console.log(document.styleSheets[i].ownerNode.getAttribute('data-name') + ": " + (document.styleSheets[i].disabled ? 'disabled' : 'enabled')) }})()

License

MIT © Codefined & Miles Budden

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].