'use strict'; const nodemailer = require("nodemailer"); const objectPick = require("object.pick"); function getNodemailerOptions(config) { if (config.nodemailer == null) { return {}; } else { return objectPick(config.nodemailer, [ "secure", "ignoreTLS", "requireTLS", "tls", "localAddress", "connectionTimeout", "greetingTimeout", "socketTimeout" ]); } } function getTransportOptions(config, nodemailerOptions) { if (config.smtp == null) { console.error("WARNING: Sending e-mails directly to the recipient's mailserver. If you are not explicitly whitelisting the source, your notifications will most likely end up in Spam. Add an SMTP relay to your configuration file to avoid this issue."); return Object.assign(nodemailerOptions, { direct: true }); } else { return Object.assign(nodemailerOptions, { host: config.smtp.hostname, port: config.smtp.port, auth: { user: config.smtp.username, pass: config.smtp.password } }); } } module.exports = function createEmailSender(config) { let nodemailerOptions = getNodemailerOptions(config); let transportOptions = getTransportOptions(config, nodemailerOptions); return nodemailer.createTransport(transportOptions, config.metadata); };