All Projects → veliovgroup → Meteor-Mailer

veliovgroup / Meteor-Mailer

Licence: BSD-3-Clause license
📮 Bulletproof email queue on top of NodeMailer with support of multiple clusters and servers setup

Projects that are alternatives of or similar to Meteor-Mailer

mailer
Generic mailer
Stars: ✭ 16 (-23.81%)
Mutual labels:  mail, mailer, email-sender
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 (+271.43%)
Mutual labels:  mail, email-sender, smtp
Mailer
A lightweight PHP SMTP mail sender
Stars: ✭ 53 (+152.38%)
Mutual labels:  mail, mailer, smtp
emailqueue
A fast, simple yet very efficient email queuing system for PHP/MySQL
Stars: ✭ 75 (+257.14%)
Mutual labels:  email-sender, smtp
django-yubin
Send e-mails asyncronously using cron
Stars: ✭ 44 (+109.52%)
Mutual labels:  mail, mailer
go-mail
📧 A cross platform mail driver for GoLang. Featuring Mailgun, Postal, Postmark, SendGrid, SparkPost & SMTP.
Stars: ✭ 169 (+704.76%)
Mutual labels:  mail, smtp
meteor-cluster
worker pool for meteor using node js native `cluster` module
Stars: ✭ 18 (-14.29%)
Mutual labels:  meteor, cluster
Log-mailer
Log mailer is a program I made to email log files.
Stars: ✭ 46 (+119.05%)
Mutual labels:  mailer, smtp
Meteor-Cookies
🍪 Isomorphic bulletproof cookie functions for client and server
Stars: ✭ 41 (+95.24%)
Mutual labels:  meteor, meteor-package
Client-Storage
🗄 Bulletproof persistent Client storage, works with disabled Cookies and/or localStorage
Stars: ✭ 15 (-28.57%)
Mutual labels:  meteor, meteor-package
meteor-two-factor
🔐 Two factor authentication package for accounts-password
Stars: ✭ 80 (+280.95%)
Mutual labels:  meteor, meteor-package
f3-mailer
Fat-Free Sugar Mailer Plugin
Stars: ✭ 18 (-14.29%)
Mutual labels:  mail, smtp
imail
small mail server
Stars: ✭ 88 (+319.05%)
Mutual labels:  mail, smtp
Smtp-cracker
[NEW] : Simple Mail Transfer Protocol (SMTP) CHECKER - CRACKER Tool V2
Stars: ✭ 67 (+219.05%)
Mutual labels:  mail, smtp
SimpleKotlinMail
A simple, coroutine based Kotlin Email API for both client- and server-side projects
Stars: ✭ 56 (+166.67%)
Mutual labels:  mail, smtp
meteor-subscription-scope
Scope queries on collections to subscriptions
Stars: ✭ 20 (-4.76%)
Mutual labels:  meteor, meteor-package
Meteor-logger-file
🔖 Meteor Logging: Store application log messages into file (FS)
Stars: ✭ 24 (+14.29%)
Mutual labels:  meteor, meteor-package
Android-Email-App-using-Javamail-Api
An Android App to send mail without gamil/email interaction!
Stars: ✭ 19 (-9.52%)
Mutual labels:  mail, email-sender
meteor-reactive-mongo
Reactive server-side MongoDB queries
Stars: ✭ 14 (-33.33%)
Mutual labels:  meteor, meteor-package
enough mail
IMAP, POP3 and SMTP clients for Dart developers. Contains both low level as well as a high level API.
Stars: ✭ 78 (+271.43%)
Mutual labels:  mail, smtp

Meteor Mailer (MailTime)

301: This package is moved to the main repository of NPM version, but still can be installed via Atmosphere as Meteor package!

Main features:

  • 📦 Two simple dependencies, written from scratch for top performance
  • 😎 Synchronize email queue across multiple servers
  • 💪 Bulletproof design, built-in retries

How does it work?:

Single point of failure

Issue - classic solution with single point of failure:

|----------------|         |------|         |------------------|
|  Other mailer  | ------> | SMTP | ------> |  ^_^ Happy user  |
|----------------|         |------|         |------------------|

