|
|
|
@ -1,10 +1,14 @@ |
|
|
|
const CouchDB = require("../../../db") |
|
|
|
const { StaticDatabases, determineScopedConfig } = require("@budibase/auth").db |
|
|
|
const { EmailTemplatePurpose, TemplateTypes, Configs } = require("../../../constants") |
|
|
|
const { |
|
|
|
EmailTemplatePurpose, |
|
|
|
TemplateTypes, |
|
|
|
Configs, |
|
|
|
} = require("../../../constants") |
|
|
|
const { getTemplateByPurpose } = require("../../../constants/templates") |
|
|
|
const { getSettingsTemplateContext } = require("../../../utilities/templates") |
|
|
|
const { processString } = require("@budibase/string-templates") |
|
|
|
const nodemailer = require("nodemailer") |
|
|
|
const { createSMTPTransport } = require("../../../utilities/email") |
|
|
|
|
|
|
|
const GLOBAL_DB = StaticDatabases.GLOBAL.name |
|
|
|
const TYPE = TemplateTypes.EMAIL |
|
|
|
@ -14,15 +18,7 @@ const FULL_EMAIL_PURPOSES = [ |
|
|
|
EmailTemplatePurpose.PASSWORD_RECOVERY, |
|
|
|
] |
|
|
|
|
|
|
|
function createSMTPTransport(config) { |
|
|
|
const transport = nodemailer.createTransport({ |
|
|
|
port: config.port, |
|
|
|
host: config.host, |
|
|
|
|
|
|
|
}) |
|
|
|
} |
|
|
|
|
|
|
|
exports.buildEmail = async (email, user, purpose) => { |
|
|
|
async function buildEmail(purpose, email, user) { |
|
|
|
// this isn't a full email
|
|
|
|
if (FULL_EMAIL_PURPOSES.indexOf(purpose) === -1) { |
|
|
|
throw `Unable to build an email of type ${purpose}` |
|
|
|
@ -37,7 +33,7 @@ exports.buildEmail = async (email, user, purpose) => { |
|
|
|
const context = { |
|
|
|
...(await getSettingsTemplateContext()), |
|
|
|
email, |
|
|
|
user, |
|
|
|
user: user || {}, |
|
|
|
} |
|
|
|
|
|
|
|
body = await processString(body, context) |
|
|
|
@ -51,14 +47,24 @@ exports.buildEmail = async (email, user, purpose) => { |
|
|
|
} |
|
|
|
|
|
|
|
exports.sendEmail = async ctx => { |
|
|
|
const { groupId, email, purpose } = ctx.request.body |
|
|
|
const { groupId, email, userId, purpose } = ctx.request.body |
|
|
|
const db = new CouchDB(GLOBAL_DB) |
|
|
|
const params = {} |
|
|
|
if (groupId) { |
|
|
|
params.group = groupId |
|
|
|
} |
|
|
|
params.type = Configs.SMTP |
|
|
|
let user = {} |
|
|
|
if (userId) { |
|
|
|
user = db.get(userId) |
|
|
|
} |
|
|
|
const config = await determineScopedConfig(db, params) |
|
|
|
const transport = createSMTPTransport(config) |
|
|
|
const message = { |
|
|
|
from: config.from, |
|
|
|
subject: config.subject, |
|
|
|
to: email, |
|
|
|
html: await buildEmail(purpose, email, user), |
|
|
|
} |
|
|
|
await transport.sendMail(message) |
|
|
|
} |
|
|
|
|
|
|
|
|