Code Monkey home page Code Monkey logo

nodemailer-resend-transport's Introduction

nodemailer-mailgun-transport

Known Vulnerabilities

What is this?

nodemailer is an amazing node module to send emails within any of your nodejs apps. This is the transport plugin that goes with nodemailer to send email using Mailgun's awesomeness! Pow Pow.

How does it work?

Based on this mailgun-js module and the nodemailer module, the Mailgun Transport was born. This is a transport layer, meaning it will allow you to send emails using nodemailer, using the Mailgun API instead of the SMTP protocol!

Nodemailer allows you to write code once and then swap out the transport so you can use different accounts on different providers. On top of that it's a super solid way of sending emails quickly on your node app(s).

The Mailgun transport for nodemailer is great to use when SMTP is blocked on your server or you just prefer the reliability of the web api!

Support the project

I know this is a tiny module but many people use it in production (high5 to all of us) - if you happen to use this module please click the star button - it means a lot to all the contributors

Quickstart - Example

Create a new file, install the dependencies [1] and look at the skeleton code below to get you started quickly!

const nodemailer = require('nodemailer');
const mg = require('nodemailer-mailgun-transport');

// This is your API key that you retrieve from www.mailgun.com/cp (free up to 10K monthly emails)
const auth = {
  auth: {
    api_key: 'key-1234123412341234',
    domain: 'one of your domain names listed at your https://app.mailgun.com/app/sending/domains'
  }
}

const nodemailerMailgun = nodemailer.createTransport(mg(auth));

nodemailerMailgun.sendMail({
  from: '[email protected]',
  to: '[email protected]', // An array if you have multiple recipients.
  cc:'[email protected]',
  bcc:'[email protected]',
  subject: 'Hey you, awesome!',
  'replyTo': '[email protected]',
  //You can use "html:" to send HTML email content. It's magic!
  html: '<b>Wow Big powerful letters</b>',
  //You can use "text:" to send plain-text content. It's oldschool!
  text: 'Mailgun rocks, pow pow!'
}, (err, info) => {
  if (err) {
    console.log(`Error: ${err}`);
  }
  else {
    console.log(`Response: ${info}`);
  }
});

Buffer support

Example:

const mailOptions = {
    ...
    attachments: [
        {
            filename: 'text2.txt',
            content: new Buffer('hello world!','utf-8')
        },

with encoded string as attachment content:

const mailOptions = {
    ...
    attachments: [
        {
            filename: 'text1.txt',
            content: 'aGVsbG8gd29ybGQh',
            encoding: 'base64'
        },

with encoded string as an inline attachment:

// Replace `filename` with `cid`
const mailOptions = {
    ...
    attachments: [
        {
            cid: 'logo.png',
            content: 'aGVsbG8gd29ybGQh',
            encoding: 'base64'
        },
<!-- Reference the `cid` in your email template file -->
<img src="cid:logo.png" alt="logo" />

Address objects

The "from", "to", "cc", and "bcc" fields support an address object or array of address objects. Each "name" and "address" are converted to "name <address>" format. "name" is optional, "address" is required. Missing or null address in object is skipped.

Examples:

 from: {name: 'Sales', address: '[email protected]'},
 to: [{name:'Mary', address:'[email protected]'}, {address:'[email protected]'}]

is converted to:

Now with Consolidate.js templates, and also compatible with mailgun's own templates

This package has two options for templating - one is to allow mailgun's templating engine to process the template, and the other is to use templates in your own codebase using any templating engine supported by consolidate.js.

To use mailgun's templating engine (and allow templates to iterate independent of your codebase), simply pass the template name to the template key, and the template variables as a stringified JSON to the h:X-Mailgun-Variables key. Here's an example: 

nodemailerMailgun.sendMail({
  from: '[email protected]',
  to: '[email protected]', // An array if you have multiple recipients.
  subject: 'Hey you, awesome!',
  template: 'boss_door',
  'h:X-Mailgun-Variables': JSON.stringify({key:'boss'})
}, (err, info) => {
  if (err) {
    console.log(`Error: ${err}`);
  }
  else {
    console.log(`Response: ${info}`);
  }
});

To use consolidate.js templates locally, give the template key an object instead that contains a name key, an engine key and, optionally, a context object. For example, you can use Handlebars templates to generate the HTML for your message like so:

const handlebars = require('handlebars');

const contextObject = {
  variable1: 'value1',
  variable2: 'value2'
};

nodemailerMailgun.sendMail({
  from: '[email protected]',
  to: '[email protected]', // An array if you have multiple recipients.
  subject: 'Hey you, awesome!',
  template: {
    name: 'email.hbs',
    engine: 'handlebars',
    context: contextObject
  }
}, (err, info) => {
  if (err) {
    console.log(`Error: ${err}`);
  }
  else {
    console.log(`Response: ${info}`);
  }
});

You can use any of the templating engines supported by Consolidate.js. Just require the engine module in your script, and pass a string of the engine name to the template object. Please see the Consolidate.js documentation for supported engines.

Mailgun Regions

You can use two different region environments for your mailgun domains. For USA region you should use api endpoint api.mailgun.net, but for EU region api.eu.mailgun.net

You can pass it as "host" to transport options object:

const nodemailer = require('nodemailer');
const mg = require('nodemailer-mailgun-transport');

const options = {
  auth: {
    api_key: 'key-1234123412341234',
    domain: 'one of your domain names listed at your https://mailgun.com/app/domains'
  },
  host: 'api.eu.mailgun.net' // e.g. for EU region
}

const nodemailerMailgun = nodemailer.createTransport(mg(auth));

[1] Quickly install dependencies

npm install nodemailer
npm install nodemailer-mailgun-transport

Legacy Node.js versions

Versions of Node.js before 7.6 are supported via nodemailer-mailgun-transport/es5.

const nodemailer = require('nodemailer');
const mg = require('nodemailer-mailgun-transport/es5');

nodemailer-resend-transport's People

Contributors

adrukh avatar adumaine avatar crossman avatar e110c0 avatar fossamagna avatar fry2k avatar giladbeeri avatar holm avatar iksoiks avatar ilshidur avatar j0ashm avatar jonnybgod avatar joshfriend avatar joshwillik avatar kentcdodds avatar maffoobristol avatar metamemoryt avatar mindmelting avatar mrbarbasa avatar orliesaurus avatar perzanko avatar richardlitt avatar rick4470 avatar sam-lord avatar stevepaulo avatar tol1 avatar trueter avatar viktorpeleshko avatar vinceprofeta avatar wmcmurray 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.