The cheme above will work as long as SMTP service is available
or connection between your server and SMPT is up. Once network
failure occurs or SMTP service is down - users won't be happy

|----------------|  \ /    |------|         |------------------|
|  Other mailer  | --X---> | SMTP | ------> | 0_o Disappointed |
|----------------|  / \    |------|         |------------------|
                     ^- email lost in vain

Single SMTP solution may work in case of network or other failures
As long as MailTime has not received confirmation what email is sent
it will keep the letter in the queue and retry to send it again

|----------------|    /    |------|         |------------------|
|   Mail Time    | --X---> | SMTP | ------> |  ^_^ Happy user  |
|---^------------|  /      |------|         |------^-----------|
     \-------------/ ^- We will try later         /
      \- put it back into queue                  /
       \----------Once connection is back ------/

Multiple SMTP providers

Backup scheme with multiple SMTP providers

                           |--------|
                     /--X--| SMTP 1 |
                    /   ^  |--------|
                   /    \--- Retry with next provider
|----------------|/        |--------|         |------------------|
|   Mail Time    | ---X--> | SMTP 2 |      /->|  ^_^ Happy user  |
|----------------|\   ^    |--------|     /   |------------------|
                   \  \--- Retry         /
                    \      |--------|   /
                     \---->| SMTP 3 |--/
                           |--------|

Cluster issue

Let's say you have an app which is growing fast. At some point, you've decided to create a "Cluster" of servers to balance the load and add durability layer.

Also, your application has scheduled emails, for example, once a day with recent news. While you have had single server emails was sent by some daily interval. So, after you made a "Cluster" of servers - each server has its own timer and going to send a daily email to our user. In such case - users will receive 3 emails, sounds not okay.

Here is how we solve this issue:

|===================THE=CLUSTER===================| |=QUEUE=| |===Mail=Time===|
| |----------|     |----------|     |----------|  | |       | |=Micro-service=|   |--------|
| |   App    |     |   App    |     |   App    |  | |       | |               |-->| SMTP 1 |------\
| | Server 1 |     | Server 2 |     | Server 3 |  | |    <--------            |   |--------|       \
| |-----\----|     |----\-----|     |----\-----|  | |    -------->            |                |-------------|
|        \---------------\----------------\---------->      | |               |   |--------|   |     ^_^     |
| Each of the "App Server" or "Cluster Node"      | |       | |               |-->| SMTP 2 |-->| Happy users |
| runs Mail Time as a Client which only puts      | |       | |               |   |--------|   |-------------|
| emails into the queue. Aside to "App Servers"   | |       | |               |                    /
| We suggest running Mail Time as a Micro-service | |       | |               |   |--------|      /
| which will be responsible for making sure queue | |       | |               |-->| SMTP 3 |-----/
| has no duplicates and to actually send emails   | |       | |               |   |--------|
|=================================================| |=======| |===============|

Features

  • Queue - Managed via MongoDB, and will survive server reboots and failures
  • Support for multiple server setups - "Cluster", Phusion Passenger instances, Load Balanced solutions, etc.
  • Emails concatenation by addressee email - Reduce amount of sent email to single user with concatenation, and avoid mistakenly doubled emails
  • When concatenation is enabled - Same emails wouldn't be sent twice, if for any reason, due to bad logic or application failure emails is sent twice or more times - here is solution to solve this annoying behavior
  • Balancing for multiple nodemailer's transports, two modes - backup and balancing. Most useful feature - allows to reduce the cost of SMTP services and add durability. So, if any of used transports are failing to send an email it will switch to next one
  • Sending retries for network and other failures
  • Template support with Mustache-like placeholders

Prerequisites

If you're working on Server functionality - first you will need nodemailer, although this package is meant to be used with nodemailer, it's not added as the dependency, as it not needed by Client, and you're free to choose nodemailer's version to fit your needs:

meteor npm install --save nodemailer

Installation & Import (via Atmosphere):

Install MailTime package:

meteor add ostrio:mailer

ES6 Import:

import MailTime from 'meteor/ostrio:mailer';

Installation & Import (via NPM):

Install MailTime package:

meteor npm install --save mail-time

ES6 Import:

import MailTime from 'mail-time';

Please see full documentation at mail-time project page

Support this project:

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