mandrill-nodemailer-transport
Version:
Mandrill API and Nodemailer v4+. The plugin is very small, optimized and written in TypeScript
90 lines (89 loc) • 2.84 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Mandrill = void 0;
const TRANSFORM_FIELDS = {
replyTo: 'Reply-To'
};
const TO_KEYS = ['to', 'cc', 'bcc'];
const HEADERS = ['replyTo'];
var Mandrill;
(function (Mandrill) {
const getFromName = (data) => {
if (data.from) {
return data.from.name || '';
}
return '';
};
const getFromAddress = (data) => {
if (data.from) {
return data.from.address || '';
}
return '';
};
const appendHeaders = (data) => {
return HEADERS.reduce((headers, key) => {
if (data[key]) {
headers[TRANSFORM_FIELDS[key] || key] = data[key];
}
return headers;
}, {});
};
const appendAddresses = (data) => {
return TO_KEYS.reduce((accumulator, target) => {
if (!data[target])
return accumulator;
data[target].forEach(to => {
accumulator.push({
email: to.address,
name: to.name,
type: target
});
});
return accumulator;
}, []);
};
const appendAttachments = (data) => {
if (!Array.isArray(data.attachments))
return [];
return data.attachments.reduce((accumulator, attachment) => {
if (!attachment.contentType.startsWith('image/')) {
accumulator.push({
name: attachment.filename || attachment.cid,
type: attachment.contentType,
content: attachment.content
});
}
return accumulator;
}, []);
};
const appendImages = (data) => {
if (!Array.isArray(data.attachments))
return [];
return data.attachments.reduce((accumulator, attachment) => {
if (attachment.contentType.startsWith('image/')) {
accumulator.push({
name: attachment.cid,
type: attachment.contentType,
content: attachment.content
});
}
return accumulator;
}, []);
};
Mandrill.buildData = (data, key) => {
return {
key,
message: {
html: data.html,
text: data.text,
subject: data.subject,
from_email: getFromAddress(data),
from_name: getFromName(data),
to: appendAddresses(data),
headers: appendHeaders(data),
attachments: appendAttachments(data),
images: appendImages(data)
}
};
};
})(Mandrill = exports.Mandrill || (exports.Mandrill = {}));