npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

adon-mailer

v1.0.17

Published

A simple transactionnal mailer for user signup and password reset with nodemailer and a custom pug template, promisified with bluebird

Downloads

17

Readme

AdOn Mailer

A simple transactional mailer for user signup, password reset and contact with nodemailer and custom pug templates, promisified with bluebird

Installing

Using npm :

npm install adon-mailer

Using yarn :

yarn add adon-mailer

Setup

Import ES6 module style :

import Mailer from 'adon-mailer'

Or CommonJS style :

const Mailer = require('adon-mailer')

Then provide a configuration object to the constructor :

const mailer = new Mailer({
  service: // Required Email service Optional. (ex: 'gmail')
  , host: // Server Hostname (if no service is provided)
  , port: // Server SSL SMTP port (if no service is provided)
  , user: // Required Email account
  , pass: // Required Service password
  , sender: // Default to user
  , protocol: // Default to 'http'
  , domain: // Default to 'localhost'
  , app: // Default to 'Application'
  , logo: // Default to null (ex: 'img/logo.png')
  , locales: // Default to '../src/locales.json' (ES6 import)
  , color: // Default to #00bcd4
  , templates: // Default to { user: '../src/user.pug', contact: '../src/contact.pug', team: '../src/team.pug' }
})
  • Have a look at adon-i18n for more info about the locales object.

Useage

Sign up & Password Reset

Assuming you got a user database running and some sort of API to handle email verification and password reset, the only instance function we need is userTransaction (in this example, we extracted lang from the user browser into the payload sent by the signup form to our route, hence the req.body.lang provided by a middleware parser).

exampleSignupOrResetRoute(req, res) {
  // Check if user already exist and lang is provided + generate token and/or create user
    .then(user => mailer.userTransaction({ user, lang: req.body.lang }))
    .then(() => // Send a HTTP response)
    .catch(err => // Treat errors)
}
  • Have a look at adon-encrypt for a simple way to generate token and HMAC user passwords.

A minimal user object must contain the following properties for the module to operate (the user.state property is used to trigger a verification email if 'pending' or a password reset one if 'verified').

const user = {
  token: // A secret string used to verify email and reset password
  , email: // User email
  , state: // 'pending' or 'verified', deny for 'banned'
}

Your application should also handle those GET routes and query parameters as it will be sent as links to your users :

/login?email=<user.email>&token=<user.token>
/reset?email=<user.email>&token=<user.token>

For example, you can trigger the user email verification if both queries parameters email and token are present, and serve directly your login form if not. You can do the opposite with the reset route (only serving the reset form if parameters are present and matches). Don't forget to regenerate the token after useage, make it strong and/or limit its lifespan.

Contact Email with Sender Notification

Send direct contact message with sender notification like this :

exampleContactRoute(req, res) {
  // Check if an email and a message is provided
    .then(user => mailer.contactEmail({ email: req.body.email, message: req.body.message, lang: req.body.lang })
    .then(() => // Send a HTTP response)
    .catch(err => // Treat errors)
}

This function also accept an optional to property to receive contact emails on a different email address

Team Invitation

You can also send invitation to team for new or existent user, adding invite property to the args object will trigger this behavior :

mailer.userTransaction({ 
  user: // User to invite
  , invite: // Name or email of the team owner
  , subscription: // Reference added to query for transaction
  , password: // For new user
  , lang: // Get language from client or force
})

If the user is newly created and its user.state is 'pending', the link will behave as a verification link, with the addition of the subscription in the query for your application to validate a team change if the user already existed and is 'verified'

Behaviors

You can provide your own Pug templates in the config object to the class constructor. The following properties will be passed and available in it (you can copy the default one in src/user.pug as starter) :

url // Protocol and domain
logo // Path from root
app // Application title
color // Application main color
header // Email header
title // Email title
text // Email content
redirect // Route from domain
query // Query parameters
callToAction // Call-to-action

You can also force the lang object property when calling userTransaction instance function to a litteral string (ex: 'fr'), or ommit it (it will then default to 'en'). The english and french locales are already built-in and will be available if you don't provide yours.

Dependencies

  • adon-i18n - A simple HMAC and authentication token generator class, promisified with bluebird
  • bluebird - A full featured promise library with unmatched performance
  • foundation-emails - Quickly create responsive HTML emails that work on any device and client
  • html-minifier - Javascript-based HTML compressor/minifier
  • juice - Juice inlines CSS stylesheets into your HTML source
  • nodemailer - Send e-mails with Node.JS
  • pug - Robust, elegant, feature rich template engine for Node.js

License

This project is licensed under the MIT License - see the LICENSE.md file for details