rittenhop-dev/versions/5.94.2/node_modules/@tryghost/nodemailer/lib/nodemailer.js

98 lines
3.0 KiB
JavaScript
Raw Normal View History

2024-09-23 19:40:12 -04:00
/* eslint-disable no-case-declarations */
const errors = require('@tryghost/errors');
const nodemailer = require('nodemailer');
const tpl = require('@tryghost/tpl');
const messages = {
unknownTransport: `Unknown mail transport: {transport}`
};
/**
* @param {String} transport
* @param {Object} options
* @returns {import('nodemailer').Transporter} Nodemailer Transporter
*/
module.exports = function (transport, options = {}) {
let transportOptions;
transport = transport.toLowerCase();
switch (transport) {
case 'smtp':
transportOptions = options;
/**
* @deprecated `secureConnection` was removed in Nodemailer 1.0.2
* in favor of `secure` but Ghost has been recommending `secureConnection`
* and it's difficult to get everyone to switch at this point
*
* Therefore, we have to alias it here to keep things working
*/
if (Object.prototype.hasOwnProperty.call(options, 'secureConnection')) {
transportOptions.secure = options.secureConnection;
}
if (options.service && options.service.toLowerCase() === 'sendmail') {
transportOptions.sendmail = true;
}
break;
case 'mailgun':
const mailgunTransport = require('nodemailer-mailgun-transport');
// Default to 60s timeout if not set in `options`
if (!Object.prototype.hasOwnProperty.call(options, 'timeout')) {
options.timeout = 60000;
}
transportOptions = mailgunTransport(options);
break;
case 'sendmail':
transportOptions = options;
transportOptions.sendmail = true;
break;
case 'ses':
const aws = require('@aws-sdk/client-ses');
const pattern = /(.*)email(.*)\.(.*).amazonaws.com/i;
const result = pattern.exec(options.ServiceUrl);
const region = options.region || (result && result[3]) || 'us-east-1';
const accessKeyId = options.accessKeyId || options.AWSAccessKeyID;
const secretAccessKey = options.secretAccessKey || options.AWSSecretKey;
const credentials = (accessKeyId && secretAccessKey) ? {accessKeyId, secretAccessKey} : undefined;
const ses = new aws.SES({
apiVersion: '2010-12-01',
region,
credentials
});
transportOptions = {
SES: {ses, aws}
};
break;
case 'direct':
const directTransport = require('nodemailer-direct-transport');
transportOptions = directTransport(options);
break;
case 'stub':
const stubTransport = require('nodemailer-stub-transport');
transportOptions = stubTransport(options);
break;
default:
throw new errors.EmailError({
message: tpl(messages.unknownTransport, {transport})
});
}
const transporter = nodemailer.createTransport(transportOptions);
if (transport === 'smtp') {
Object.assign(transporter.transporter.options, options);
}
return transporter;
};