Sign Up for Free

RunKit +

Try any Node.js package right in your browser

This is a playground to test code. It runs a full Node.js environment and already has all of npm’s 400,000 packages pre-installed, including node-mailjet with all npm packages installed. Try it out:

var nodeMailjet = require("node-mailjet")

This service is provided by RunKit and is not affiliated with npm, Inc or the package authors.

node-mailjet v3.2.1

Mailjet NodeJS API client

alt text

Build Status Current Version

Mailjet NodeJs Wrapper

Please welcome the new Mailjet official NodeJS API wrapper!

Mailjet is an Email Service Provider (ESP). Visit the website and get comfortable!

Every code examples can be find on the Mailjet Documentation

(Please refer to the Mailjet Documentation Repository to contribute to the documentation examples)

Getting started

first, create a project folder

mkdir mailjet-project && cd $_


if you want to get a global installation, you can add -g

npm install node-mailjet

Show me the code

To authenticate, go get your API key, and API secret here, open your favorite text editor and import the mailjet module

var Mailjet = require('node-mailjet').connect('api key', 'api secret');

Additional connection options may be passed as the third argument. The supported values are:

  • proxyUrl: HTTP proxy URL to send the API requests through
  • timeout: API request timeout in milliseconds
  • url (default: Base Mailjet API URL
  • version (default: v3): API version to use in the URL
  • perform_api_call (default: true): controls if the must call must be performed to Mailjet API or not (dry run)

// The third argument (the object) is not mandatory. Each configuration key is also optional
const mailjet = require ('apiv3')
    .connect(process.env.MJ_APIKEY_PUBLIC, process.env.MJ_APIKEY_PRIVATE, {
        url: '', // default is the API url
        version: 'v3.1', // default is '/v3'
        perform_api_call: true // used for tests. default is true

On top of that, you can also pass those options locally to a request:

// the second argument (the object) is not mandatory. Each configuration key is also optional
const request = mailjet
    .post("send", {
      url: '', version: 'v3', perform_api_call: false
        FromEmail: '',
        FromName: 'Mailjet Pilot',
        Subject: 'Hello world Mailjet!',
        'Text-part': 'Hello World',
        Recipients: [{'Email': ''}]

The proxy URL is passed directly to superagent-proxy.

Get cosy with Mailjet

Save your API_KEY and API_SECRET:

echo 'export MJ_APIKEY_PUBLIC=MY_API_KEY' >> ~/.zshrc

echo 'export MJ_APIKEY_PRIVATE=MY_API_SECRET' >> ~/.zshrc

source ~/.zshrc

replace zshrc with bash_profile if you are simply using bash

And use it in your projects

var apiKey = process.env.MJ_APIKEY_PUBLIC,
  apiSecret = process.env.MJ_APIKEY_PRIVATE;

Store a Mailjet resource

// GET resource
var user = Mailjet.get('user');

// POST resource
var sender ='sender');

Request your resource with a callback function

user.request(function (error, response, body) {
  if (error)
    console.log ('Oops, something went wrong ' + response.statusCode);
    console.log (body);

Make the same request with a Promise

  .then(function (result) {
    // do something with the result
    // result structure is {response: {...}, body: {...}}
  .catch(function (reason) {
    // handle the rejection reason

Pass data to your requests

sender.request({ Email: '' })

Pass parameters as well as a callback

var getContacts = Mailjet.get('contact');

getContacts.request({Limit: 3}, handleContacts);

Request a resource with an ID

Request a ressource with an Action

var postContact ='contact');

  ContactLists: MyContactListsArray,
    Contacts: MyContactsArray,
}, handlePostResponse)

Send an Email

var sendEmail ='send');

var emailData = {
    'FromEmail': '',
    'FromName': 'My Name',
    'Subject': 'Test with the NodeJS Mailjet wrapper',
    'Text-part': 'Hello NodeJs !',
    'Recipients': [{'Email': ''}],
    'Attachments': [{
      "Content-Type": "text-plain",
      "Filename": "test.txt",
      "Content": "VGhpcyBpcyB5b3VyIGF0dGFjaGVkIGZpbGUhISEK", // Base64 for "This is your attached file!!!"


Send two Emails

var emailData = {
    'FromEmail': '',
    'FromName': 'Mailjet Pilot',
    'Subject': 'Hello world Mailjet!',
    'Text-part': 'Hello world!',
    'Recipients': [{'Email': ''}],

var emailData2 = {
    'FromEmail': '',
    'FromName': 'Mailjet Pilot',
    'Subject': 'Hello world Mailjet!',
    'Text-part': 'This is another Email',
    'Recipients': [{'Email': ''}],



Have Fun !

var mailjet = require ('./mailjet-client')
    .connect(process.env.MJ_APIKEY_PUBLIC, process.env.MJ_APIKEY_PRIVATE)

function handleError (err) {
  throw new Error(err.ErrorMessage);

function newContact (email) {'contact')
      .request({Email: email})

function testEmail (text) {
  email = {};
  email.FromName = 'Your Name';
  email.FromEmail = 'Your Sender Address';
  email.Subject = 'Test Email';
  email.Recipients = [{Email: 'Your email'}];
  email['Text-Part'] = text;'send')

testEmail('Hello World!');

Run Test

npm test

Node.js compatibility

Officially supported Node.js versions:

  • v0.12.0 (deprecated)
  • v4.1
  • v4.0
  • v5.0.0
  • v6.11.1


Mailjet loves developers. You can be part of this project!

This wrapper is a great introduction to the open source world, check out the code!

Feel free to ask anything, and contribute:

  • Fork the project.
  • Create a new branch.
  • Implement your feature or bug fix.
  • Add documentation to it.
  • Commit, push, open a pull request and voila.


  • Extend Error class to create Api errors
RunKit is a free, in-browser JavaScript dev environment for prototyping Node.js code, with every npm package installed. Sign up to share your code.
Sign Up for Free