Skip to content

Instantly share code, notes, and snippets.

@kevyworks
Forked from icebob/LICENSE.md
Created October 10, 2018 07:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kevyworks/a9166398e5a6615df35a9172e6ea2508 to your computer and use it in GitHub Desktop.
Save kevyworks/a9166398e5a6615df35a9172e6ea2508 to your computer and use it in GitHub Desktop.
Mailtrap API helper for NodeJS
"use strict";
var MAILTRAP_API = "xxxxxxxxxxxxxxxxxxxxxxx";
var MAILTRAP_INBOX = 12345;
var _ = require("lodash");
var request = require('request');
var baseURL = "https://mailtrap.io/api/v1/";
var headers = {
"Content-Type": "application/json",
"Api-Token": MAILTRAP_API
};
function getMessages(inboxID, email, done) {
inboxID = inboxID || MAILTRAP_INBOX;
var options = {
method: "GET",
url: baseURL + "/inboxes/" + inboxID + "/messages",
headers: headers
};
request(options, function (error, response, body) {
if (error)
return done(error);
if (response.statusCode >= 400)
return done("Response error:" + response.statusCode + " " + response.statusMessage);
var messages = [];
var result = JSON.parse(body);
_.each(result, function(msg) {
if (email == null || msg.to_email == email)
messages.push(msg);
});
done(null, messages);
});
}
function getTokenFromMessage(email, re, done) {
getMessages(null, email, function(err, messages) {
if (err)
return done(err);
if (messages.length < 1)
return done("Passwordless email not received!");
let msg = messages[0];
// Get the last email body
let body = msg.html_body;
let match = re.exec(body);
if (match)
return done(null, match[1], msg);
return done("Token missing from email! " + body);
});
}
function cleanInbox(inboxID, done) {
inboxID = inboxID || MAILTRAP_INBOX;
if (!done)
done = function(err) {
if (err)
console.error(err);
};
var options = {
method: "PATCH",
url: baseURL + "/inboxes/" + inboxID + "/clean",
headers: headers
};
request(options, function (error, response, body) {
if (error)
return done(error);
if (response.statusCode >= 400)
return done("Response error:" + response.statusCode + " " + response.statusMessage);
done();
});
}
function deleteMessage(inboxID, messageID, done) {
inboxID = inboxID || MAILTRAP_INBOX;
if (!done)
done = function(err) {
if (err)
console.error(err);
};
var options = {
method: "DELETE",
url: baseURL + "/inboxes/" + inboxID + "/messages/" + messageID,
headers: headers
};
request(options, function (error, response, body) {
if (error)
return done(error);
if (response.statusCode >= 400)
return done("Response error:" + response.statusCode + " " + response.statusMessage);
done();
});
}
module.exports = {
getMessages,
getTokenFromMessage,
cleanInbox,
deleteMessage
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment