Files
speckle-server/packages/server/modules/emails/index.js
T
2022-03-31 14:18:44 +02:00

73 lines
1.8 KiB
JavaScript

/* istanbul ignore file */
'use strict'
const debug = require('debug')('speckle')
const nodemailer = require('nodemailer')
const modulesDebug = debug.extend('modules')
const errorDebug = debug.extend('errors')
let transporter
const createJsonEchoTransporter = () =>
nodemailer.createTransport({
jsonTransport: true
})
const initSmtpTransporter = async () => {
try {
const smtpTransporter = nodemailer.createTransport({
host: process.env.EMAIL_HOST,
port: process.env.EMAIL_PORT || 587,
secure: process.env.EMAIL_SECURE === 'true',
auth: {
user: process.env.EMAIL_USERNAME,
pass: process.env.EMAIL_PASSWORD
}
})
await smtpTransporter.verify()
return smtpTransporter
} catch {
errorDebug('📧 Email provider is misconfigured, check config variables.')
}
}
const initTransporter = async () => {
if (process.env.NODE_ENV === 'test') return createJsonEchoTransporter()
if (process.env.EMAIL === 'true') return await initSmtpTransporter()
modulesDebug(
'📧 Email provider is not configured. Server functionality will be limited.'
)
}
exports.init = async (app) => {
modulesDebug('📧 Init emails module')
transporter = await initTransporter()
require('./rest')(app)
}
exports.finalize = async () => {
// Nothing to do here.
}
exports.sendEmail = async ({ from, to, subject, text, html }) => {
// note, the transporter is only initialized with the app init step
if (!transporter) {
errorDebug('No email transport present. Cannot send emails.')
return false
}
try {
const emailFrom = process.env.EMAIL_FROM || 'no-reply@speckle.systems'
return await transporter.sendMail({
from: from || `"Speckle" <${emailFrom}>`,
to,
subject,
text,
html
})
} catch (error) {
errorDebug(error)
}
}