2022-02-19 21:56:23 +04:00
|
|
|
const nodemailer = require('nodemailer')
|
2022-09-05 21:33:18 +04:00
|
|
|
const {pick} = require('lodash')
|
2022-02-19 21:56:23 +04:00
|
|
|
|
|
|
|
|
function createTransport() {
|
|
|
|
|
if (!process.env.SMTP_HOST && process.env.NODE_ENV === 'production') {
|
|
|
|
|
throw new Error('SMTP_HOST must be provided in production mode')
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (process.env.SMTP_HOST) {
|
|
|
|
|
return nodemailer.createTransport({
|
|
|
|
|
host: process.env.SMTP_HOST,
|
|
|
|
|
port: process.env.SMTP_PORT || 587,
|
|
|
|
|
secure: process.env.SMTP_SECURE === 'YES',
|
|
|
|
|
auth: {
|
|
|
|
|
user: process.env.SMTP_USERNAME,
|
|
|
|
|
pass: process.env.SMTP_PASSWORD
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return nodemailer.createTransport({
|
|
|
|
|
streamTransport: true,
|
|
|
|
|
newline: 'unix',
|
|
|
|
|
buffer: true
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const transport = createTransport()
|
|
|
|
|
|
|
|
|
|
async function sendMail(email, recipients = []) {
|
|
|
|
|
if (recipients.length === 0) {
|
|
|
|
|
throw new Error('At least one recipient must be provided')
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const info = await transport.sendMail({
|
|
|
|
|
...pick(email, 'text', 'html', 'subject'),
|
|
|
|
|
from: process.env.SMTP_FROM,
|
|
|
|
|
to: recipients,
|
|
|
|
|
bcc: process.env.SMTP_BCC ? process.env.SMTP_BCC.split(',') : undefined
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
if (process.env.SHOW_EMAILS === 'YES' && transport.transporter.options.streamTransport) {
|
|
|
|
|
console.log('-----------------------')
|
|
|
|
|
console.log(info.message.toString())
|
|
|
|
|
console.log('-----------------------')
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return info
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
module.exports = {sendMail, createTransport, transport}
|