-
Notifications
You must be signed in to change notification settings - Fork 13
/
email-helpers.js
129 lines (119 loc) · 3.7 KB
/
email-helpers.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/
const nodemailer = require('nodemailer');
const hbs = require('nodemailer-express-handlebars');
const fs = require('fs');
const AWS = require('aws-sdk');
const path = require('path');
const { exit } = require('process');
const ora = require('ora');
const spinner = ora('');
let ses;
try {
process.env.AWS_SDK_LOAD_CONFIG = true;
ses = new AWS.SES();
} catch (err) {
// Do not set AWS_SDK_LOAD_CONFIG if aws config file is missing.
}
module.exports = async function sendEmail(filename, url, sender, recipient, transport, smtphost, smtpport, smtpsecure, smtpusername, smtppassword, subject, note, emailbody, selfsignedcerts) {
if (transport !== undefined && (transport === 'smtp' || ses !== undefined) && sender !== undefined && recipient !== undefined) {
spinner.start('Sending email...');
} else {
if (transport === undefined && sender === undefined && recipient === undefined) {
deleteTemporaryImage(emailbody);
return;
} else if (transport === undefined) {
spinner.warn('Transport value is missing');
} else if (transport === 'ses' && ses === undefined) {
spinner.warn('aws config not found');
} else if (sender === undefined || recipient === undefined) {
spinner.warn('Sender/Recipient value is missing');
}
spinner.fail('Skipped sending email');
deleteTemporaryImage(emailbody);
return;
}
let mailOptions = getmailOptions(url, sender, recipient, filename, subject, note, emailbody);
let transporter = getTransporter(transport, smtphost, smtpport, smtpsecure, smtpusername, smtppassword, selfsignedcerts);
transporter.use("compile", hbs({
viewEngine: {
partialsDir: path.join(__dirname, './views/'),
defaultLayout: ""
},
viewPath: path.join(__dirname, './views/'),
extName: ".hbs"
}));
// send email
return new Promise((success, fail) => {
transporter.sendMail(mailOptions, function (err, info) {
if (err) {
spinner.fail('Error sending email' + err);
fail(err);
exit(1);
} else {
spinner.succeed('Email sent successfully');
deleteTemporaryImage(emailbody);
success(info);
}
});
});
}
const getTransporter = (transport, smtphost, smtpport, smtpsecure, smtpusername, smtppassword, selfsignedcerts, transporter) => {
var rejectSelfSignedCerts = selfsignedcerts === 'true' ? false : true;
if (transport === 'ses') {
transporter = nodemailer.createTransport({
SES: ses
});
} else if (transport === 'smtp') {
transporter = nodemailer.createTransport({
host: smtphost,
port: smtpport,
secure: smtpsecure,
auth: {
user: smtpusername,
pass: smtppassword,
},
tls: {
rejectUnauthorized: rejectSelfSignedCerts,
},
});
}
return transporter;
}
const getmailOptions = (url, sender, recipient, file, emailSubject, note, emailbody, mailOptions = {}) => {
mailOptions = {
from: sender,
subject: emailSubject,
to: recipient,
attachments: [
{
filename: emailbody,
path: emailbody,
cid: 'email_body'
},
{
filename: 'opensearch_logo_darkmode.png',
path: path.join(__dirname, './views/opensearch_logo_darkmode.png'),
cid: 'opensearch_logo_darkmode'
},
{
filename: path.basename(file),
path: file
}],
template: 'index',
context: {
REPORT_TITLE: file,
DASHBOARD_URL: url,
NOTE: note
}
};
return mailOptions;
}
// Delete temporary image created for email body
function deleteTemporaryImage(emailbody) {
if (fs.existsSync(emailbody)) {
fs.unlinkSync(emailbody);
}
}