mailosaur
Version:
The Mailosaur Node library lets you integrate email and SMS testing into your continuous integration process.
74 lines (64 loc) • 2.26 kB
JavaScript
const nodemailer = require('nodemailer');
const fs = require('fs');
const path = require('path');
const verifiedDomain = process.env.MAILOSAUR_VERIFIED_DOMAIN || 'mailosaur.net';
const html = fs.readFileSync(path.join(__dirname, '/resources/testEmail.html'), 'utf-8');
const text = fs.readFileSync(path.join(__dirname, '/resources/testEmail.txt'), 'utf-8');
const smtpTransport = nodemailer.createTransport({
host: process.env.MAILOSAUR_SMTP_HOST || 'mailosaur.net',
port: process.env.MAILOSAUR_SMTP_PORT || '25',
secureConnection: false,
ignoreTLS: false,
tls: {
// Do not fail on certificate mismatch
rejectUnauthorized: false
}
});
const getRandomString = (length) => {
let result = '';
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
for (let i = 0; i < length; i += 1) {
result += characters.charAt(Math.floor(Math.random() *
characters.length));
}
return result;
};
module.exports = {
sendEmails: (mailer, client, server, quantity) => {
const promises = [];
return new Promise((resolve, reject) => {
let i = 0;
for (i = 0; i < quantity; i += 1) {
promises.push(mailer.sendEmail(client, server));
}
Promise.all(promises)
.then(resolve)
.catch(reject);
});
},
sendEmail: (client, server, sendToAddress) => {
const randomString = getRandomString(7);
const randomFromAddress = `${randomString}@${verifiedDomain}`;
const randomToAddress = sendToAddress || client.servers.generateEmailAddress(server);
return smtpTransport.sendMail({
subject: `${randomString} subject`,
from: `${randomString} ${randomString} <${randomFromAddress}>`,
to: `${randomString} ${randomString} <${randomToAddress}>`,
html: html.replace('REPLACED_DURING_TEST', randomString),
encoding: 'base64',
text: text.replace('REPLACED_DURING_TEST', randomString),
textEncoding: 'base64',
attachments: [
{
filename: 'cat.png',
path: path.join(__dirname, '/resources/cat.png'),
cid: 'ii_1435fadb31d523f6'
},
{
fileName: 'dog.png',
path: path.join(__dirname, '/resources/dog.png')
}
]
});
}
};