@stamhoofd/email 2.55.2 → 2.57.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/classes/Email.d.ts +3 -3
- package/dist/classes/Email.d.ts.map +1 -1
- package/dist/classes/Email.js +62 -63
- package/dist/classes/Email.js.map +1 -1
- package/package.json +2 -2
- package/src/classes/Email.ts +202 -192
package/dist/classes/Email.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Mail from 'nodemailer/lib/mailer';
|
|
2
|
-
import { I18n } from
|
|
2
|
+
import { I18n } from '@stamhoofd/backend-i18n';
|
|
3
3
|
export type EmailInterfaceRecipient = {
|
|
4
4
|
name?: string | null;
|
|
5
5
|
email: string;
|
|
@@ -19,7 +19,7 @@ export type EmailInterfaceBase = {
|
|
|
19
19
|
contentType?: string;
|
|
20
20
|
}[];
|
|
21
21
|
retryCount?: number;
|
|
22
|
-
type?:
|
|
22
|
+
type?: 'transactional' | 'broadcast';
|
|
23
23
|
headers?: Record<string, string> | null;
|
|
24
24
|
callback?: (error: Error | null) => void;
|
|
25
25
|
};
|
|
@@ -59,7 +59,7 @@ declare class EmailStatic {
|
|
|
59
59
|
/**
|
|
60
60
|
* Send an email to the webmaster
|
|
61
61
|
*/
|
|
62
|
-
sendWebmaster(data: Omit<EmailInterfaceBase,
|
|
62
|
+
sendWebmaster(data: Omit<EmailInterfaceBase, 'to'>): void;
|
|
63
63
|
send(data: EmailInterface): void;
|
|
64
64
|
schedule(builder: EmailBuilder): void;
|
|
65
65
|
scheduleAndWait(builder: EmailBuilder): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Email.d.ts","sourceRoot":"","sources":["../../src/classes/Email.ts"],"names":[],"mappings":"AAEA,OAAO,IAAI,MAAM,uBAAuB,CAAC;AAIzC,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,
|
|
1
|
+
{"version":3,"file":"Email.d.ts","sourceRoot":"","sources":["../../src/classes/Email.ts"],"names":[],"mappings":"AAEA,OAAO,IAAI,MAAM,uBAAuB,CAAC;AAIzC,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAQ/C,MAAM,MAAM,uBAAuB,GAAG;IAClC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC7B,EAAE,EAAE,MAAM,GAAG,uBAAuB,EAAE,CAAC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACpH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,eAAe,GAAG,WAAW,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,kBAAkB,GAAG;IAC9C,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAGF,MAAM,MAAM,YAAY,GAAG,MAAM,cAAc,GAAG,SAAS,CAAC;AAc5D,cAAM,WAAW;IACb,WAAW,EAAE,IAAI,CAAC;IAClB,wBAAwB,EAAE,IAAI,CAAC;IAC/B,GAAG,SAAM;IAET,YAAY,EAAE,YAAY,EAAE,CAAM;IAClC,OAAO,UAAS;IAEhB,aAAa;IAoDb,OAAO,CAAC,gBAAgB;IA2BxB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,uBAAuB,EAAE,GAAG,uBAAuB,EAAE;IAS1E;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAmFzC,OAAO,CAAC,cAAc;IAqBtB,OAAO,CAAC,eAAe;YAUT,MAAM;YA2LN,OAAO;IAkCrB;;;OAGG;IACH,mBAAmB,CAAC,IAAI,EAAE,IAAI;IAK9B,qBAAqB;IAIrB,mBAAmB;IAInB;;;OAGG;IACH,mBAAmB,CAAC,IAAI,EAAE,IAAI;IAI9B;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC;IAQlD,IAAI,CAAC,IAAI,EAAE,cAAc;IAgBzB,QAAQ,CAAC,OAAO,EAAE,YAAY;IAK9B,eAAe,CAAC,OAAO,EAAE,YAAY;CAIxC;AAED,eAAO,MAAM,KAAK,aAAoB,CAAC"}
|
package/dist/classes/Email.js
CHANGED
|
@@ -10,8 +10,7 @@ const utility_2 = require("@stamhoofd/utility");
|
|
|
10
10
|
const backend_i18n_1 = require("@stamhoofd/backend-i18n");
|
|
11
11
|
const simple_errors_1 = require("@simonbackx/simple-errors");
|
|
12
12
|
// Importing postmark returns undefined (this is a bug, so we need to use require)
|
|
13
|
-
|
|
14
|
-
const postmark = require("postmark");
|
|
13
|
+
const postmark = require('postmark');
|
|
15
14
|
class EmailStatic {
|
|
16
15
|
transporter;
|
|
17
16
|
transactionalTransporter;
|
|
@@ -23,7 +22,7 @@ class EmailStatic {
|
|
|
23
22
|
return;
|
|
24
23
|
}
|
|
25
24
|
if (!STAMHOOFD.SMTP_HOST || !STAMHOOFD.SMTP_PORT) {
|
|
26
|
-
throw new Error(
|
|
25
|
+
throw new Error('Missing environment variables to send emails');
|
|
27
26
|
return;
|
|
28
27
|
}
|
|
29
28
|
// create reusable transporter object using the default SMTP transport
|
|
@@ -33,8 +32,8 @@ class EmailStatic {
|
|
|
33
32
|
port: STAMHOOFD.SMTP_PORT,
|
|
34
33
|
auth: {
|
|
35
34
|
user: STAMHOOFD.SMTP_USERNAME, // generated ethereal user
|
|
36
|
-
pass: STAMHOOFD.SMTP_PASSWORD // generated ethereal password
|
|
37
|
-
}
|
|
35
|
+
pass: STAMHOOFD.SMTP_PASSWORD, // generated ethereal password
|
|
36
|
+
},
|
|
38
37
|
});
|
|
39
38
|
// create reusable transporter object using the default SMTP transport
|
|
40
39
|
this.transactionalTransporter = nodemailer_1.default.createTransport({
|
|
@@ -43,45 +42,45 @@ class EmailStatic {
|
|
|
43
42
|
port: STAMHOOFD.TRANSACTIONAL_SMTP_PORT,
|
|
44
43
|
auth: {
|
|
45
44
|
user: STAMHOOFD.TRANSACTIONAL_SMTP_USERNAME, // generated ethereal user
|
|
46
|
-
pass: STAMHOOFD.TRANSACTIONAL_SMTP_PASSWORD // generated ethereal password
|
|
47
|
-
}
|
|
45
|
+
pass: STAMHOOFD.TRANSACTIONAL_SMTP_PASSWORD, // generated ethereal password
|
|
46
|
+
},
|
|
48
47
|
});
|
|
49
48
|
// verify connection configuration
|
|
50
49
|
this.transporter.verify((error) => {
|
|
51
50
|
if (error) {
|
|
52
|
-
console.error(
|
|
51
|
+
console.error('SMTP server not working', error);
|
|
53
52
|
}
|
|
54
53
|
else {
|
|
55
|
-
console.log(
|
|
54
|
+
console.log('SMTP server is ready to take our messages');
|
|
56
55
|
}
|
|
57
56
|
});
|
|
58
57
|
// verify connection configuration
|
|
59
58
|
this.transactionalTransporter.verify((error) => {
|
|
60
59
|
if (error) {
|
|
61
|
-
console.error(
|
|
60
|
+
console.error('Transactinoal SMTP server not working', error);
|
|
62
61
|
}
|
|
63
62
|
else {
|
|
64
|
-
console.log(
|
|
63
|
+
console.log('Transactinoal SMTP server is ready to take our messages');
|
|
65
64
|
}
|
|
66
65
|
});
|
|
67
66
|
}
|
|
68
67
|
sendNextIfNeeded() {
|
|
69
68
|
if (!this.sending) {
|
|
70
69
|
if (this.currentQueue.length == 0) {
|
|
71
|
-
console.log(
|
|
70
|
+
console.log('mail queue is empty');
|
|
72
71
|
return;
|
|
73
72
|
}
|
|
74
73
|
let next = this.currentQueue[0]();
|
|
75
74
|
while (next === undefined) {
|
|
76
75
|
this.currentQueue.shift();
|
|
77
76
|
if (this.currentQueue.length == 0) {
|
|
78
|
-
console.log(
|
|
77
|
+
console.log('mail queue is empty');
|
|
79
78
|
return;
|
|
80
79
|
}
|
|
81
80
|
next = this.currentQueue[0]();
|
|
82
81
|
}
|
|
83
82
|
this.sending = true;
|
|
84
|
-
this.doSend(next).catch(e => {
|
|
83
|
+
this.doSend(next).catch((e) => {
|
|
85
84
|
console.error(e);
|
|
86
85
|
}).finally(() => {
|
|
87
86
|
this.sending = false;
|
|
@@ -90,7 +89,7 @@ class EmailStatic {
|
|
|
90
89
|
}
|
|
91
90
|
}
|
|
92
91
|
parseTo(to) {
|
|
93
|
-
if (typeof to ===
|
|
92
|
+
if (typeof to === 'string') {
|
|
94
93
|
return this.parseEmailStr(to).map(email => ({ email }));
|
|
95
94
|
}
|
|
96
95
|
// Filter invalid email addresses
|
|
@@ -103,9 +102,9 @@ class EmailStatic {
|
|
|
103
102
|
let insideQuote = false;
|
|
104
103
|
let escaped = false;
|
|
105
104
|
let inAddr = false;
|
|
106
|
-
let email =
|
|
105
|
+
let email = '';
|
|
107
106
|
let didFindAddr = false;
|
|
108
|
-
let cleanedStr =
|
|
107
|
+
let cleanedStr = '';
|
|
109
108
|
const addresses = [];
|
|
110
109
|
function endAddress() {
|
|
111
110
|
let m;
|
|
@@ -119,11 +118,11 @@ class EmailStatic {
|
|
|
119
118
|
addresses.push(m);
|
|
120
119
|
}
|
|
121
120
|
didFindAddr = false;
|
|
122
|
-
email =
|
|
121
|
+
email = '';
|
|
123
122
|
inAddr = false;
|
|
124
123
|
insideQuote = false;
|
|
125
124
|
escaped = false;
|
|
126
|
-
cleanedStr =
|
|
125
|
+
cleanedStr = '';
|
|
127
126
|
}
|
|
128
127
|
// eslint-disable-next-line @typescript-eslint/prefer-for-of
|
|
129
128
|
for (let index = 0; index < emailStr.length; index++) {
|
|
@@ -133,13 +132,13 @@ class EmailStatic {
|
|
|
133
132
|
}
|
|
134
133
|
const character = emailStr[index];
|
|
135
134
|
if (insideQuote) {
|
|
136
|
-
if (character ===
|
|
135
|
+
if (character === '\\') {
|
|
137
136
|
escaped = true;
|
|
138
137
|
continue;
|
|
139
138
|
}
|
|
140
139
|
}
|
|
141
140
|
if (!shouldEscape) {
|
|
142
|
-
if (character === "
|
|
141
|
+
if (character === '"') {
|
|
143
142
|
if (insideQuote) {
|
|
144
143
|
insideQuote = false;
|
|
145
144
|
continue;
|
|
@@ -148,16 +147,16 @@ class EmailStatic {
|
|
|
148
147
|
continue;
|
|
149
148
|
}
|
|
150
149
|
if (!insideQuote) {
|
|
151
|
-
if (character ===
|
|
150
|
+
if (character === '<') {
|
|
152
151
|
inAddr = true;
|
|
153
152
|
continue;
|
|
154
153
|
}
|
|
155
|
-
if (character ===
|
|
154
|
+
if (character === '>') {
|
|
156
155
|
inAddr = false;
|
|
157
156
|
didFindAddr = true;
|
|
158
157
|
continue;
|
|
159
158
|
}
|
|
160
|
-
if (character ===
|
|
159
|
+
if (character === ',') {
|
|
161
160
|
// End previous address
|
|
162
161
|
endAddress();
|
|
163
162
|
continue;
|
|
@@ -183,14 +182,14 @@ class EmailStatic {
|
|
|
183
182
|
if (whitelist.includes('*' + domain)) {
|
|
184
183
|
return true;
|
|
185
184
|
}
|
|
186
|
-
console.warn(
|
|
185
|
+
console.warn('Filtered email to ' + l + ': not whitelisted');
|
|
187
186
|
return false;
|
|
188
187
|
}
|
|
189
188
|
return true;
|
|
190
189
|
}
|
|
191
190
|
filterWhitelist(recipients, whitelist) {
|
|
192
191
|
if (!whitelist.includes('*') && !whitelist.includes('*@*')) {
|
|
193
|
-
return recipients.filter(mail => {
|
|
192
|
+
return recipients.filter((mail) => {
|
|
194
193
|
return this.matchWhitelist(mail.email, whitelist);
|
|
195
194
|
});
|
|
196
195
|
}
|
|
@@ -217,12 +216,12 @@ class EmailStatic {
|
|
|
217
216
|
try {
|
|
218
217
|
data.callback?.(new simple_errors_1.SimpleError({
|
|
219
218
|
code: 'all_filtered',
|
|
220
|
-
message:
|
|
221
|
-
human: 'Alle ontvangers zijn gefilterd wegens een hard bounce of spam'
|
|
219
|
+
message: 'All recipients are filtered due to hard bounce or spam',
|
|
220
|
+
human: 'Alle ontvangers zijn gefilterd wegens een hard bounce of spam',
|
|
222
221
|
}));
|
|
223
222
|
}
|
|
224
223
|
catch (e) {
|
|
225
|
-
console.error(
|
|
224
|
+
console.error('Error in email callback', e);
|
|
226
225
|
}
|
|
227
226
|
return;
|
|
228
227
|
}
|
|
@@ -236,12 +235,12 @@ class EmailStatic {
|
|
|
236
235
|
try {
|
|
237
236
|
data.callback?.(new simple_errors_1.SimpleError({
|
|
238
237
|
code: 'all_filtered',
|
|
239
|
-
message:
|
|
240
|
-
human: 'Alle ontvangers zijn gefilterd omwille van de demo-omgeving die het versturen van bepaalde e-mails limiteert'
|
|
238
|
+
message: 'All recipients are filtered due to environment',
|
|
239
|
+
human: 'Alle ontvangers zijn gefilterd omwille van de demo-omgeving die het versturen van bepaalde e-mails limiteert',
|
|
241
240
|
}));
|
|
242
241
|
}
|
|
243
242
|
catch (e) {
|
|
244
|
-
console.error(
|
|
243
|
+
console.error('Error in email callback', e);
|
|
245
244
|
}
|
|
246
245
|
return;
|
|
247
246
|
}
|
|
@@ -255,15 +254,15 @@ class EmailStatic {
|
|
|
255
254
|
return recipient.email;
|
|
256
255
|
}
|
|
257
256
|
return '"' + cleanedName + '" <' + recipient.email + '>';
|
|
258
|
-
}).join(
|
|
257
|
+
}).join(', ');
|
|
259
258
|
this.setupIfNeeded();
|
|
260
259
|
// send mail with defined transport object
|
|
261
260
|
const mail = {
|
|
262
261
|
from: data.from, // sender address
|
|
263
|
-
bcc: (STAMHOOFD.environment ===
|
|
262
|
+
bcc: (STAMHOOFD.environment === 'production' || !data.bcc) ? data.bcc : 'simon@stamhoofd.be',
|
|
264
263
|
replyTo: data.replyTo,
|
|
265
264
|
to,
|
|
266
|
-
subject: data.subject, // Subject line
|
|
265
|
+
subject: data.subject.substring(0, 1000), // Subject line
|
|
267
266
|
text: data.text, // plain text body
|
|
268
267
|
};
|
|
269
268
|
if (data.attachments) {
|
|
@@ -277,13 +276,13 @@ class EmailStatic {
|
|
|
277
276
|
if (!data.text) {
|
|
278
277
|
mail.text = html_to_text_1.default.fromString(data.html, {
|
|
279
278
|
wordwrap: null,
|
|
280
|
-
unorderedListItemPrefix:
|
|
279
|
+
unorderedListItemPrefix: ' - ',
|
|
281
280
|
});
|
|
282
281
|
}
|
|
283
282
|
}
|
|
284
283
|
const parsedFrom = this.parseEmailStr(data.from);
|
|
285
284
|
if (parsedFrom.length !== 1) {
|
|
286
|
-
throw new Error(
|
|
285
|
+
throw new Error('Invalid from email ' + data.from);
|
|
287
286
|
}
|
|
288
287
|
try {
|
|
289
288
|
// Can we send from the transactional email server?
|
|
@@ -293,36 +292,36 @@ class EmailStatic {
|
|
|
293
292
|
data.type = 'broadcast';
|
|
294
293
|
}
|
|
295
294
|
}
|
|
296
|
-
const transporter = (data.type ===
|
|
297
|
-
if (data.type ===
|
|
295
|
+
const transporter = (data.type === 'transactional') ? this.transactionalTransporter : this.transporter;
|
|
296
|
+
if (data.type === 'transactional') {
|
|
298
297
|
mail.headers = {
|
|
299
298
|
...data.headers,
|
|
300
|
-
...STAMHOOFD.TRANSACTIONAL_SMTP_HEADERS
|
|
299
|
+
...STAMHOOFD.TRANSACTIONAL_SMTP_HEADERS,
|
|
301
300
|
};
|
|
302
301
|
}
|
|
303
302
|
else {
|
|
304
303
|
mail.headers = {
|
|
305
304
|
...data.headers,
|
|
306
|
-
...STAMHOOFD.SMTP_HEADERS
|
|
305
|
+
...STAMHOOFD.SMTP_HEADERS,
|
|
307
306
|
};
|
|
308
307
|
}
|
|
309
308
|
if (STAMHOOFD.POSTMARK_SERVER_TOKEN && (data.retryCount === 1)) {
|
|
310
309
|
await this.sendApi(mail);
|
|
311
|
-
console.log(
|
|
310
|
+
console.log('Message sent via api:', to, data.subject, data.type);
|
|
312
311
|
}
|
|
313
312
|
else {
|
|
314
313
|
const info = await transporter.sendMail(mail);
|
|
315
|
-
console.log(
|
|
314
|
+
console.log('Message sent:', to, data.subject, info.messageId, data.type);
|
|
316
315
|
}
|
|
317
316
|
try {
|
|
318
317
|
data.callback?.(null);
|
|
319
318
|
}
|
|
320
319
|
catch (e) {
|
|
321
|
-
console.error(
|
|
320
|
+
console.error('Error in email callback', e);
|
|
322
321
|
}
|
|
323
322
|
}
|
|
324
323
|
catch (e) {
|
|
325
|
-
console.error(
|
|
324
|
+
console.error('Failed to send e-mail:');
|
|
326
325
|
console.error(e);
|
|
327
326
|
console.error(mail);
|
|
328
327
|
// Sleep 1 second to give servers some time to fix possible rate limits
|
|
@@ -340,15 +339,15 @@ class EmailStatic {
|
|
|
340
339
|
data.callback?.(e);
|
|
341
340
|
}
|
|
342
341
|
catch (e2) {
|
|
343
|
-
console.error(
|
|
342
|
+
console.error('Error in email failure callback', e2, 'for original error', e);
|
|
344
343
|
}
|
|
345
344
|
// Email address is not verified.
|
|
346
345
|
if (STAMHOOFD.environment !== 'development') {
|
|
347
346
|
if (data.from !== this.getWebmasterFromEmail()) {
|
|
348
347
|
this.sendWebmaster({
|
|
349
|
-
subject:
|
|
350
|
-
text:
|
|
351
|
-
type: (data.type ===
|
|
348
|
+
subject: 'E-mail kon niet worden verzonden',
|
|
349
|
+
text: 'Een e-mail vanaf ' + data.from + ' kon niet worden verstuurd aan ' + mail.to + ': \n\n' + e + '\n\n' + (mail.text ?? ''),
|
|
350
|
+
type: (data.type === 'transactional') ? 'broadcast' : 'transactional',
|
|
352
351
|
});
|
|
353
352
|
}
|
|
354
353
|
}
|
|
@@ -357,7 +356,7 @@ class EmailStatic {
|
|
|
357
356
|
}
|
|
358
357
|
async sendApi(data) {
|
|
359
358
|
if (!STAMHOOFD.POSTMARK_SERVER_TOKEN) {
|
|
360
|
-
throw new Error(
|
|
359
|
+
throw new Error('Missing POSTMARK_SERVER_TOKEN');
|
|
361
360
|
}
|
|
362
361
|
const client = new postmark.ServerClient(STAMHOOFD.POSTMARK_SERVER_TOKEN);
|
|
363
362
|
const headers = [];
|
|
@@ -365,16 +364,16 @@ class EmailStatic {
|
|
|
365
364
|
headers.push({ Name: key, Value: data.headers[key] });
|
|
366
365
|
}
|
|
367
366
|
const message = {
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
367
|
+
From: data.from,
|
|
368
|
+
To: data.to,
|
|
369
|
+
Bcc: data.bcc,
|
|
370
|
+
Subject: data.subject,
|
|
371
|
+
TextBody: data.text,
|
|
372
|
+
HtmlBody: data.html,
|
|
373
|
+
Headers: headers,
|
|
374
|
+
ReplyTo: data.replyTo,
|
|
375
|
+
Tag: 'api',
|
|
376
|
+
MessageStream: (data.headers?.['X-PM-Message-Stream'] ?? 'outbound'),
|
|
378
377
|
};
|
|
379
378
|
console.log('Falling back to Postmark API', message);
|
|
380
379
|
try {
|
|
@@ -394,7 +393,7 @@ class EmailStatic {
|
|
|
394
393
|
return '"' + (STAMHOOFD.platformName ?? 'Stamhoofd') + ' " <hallo@' + (i18n.localizedDomains.defaultTransactionalEmail()) + '>';
|
|
395
394
|
}
|
|
396
395
|
getWebmasterFromEmail() {
|
|
397
|
-
return '"' + (STAMHOOFD.platformName ?? 'Stamhoofd') + ' " <webmaster@' + (new backend_i18n_1.I18n(
|
|
396
|
+
return '"' + (STAMHOOFD.platformName ?? 'Stamhoofd') + ' " <webmaster@' + (new backend_i18n_1.I18n('nl', 'BE').localizedDomains.defaultTransactionalEmail()) + '>';
|
|
398
397
|
}
|
|
399
398
|
getWebmasterToEmail() {
|
|
400
399
|
return 'hallo@stamhoofd.be';
|
|
@@ -404,7 +403,7 @@ class EmailStatic {
|
|
|
404
403
|
* Please use EmailBuilder.sendEmailTemplate
|
|
405
404
|
*/
|
|
406
405
|
getPersonalEmailFor(i18n) {
|
|
407
|
-
return '"Simon Backx" <' + (i18n.$t(
|
|
406
|
+
return '"Simon Backx" <' + (i18n.$t('5670bc42-cf94-46b6-9ce0-7cdc4ffbb4d9')) + '>';
|
|
408
407
|
}
|
|
409
408
|
/**
|
|
410
409
|
* Send an email to the webmaster
|
|
@@ -412,7 +411,7 @@ class EmailStatic {
|
|
|
412
411
|
sendWebmaster(data) {
|
|
413
412
|
const mail = Object.assign(data, {
|
|
414
413
|
from: this.getWebmasterFromEmail(),
|
|
415
|
-
to: this.getWebmasterToEmail()
|
|
414
|
+
to: this.getWebmasterToEmail(),
|
|
416
415
|
});
|
|
417
416
|
this.send(mail);
|
|
418
417
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Email.js","sourceRoot":"","sources":["../../src/classes/Email.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Email.js","sourceRoot":"","sources":["../../src/classes/Email.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stamhoofd/email",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.57.0",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"types": "./dist/index.d.ts",
|
|
6
6
|
"license": "UNLICENCED",
|
|
@@ -25,5 +25,5 @@
|
|
|
25
25
|
"publishConfig": {
|
|
26
26
|
"access": "public"
|
|
27
27
|
},
|
|
28
|
-
"gitHead": "
|
|
28
|
+
"gitHead": "9e6e3c22154937a4977cc0d1b669d9577067b832"
|
|
29
29
|
}
|
package/src/classes/Email.ts
CHANGED
|
@@ -1,69 +1,69 @@
|
|
|
1
1
|
import { DataValidator, Formatter } from '@stamhoofd/utility';
|
|
2
|
-
import nodemailer from
|
|
2
|
+
import nodemailer from 'nodemailer';
|
|
3
3
|
import Mail from 'nodemailer/lib/mailer';
|
|
4
4
|
import { EmailAddress } from '../models/EmailAddress';
|
|
5
5
|
import htmlToText from 'html-to-text';
|
|
6
6
|
import { sleep } from '@stamhoofd/utility';
|
|
7
|
-
import { I18n } from
|
|
7
|
+
import { I18n } from '@stamhoofd/backend-i18n';
|
|
8
8
|
import { SimpleError } from '@simonbackx/simple-errors';
|
|
9
|
-
import {type default as Postmark} from
|
|
9
|
+
import { type default as Postmark } from 'postmark';
|
|
10
10
|
|
|
11
11
|
// Importing postmark returns undefined (this is a bug, so we need to use require)
|
|
12
|
-
|
|
13
|
-
const postmark = require(
|
|
12
|
+
|
|
13
|
+
const postmark = require('postmark');
|
|
14
14
|
|
|
15
15
|
export type EmailInterfaceRecipient = {
|
|
16
|
-
name?: string|null;
|
|
16
|
+
name?: string | null;
|
|
17
17
|
email: string;
|
|
18
|
-
}
|
|
18
|
+
};
|
|
19
19
|
|
|
20
20
|
export type EmailInterfaceBase = {
|
|
21
|
-
to: string|EmailInterfaceRecipient[];
|
|
21
|
+
to: string | EmailInterfaceRecipient[];
|
|
22
22
|
bcc?: string;
|
|
23
23
|
replyTo?: string;
|
|
24
24
|
subject: string;
|
|
25
25
|
text?: string;
|
|
26
26
|
html?: string;
|
|
27
|
-
attachments?: { filename: string; path?: string; href?: string; content?: string|Buffer; contentType?: string }[];
|
|
27
|
+
attachments?: { filename: string; path?: string; href?: string; content?: string | Buffer; contentType?: string }[];
|
|
28
28
|
retryCount?: number;
|
|
29
|
-
type?:
|
|
30
|
-
headers?: Record<string, string
|
|
31
|
-
callback?: (error: Error|null) => void;
|
|
32
|
-
}
|
|
29
|
+
type?: 'transactional' | 'broadcast';
|
|
30
|
+
headers?: Record<string, string> | null;
|
|
31
|
+
callback?: (error: Error | null) => void;
|
|
32
|
+
};
|
|
33
33
|
|
|
34
34
|
export type EmailInterface = EmailInterfaceBase & {
|
|
35
35
|
from: string;
|
|
36
|
-
}
|
|
36
|
+
};
|
|
37
37
|
|
|
38
38
|
/// An email builder is called until it returns undefined. This allows to reduce memory usage for an e-mail with multiple recipients
|
|
39
|
-
export type EmailBuilder = () => EmailInterface | undefined
|
|
39
|
+
export type EmailBuilder = () => EmailInterface | undefined;
|
|
40
40
|
|
|
41
41
|
type InternalEmailData = {
|
|
42
42
|
from: string;
|
|
43
|
-
bcc: string|undefined;
|
|
44
|
-
replyTo: string|undefined;
|
|
43
|
+
bcc: string | undefined;
|
|
44
|
+
replyTo: string | undefined;
|
|
45
45
|
to: string;
|
|
46
46
|
subject: string;
|
|
47
47
|
text?: string;
|
|
48
48
|
html?: string;
|
|
49
|
-
attachments?: { filename: string; path?: string; href?: string; content?: string|Buffer; contentType?: string }[];
|
|
49
|
+
attachments?: { filename: string; path?: string; href?: string; content?: string | Buffer; contentType?: string }[];
|
|
50
50
|
headers?: Record<string, string>;
|
|
51
|
-
}
|
|
51
|
+
};
|
|
52
52
|
|
|
53
53
|
class EmailStatic {
|
|
54
54
|
transporter: Mail;
|
|
55
55
|
transactionalTransporter: Mail;
|
|
56
|
-
rps = 14
|
|
56
|
+
rps = 14;
|
|
57
57
|
|
|
58
|
-
currentQueue: EmailBuilder[] = []
|
|
59
|
-
sending = false
|
|
58
|
+
currentQueue: EmailBuilder[] = [];
|
|
59
|
+
sending = false;
|
|
60
60
|
|
|
61
61
|
setupIfNeeded() {
|
|
62
62
|
if (this.transporter) {
|
|
63
63
|
return;
|
|
64
64
|
}
|
|
65
65
|
if (!STAMHOOFD.SMTP_HOST || !STAMHOOFD.SMTP_PORT) {
|
|
66
|
-
throw new Error(
|
|
66
|
+
throw new Error('Missing environment variables to send emails');
|
|
67
67
|
return;
|
|
68
68
|
}
|
|
69
69
|
|
|
@@ -74,10 +74,10 @@ class EmailStatic {
|
|
|
74
74
|
port: STAMHOOFD.SMTP_PORT,
|
|
75
75
|
auth: {
|
|
76
76
|
user: STAMHOOFD.SMTP_USERNAME, // generated ethereal user
|
|
77
|
-
pass: STAMHOOFD.SMTP_PASSWORD // generated ethereal password
|
|
78
|
-
}
|
|
77
|
+
pass: STAMHOOFD.SMTP_PASSWORD, // generated ethereal password
|
|
78
|
+
},
|
|
79
79
|
});
|
|
80
|
-
|
|
80
|
+
|
|
81
81
|
// create reusable transporter object using the default SMTP transport
|
|
82
82
|
this.transactionalTransporter = nodemailer.createTransport({
|
|
83
83
|
pool: true,
|
|
@@ -85,25 +85,27 @@ class EmailStatic {
|
|
|
85
85
|
port: STAMHOOFD.TRANSACTIONAL_SMTP_PORT,
|
|
86
86
|
auth: {
|
|
87
87
|
user: STAMHOOFD.TRANSACTIONAL_SMTP_USERNAME, // generated ethereal user
|
|
88
|
-
pass: STAMHOOFD.TRANSACTIONAL_SMTP_PASSWORD // generated ethereal password
|
|
89
|
-
}
|
|
88
|
+
pass: STAMHOOFD.TRANSACTIONAL_SMTP_PASSWORD, // generated ethereal password
|
|
89
|
+
},
|
|
90
90
|
});
|
|
91
91
|
|
|
92
92
|
// verify connection configuration
|
|
93
93
|
this.transporter.verify((error) => {
|
|
94
94
|
if (error) {
|
|
95
|
-
console.error(
|
|
96
|
-
}
|
|
97
|
-
|
|
95
|
+
console.error('SMTP server not working', error);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
console.log('SMTP server is ready to take our messages');
|
|
98
99
|
}
|
|
99
100
|
});
|
|
100
101
|
|
|
101
102
|
// verify connection configuration
|
|
102
103
|
this.transactionalTransporter.verify((error) => {
|
|
103
104
|
if (error) {
|
|
104
|
-
console.error(
|
|
105
|
-
}
|
|
106
|
-
|
|
105
|
+
console.error('Transactinoal SMTP server not working', error);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
console.log('Transactinoal SMTP server is ready to take our messages');
|
|
107
109
|
}
|
|
108
110
|
});
|
|
109
111
|
}
|
|
@@ -111,122 +113,123 @@ class EmailStatic {
|
|
|
111
113
|
private sendNextIfNeeded() {
|
|
112
114
|
if (!this.sending) {
|
|
113
115
|
if (this.currentQueue.length == 0) {
|
|
114
|
-
console.log(
|
|
115
|
-
return
|
|
116
|
+
console.log('mail queue is empty');
|
|
117
|
+
return;
|
|
116
118
|
}
|
|
117
|
-
let next = this.currentQueue[0]()
|
|
119
|
+
let next = this.currentQueue[0]();
|
|
118
120
|
|
|
119
121
|
while (next === undefined) {
|
|
120
|
-
this.currentQueue.shift()
|
|
122
|
+
this.currentQueue.shift();
|
|
121
123
|
if (this.currentQueue.length == 0) {
|
|
122
|
-
console.log(
|
|
123
|
-
return
|
|
124
|
+
console.log('mail queue is empty');
|
|
125
|
+
return;
|
|
124
126
|
}
|
|
125
|
-
next = this.currentQueue[0]()
|
|
127
|
+
next = this.currentQueue[0]();
|
|
126
128
|
}
|
|
127
129
|
|
|
128
130
|
this.sending = true;
|
|
129
|
-
this.doSend(next).catch(e => {
|
|
130
|
-
console.error(e)
|
|
131
|
+
this.doSend(next).catch((e) => {
|
|
132
|
+
console.error(e);
|
|
131
133
|
}).finally(() => {
|
|
132
|
-
this.sending = false
|
|
133
|
-
this.sendNextIfNeeded()
|
|
134
|
-
})
|
|
134
|
+
this.sending = false;
|
|
135
|
+
this.sendNextIfNeeded();
|
|
136
|
+
});
|
|
135
137
|
}
|
|
136
138
|
}
|
|
137
139
|
|
|
138
|
-
parseTo(to: string|EmailInterfaceRecipient[]): EmailInterfaceRecipient[] {
|
|
139
|
-
if (typeof to ===
|
|
140
|
-
return this.parseEmailStr(to).map(email => ({ email }))
|
|
140
|
+
parseTo(to: string | EmailInterfaceRecipient[]): EmailInterfaceRecipient[] {
|
|
141
|
+
if (typeof to === 'string') {
|
|
142
|
+
return this.parseEmailStr(to).map(email => ({ email }));
|
|
141
143
|
}
|
|
142
144
|
|
|
143
145
|
// Filter invalid email addresses
|
|
144
|
-
return to.filter(r => DataValidator.isEmailValid(r.email))
|
|
146
|
+
return to.filter(r => DataValidator.isEmailValid(r.email));
|
|
145
147
|
}
|
|
146
148
|
|
|
147
149
|
/**
|
|
148
150
|
* Get the raw email
|
|
149
151
|
*/
|
|
150
152
|
parseEmailStr(emailStr: string): string[] {
|
|
151
|
-
let insideQuote = false
|
|
152
|
-
let escaped = false
|
|
153
|
-
let inAddr = false
|
|
154
|
-
let email =
|
|
155
|
-
let didFindAddr = false
|
|
156
|
-
let cleanedStr =
|
|
153
|
+
let insideQuote = false;
|
|
154
|
+
let escaped = false;
|
|
155
|
+
let inAddr = false;
|
|
156
|
+
let email = '';
|
|
157
|
+
let didFindAddr = false;
|
|
158
|
+
let cleanedStr = '';
|
|
157
159
|
|
|
158
|
-
const addresses: string[] = []
|
|
160
|
+
const addresses: string[] = [];
|
|
159
161
|
|
|
160
162
|
function endAddress() {
|
|
161
|
-
let m: string
|
|
163
|
+
let m: string;
|
|
162
164
|
if (didFindAddr) {
|
|
163
|
-
m = email.trim()
|
|
164
|
-
}
|
|
165
|
-
|
|
165
|
+
m = email.trim();
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
m = cleanedStr.trim();
|
|
166
169
|
}
|
|
167
170
|
if (DataValidator.isEmailValid(m)) {
|
|
168
|
-
addresses.push(m)
|
|
169
|
-
}
|
|
170
|
-
didFindAddr = false
|
|
171
|
-
email =
|
|
172
|
-
inAddr = false
|
|
173
|
-
insideQuote = false
|
|
174
|
-
escaped = false
|
|
175
|
-
cleanedStr =
|
|
171
|
+
addresses.push(m);
|
|
172
|
+
}
|
|
173
|
+
didFindAddr = false;
|
|
174
|
+
email = '';
|
|
175
|
+
inAddr = false;
|
|
176
|
+
insideQuote = false;
|
|
177
|
+
escaped = false;
|
|
178
|
+
cleanedStr = '';
|
|
176
179
|
}
|
|
177
180
|
|
|
178
181
|
// eslint-disable-next-line @typescript-eslint/prefer-for-of
|
|
179
182
|
for (let index = 0; index < emailStr.length; index++) {
|
|
180
|
-
const shouldEscape = escaped
|
|
183
|
+
const shouldEscape = escaped;
|
|
181
184
|
if (escaped) {
|
|
182
|
-
escaped = false
|
|
185
|
+
escaped = false;
|
|
183
186
|
}
|
|
184
187
|
const character = emailStr[index];
|
|
185
188
|
if (insideQuote) {
|
|
186
|
-
if (character ===
|
|
187
|
-
escaped = true
|
|
188
|
-
continue
|
|
189
|
+
if (character === '\\') {
|
|
190
|
+
escaped = true;
|
|
191
|
+
continue;
|
|
189
192
|
}
|
|
190
193
|
}
|
|
191
194
|
|
|
192
195
|
if (!shouldEscape) {
|
|
193
|
-
if (character === "
|
|
196
|
+
if (character === '"') {
|
|
194
197
|
if (insideQuote) {
|
|
195
|
-
insideQuote = false
|
|
196
|
-
continue
|
|
198
|
+
insideQuote = false;
|
|
199
|
+
continue;
|
|
197
200
|
}
|
|
198
|
-
insideQuote = true
|
|
199
|
-
continue
|
|
201
|
+
insideQuote = true;
|
|
202
|
+
continue;
|
|
200
203
|
}
|
|
201
204
|
|
|
202
205
|
if (!insideQuote) {
|
|
203
|
-
if (character ===
|
|
204
|
-
inAddr = true
|
|
205
|
-
continue
|
|
206
|
+
if (character === '<') {
|
|
207
|
+
inAddr = true;
|
|
208
|
+
continue;
|
|
206
209
|
}
|
|
207
210
|
|
|
208
|
-
if (character ===
|
|
209
|
-
inAddr = false
|
|
210
|
-
didFindAddr = true
|
|
211
|
-
continue
|
|
211
|
+
if (character === '>') {
|
|
212
|
+
inAddr = false;
|
|
213
|
+
didFindAddr = true;
|
|
214
|
+
continue;
|
|
212
215
|
}
|
|
213
216
|
|
|
214
|
-
if (character ===
|
|
217
|
+
if (character === ',') {
|
|
215
218
|
// End previous address
|
|
216
|
-
endAddress()
|
|
217
|
-
continue
|
|
219
|
+
endAddress();
|
|
220
|
+
continue;
|
|
218
221
|
}
|
|
219
222
|
}
|
|
220
223
|
}
|
|
221
224
|
|
|
222
225
|
if (inAddr) {
|
|
223
|
-
email += character
|
|
226
|
+
email += character;
|
|
224
227
|
}
|
|
225
|
-
cleanedStr += character
|
|
228
|
+
cleanedStr += character;
|
|
226
229
|
}
|
|
227
230
|
|
|
228
|
-
endAddress()
|
|
229
|
-
return addresses
|
|
231
|
+
endAddress();
|
|
232
|
+
return addresses;
|
|
230
233
|
}
|
|
231
234
|
|
|
232
235
|
private matchWhitelist(email: string, whitelist: string[]) {
|
|
@@ -237,27 +240,27 @@ class EmailStatic {
|
|
|
237
240
|
}
|
|
238
241
|
|
|
239
242
|
const domainIndex = l.indexOf('@');
|
|
240
|
-
const domain = l.substring(domainIndex)
|
|
243
|
+
const domain = l.substring(domainIndex);
|
|
241
244
|
|
|
242
245
|
if (whitelist.includes('*' + domain)) {
|
|
243
246
|
return true;
|
|
244
247
|
}
|
|
245
248
|
|
|
246
|
-
console.warn(
|
|
249
|
+
console.warn('Filtered email to ' + l + ': not whitelisted');
|
|
247
250
|
return false;
|
|
248
251
|
}
|
|
249
252
|
|
|
250
|
-
return true
|
|
253
|
+
return true;
|
|
251
254
|
}
|
|
252
255
|
|
|
253
256
|
private filterWhitelist(recipients: EmailInterfaceRecipient[], whitelist: string[]) {
|
|
254
257
|
if (!whitelist.includes('*') && !whitelist.includes('*@*')) {
|
|
255
|
-
return recipients.filter(mail => {
|
|
256
|
-
return this.matchWhitelist(mail.email, whitelist)
|
|
257
|
-
})
|
|
258
|
+
return recipients.filter((mail) => {
|
|
259
|
+
return this.matchWhitelist(mail.email, whitelist);
|
|
260
|
+
});
|
|
258
261
|
}
|
|
259
262
|
|
|
260
|
-
return recipients
|
|
263
|
+
return recipients;
|
|
261
264
|
}
|
|
262
265
|
|
|
263
266
|
private async doSend(data: EmailInterface) {
|
|
@@ -268,38 +271,39 @@ class EmailStatic {
|
|
|
268
271
|
|
|
269
272
|
// Check if this email is not marked as spam
|
|
270
273
|
// Filter recipients if bounced or spam
|
|
271
|
-
let recipients = this.parseTo(data.to)
|
|
274
|
+
let recipients = this.parseTo(data.to);
|
|
272
275
|
if (recipients.length === 0) {
|
|
273
276
|
// Invalid string
|
|
274
|
-
console.warn("Invalid e-mail string: '"+data.to+"'. E-mail skipped")
|
|
275
|
-
return
|
|
277
|
+
console.warn("Invalid e-mail string: '" + data.to + "'. E-mail skipped");
|
|
278
|
+
return;
|
|
276
279
|
}
|
|
277
280
|
|
|
278
281
|
// Check spam and bounces
|
|
279
|
-
recipients = await EmailAddress.filterSendTo(recipients)
|
|
282
|
+
recipients = await EmailAddress.filterSendTo(recipients);
|
|
280
283
|
|
|
281
284
|
if (recipients.length === 0) {
|
|
282
285
|
// Invalid string
|
|
283
|
-
console.warn("Filtered all emails due hard bounce or spam '"+data.to+"'. E-mail skipped")
|
|
286
|
+
console.warn("Filtered all emails due hard bounce or spam '" + data.to + "'. E-mail skipped");
|
|
284
287
|
|
|
285
288
|
try {
|
|
286
289
|
data.callback?.(
|
|
287
290
|
new SimpleError({
|
|
288
291
|
code: 'all_filtered',
|
|
289
|
-
message:
|
|
290
|
-
human: 'Alle ontvangers zijn gefilterd wegens een hard bounce of spam'
|
|
291
|
-
})
|
|
292
|
-
)
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
292
|
+
message: 'All recipients are filtered due to hard bounce or spam',
|
|
293
|
+
human: 'Alle ontvangers zijn gefilterd wegens een hard bounce of spam',
|
|
294
|
+
}),
|
|
295
|
+
);
|
|
296
|
+
}
|
|
297
|
+
catch (e) {
|
|
298
|
+
console.error('Error in email callback', e);
|
|
299
|
+
}
|
|
300
|
+
return;
|
|
297
301
|
}
|
|
298
302
|
|
|
299
303
|
// Filter by environment
|
|
300
304
|
if (STAMHOOFD.environment !== 'production' || (STAMHOOFD.WHITELISTED_EMAIL_DESTINATIONS && STAMHOOFD.WHITELISTED_EMAIL_DESTINATIONS.length > 0)) {
|
|
301
|
-
const whitelist = STAMHOOFD.WHITELISTED_EMAIL_DESTINATIONS ?? []
|
|
302
|
-
recipients = this.filterWhitelist(recipients, whitelist)
|
|
305
|
+
const whitelist = STAMHOOFD.WHITELISTED_EMAIL_DESTINATIONS ?? [];
|
|
306
|
+
recipients = this.filterWhitelist(recipients, whitelist);
|
|
303
307
|
}
|
|
304
308
|
|
|
305
309
|
if (recipients.length === 0) {
|
|
@@ -308,37 +312,38 @@ class EmailStatic {
|
|
|
308
312
|
data.callback?.(
|
|
309
313
|
new SimpleError({
|
|
310
314
|
code: 'all_filtered',
|
|
311
|
-
message:
|
|
312
|
-
human: 'Alle ontvangers zijn gefilterd omwille van de demo-omgeving die het versturen van bepaalde e-mails limiteert'
|
|
313
|
-
})
|
|
314
|
-
)
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
315
|
+
message: 'All recipients are filtered due to environment',
|
|
316
|
+
human: 'Alle ontvangers zijn gefilterd omwille van de demo-omgeving die het versturen van bepaalde e-mails limiteert',
|
|
317
|
+
}),
|
|
318
|
+
);
|
|
319
|
+
}
|
|
320
|
+
catch (e) {
|
|
321
|
+
console.error('Error in email callback', e);
|
|
322
|
+
}
|
|
323
|
+
return;
|
|
319
324
|
}
|
|
320
|
-
|
|
325
|
+
|
|
321
326
|
// Rebuild to
|
|
322
327
|
const to = recipients.map((recipient) => {
|
|
323
328
|
if (!recipient.name) {
|
|
324
|
-
return recipient.email
|
|
329
|
+
return recipient.email;
|
|
325
330
|
}
|
|
326
|
-
const cleanedName = Formatter.emailSenderName(recipient.name)
|
|
331
|
+
const cleanedName = Formatter.emailSenderName(recipient.name);
|
|
327
332
|
if (cleanedName.length < 2) {
|
|
328
|
-
return recipient.email
|
|
333
|
+
return recipient.email;
|
|
329
334
|
}
|
|
330
|
-
return '"'+cleanedName+'" <'+recipient.email+'>'
|
|
331
|
-
}).join(
|
|
335
|
+
return '"' + cleanedName + '" <' + recipient.email + '>';
|
|
336
|
+
}).join(', ');
|
|
332
337
|
|
|
333
338
|
this.setupIfNeeded();
|
|
334
339
|
|
|
335
340
|
// send mail with defined transport object
|
|
336
341
|
const mail: InternalEmailData = {
|
|
337
342
|
from: data.from, // sender address
|
|
338
|
-
bcc: (STAMHOOFD.environment ===
|
|
343
|
+
bcc: (STAMHOOFD.environment === 'production' || !data.bcc) ? data.bcc : 'simon@stamhoofd.be',
|
|
339
344
|
replyTo: data.replyTo,
|
|
340
345
|
to,
|
|
341
|
-
subject: data.subject, // Subject line
|
|
346
|
+
subject: data.subject.substring(0, 1000), // Subject line
|
|
342
347
|
text: data.text, // plain text body
|
|
343
348
|
};
|
|
344
349
|
|
|
@@ -356,14 +361,14 @@ class EmailStatic {
|
|
|
356
361
|
if (!data.text) {
|
|
357
362
|
mail.text = htmlToText.fromString(data.html, {
|
|
358
363
|
wordwrap: null,
|
|
359
|
-
unorderedListItemPrefix:
|
|
364
|
+
unorderedListItemPrefix: ' - ',
|
|
360
365
|
});
|
|
361
366
|
}
|
|
362
367
|
}
|
|
363
368
|
|
|
364
|
-
const parsedFrom = this.parseEmailStr(data.from)
|
|
369
|
+
const parsedFrom = this.parseEmailStr(data.from);
|
|
365
370
|
if (parsedFrom.length !== 1) {
|
|
366
|
-
throw new Error(
|
|
371
|
+
throw new Error('Invalid from email ' + data.from);
|
|
367
372
|
}
|
|
368
373
|
|
|
369
374
|
try {
|
|
@@ -371,39 +376,43 @@ class EmailStatic {
|
|
|
371
376
|
if (STAMHOOFD.TRANSACTIONAL_WHITELIST !== undefined && data.type === 'transactional') {
|
|
372
377
|
if (!this.matchWhitelist(parsedFrom[0], STAMHOOFD.TRANSACTIONAL_WHITELIST)) {
|
|
373
378
|
// Not supported
|
|
374
|
-
data.type = 'broadcast'
|
|
379
|
+
data.type = 'broadcast';
|
|
375
380
|
}
|
|
376
381
|
}
|
|
377
382
|
|
|
378
|
-
const transporter = (data.type ===
|
|
383
|
+
const transporter = (data.type === 'transactional') ? this.transactionalTransporter : this.transporter;
|
|
379
384
|
|
|
380
|
-
if (data.type ===
|
|
385
|
+
if (data.type === 'transactional') {
|
|
381
386
|
mail.headers = {
|
|
382
387
|
...data.headers,
|
|
383
|
-
...STAMHOOFD.TRANSACTIONAL_SMTP_HEADERS
|
|
384
|
-
}
|
|
385
|
-
}
|
|
388
|
+
...STAMHOOFD.TRANSACTIONAL_SMTP_HEADERS,
|
|
389
|
+
};
|
|
390
|
+
}
|
|
391
|
+
else {
|
|
386
392
|
mail.headers = {
|
|
387
393
|
...data.headers,
|
|
388
|
-
...STAMHOOFD.SMTP_HEADERS
|
|
389
|
-
}
|
|
394
|
+
...STAMHOOFD.SMTP_HEADERS,
|
|
395
|
+
};
|
|
390
396
|
}
|
|
391
397
|
|
|
392
398
|
if (STAMHOOFD.POSTMARK_SERVER_TOKEN && (data.retryCount === 1)) {
|
|
393
|
-
await this.sendApi(mail)
|
|
394
|
-
console.log(
|
|
395
|
-
}
|
|
399
|
+
await this.sendApi(mail);
|
|
400
|
+
console.log('Message sent via api:', to, data.subject, data.type);
|
|
401
|
+
}
|
|
402
|
+
else {
|
|
396
403
|
const info = await transporter.sendMail(mail);
|
|
397
|
-
console.log(
|
|
404
|
+
console.log('Message sent:', to, data.subject, info.messageId, data.type);
|
|
398
405
|
}
|
|
399
|
-
|
|
406
|
+
|
|
400
407
|
try {
|
|
401
|
-
data.callback?.(null)
|
|
402
|
-
} catch (e) {
|
|
403
|
-
console.error("Error in email callback", e)
|
|
408
|
+
data.callback?.(null);
|
|
404
409
|
}
|
|
405
|
-
|
|
406
|
-
|
|
410
|
+
catch (e) {
|
|
411
|
+
console.error('Error in email callback', e);
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
catch (e) {
|
|
415
|
+
console.error('Failed to send e-mail:');
|
|
407
416
|
console.error(e);
|
|
408
417
|
console.error(mail);
|
|
409
418
|
|
|
@@ -414,26 +423,27 @@ class EmailStatic {
|
|
|
414
423
|
data.retryCount = (data.retryCount ?? 0) + 1;
|
|
415
424
|
|
|
416
425
|
if (data.retryCount <= 2) {
|
|
417
|
-
|
|
418
426
|
if (data.type === 'transactional' && data.retryCount === 2) {
|
|
419
427
|
data.type = 'broadcast';
|
|
420
428
|
}
|
|
421
429
|
this.send(data);
|
|
422
|
-
}
|
|
430
|
+
}
|
|
431
|
+
else {
|
|
423
432
|
try {
|
|
424
|
-
data.callback?.(e)
|
|
425
|
-
}
|
|
426
|
-
|
|
433
|
+
data.callback?.(e);
|
|
434
|
+
}
|
|
435
|
+
catch (e2) {
|
|
436
|
+
console.error('Error in email failure callback', e2, 'for original error', e);
|
|
427
437
|
}
|
|
428
438
|
|
|
429
439
|
// Email address is not verified.
|
|
430
440
|
if (STAMHOOFD.environment !== 'development') {
|
|
431
441
|
if (data.from !== this.getWebmasterFromEmail()) {
|
|
432
442
|
this.sendWebmaster({
|
|
433
|
-
subject:
|
|
434
|
-
text:
|
|
435
|
-
type: (data.type ===
|
|
436
|
-
})
|
|
443
|
+
subject: 'E-mail kon niet worden verzonden',
|
|
444
|
+
text: 'Een e-mail vanaf ' + data.from + ' kon niet worden verstuurd aan ' + mail.to + ': \n\n' + e + '\n\n' + (mail.text ?? ''),
|
|
445
|
+
type: (data.type === 'transactional') ? 'broadcast' : 'transactional',
|
|
446
|
+
});
|
|
437
447
|
}
|
|
438
448
|
}
|
|
439
449
|
}
|
|
@@ -442,36 +452,36 @@ class EmailStatic {
|
|
|
442
452
|
|
|
443
453
|
private async sendApi(data: InternalEmailData) {
|
|
444
454
|
if (!STAMHOOFD.POSTMARK_SERVER_TOKEN) {
|
|
445
|
-
throw new Error(
|
|
455
|
+
throw new Error('Missing POSTMARK_SERVER_TOKEN');
|
|
446
456
|
}
|
|
447
457
|
const client = new postmark.ServerClient(STAMHOOFD.POSTMARK_SERVER_TOKEN);
|
|
448
|
-
const headers: {Name: string
|
|
458
|
+
const headers: { Name: string; Value: string }[] = [];
|
|
449
459
|
for (const key in data.headers) {
|
|
450
460
|
headers.push({ Name: key, Value: data.headers[key] });
|
|
451
461
|
}
|
|
452
462
|
|
|
453
463
|
const message: Postmark.Models.Message = {
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
+
From: data.from,
|
|
465
|
+
To: data.to,
|
|
466
|
+
Bcc: data.bcc,
|
|
467
|
+
Subject: data.subject,
|
|
468
|
+
TextBody: data.text,
|
|
469
|
+
HtmlBody: data.html,
|
|
470
|
+
Headers: headers,
|
|
471
|
+
ReplyTo: data.replyTo,
|
|
472
|
+
Tag: 'api',
|
|
473
|
+
MessageStream: (data.headers?.['X-PM-Message-Stream'] ?? 'outbound'),
|
|
464
474
|
};
|
|
465
475
|
|
|
466
476
|
console.log('Falling back to Postmark API', message);
|
|
467
477
|
|
|
468
478
|
try {
|
|
469
479
|
await client.sendEmail(message);
|
|
470
|
-
}
|
|
480
|
+
}
|
|
481
|
+
catch (e) {
|
|
471
482
|
console.error('Failed to send email with Postmark API', e);
|
|
472
483
|
throw e;
|
|
473
484
|
}
|
|
474
|
-
|
|
475
485
|
}
|
|
476
486
|
|
|
477
487
|
/**
|
|
@@ -480,15 +490,15 @@ class EmailStatic {
|
|
|
480
490
|
*/
|
|
481
491
|
getInternalEmailFor(i18n: I18n) {
|
|
482
492
|
// todo: use default email in platform settings
|
|
483
|
-
return '"' + (STAMHOOFD.platformName ?? 'Stamhoofd') + ' " <hallo@'+ (i18n.localizedDomains.defaultTransactionalEmail()) +'>'
|
|
493
|
+
return '"' + (STAMHOOFD.platformName ?? 'Stamhoofd') + ' " <hallo@' + (i18n.localizedDomains.defaultTransactionalEmail()) + '>';
|
|
484
494
|
}
|
|
485
495
|
|
|
486
496
|
getWebmasterFromEmail() {
|
|
487
|
-
return '"' + (STAMHOOFD.platformName ?? 'Stamhoofd') + ' " <webmaster@'+ (new I18n(
|
|
497
|
+
return '"' + (STAMHOOFD.platformName ?? 'Stamhoofd') + ' " <webmaster@' + (new I18n('nl', 'BE').localizedDomains.defaultTransactionalEmail()) + '>';
|
|
488
498
|
}
|
|
489
499
|
|
|
490
500
|
getWebmasterToEmail() {
|
|
491
|
-
return 'hallo@stamhoofd.be'
|
|
501
|
+
return 'hallo@stamhoofd.be';
|
|
492
502
|
}
|
|
493
503
|
|
|
494
504
|
/**
|
|
@@ -496,18 +506,18 @@ class EmailStatic {
|
|
|
496
506
|
* Please use EmailBuilder.sendEmailTemplate
|
|
497
507
|
*/
|
|
498
508
|
getPersonalEmailFor(i18n: I18n) {
|
|
499
|
-
return '"Simon Backx" <'+ (i18n.$t(
|
|
509
|
+
return '"Simon Backx" <' + (i18n.$t('5670bc42-cf94-46b6-9ce0-7cdc4ffbb4d9')) + '>';
|
|
500
510
|
}
|
|
501
511
|
|
|
502
512
|
/**
|
|
503
513
|
* Send an email to the webmaster
|
|
504
514
|
*/
|
|
505
|
-
sendWebmaster(data: Omit<EmailInterfaceBase,
|
|
506
|
-
const mail = Object.assign(data, {
|
|
515
|
+
sendWebmaster(data: Omit<EmailInterfaceBase, 'to'>) {
|
|
516
|
+
const mail = Object.assign(data, {
|
|
507
517
|
from: this.getWebmasterFromEmail(),
|
|
508
|
-
to: this.getWebmasterToEmail()
|
|
509
|
-
})
|
|
510
|
-
this.send(mail)
|
|
518
|
+
to: this.getWebmasterToEmail(),
|
|
519
|
+
});
|
|
520
|
+
this.send(mail);
|
|
511
521
|
}
|
|
512
522
|
|
|
513
523
|
send(data: EmailInterface) {
|
|
@@ -515,25 +525,25 @@ class EmailStatic {
|
|
|
515
525
|
// Do not send any emails
|
|
516
526
|
return;
|
|
517
527
|
}
|
|
518
|
-
let didSend = false
|
|
528
|
+
let didSend = false;
|
|
519
529
|
|
|
520
530
|
this.schedule(() => {
|
|
521
531
|
if (didSend) {
|
|
522
|
-
return undefined
|
|
532
|
+
return undefined;
|
|
523
533
|
}
|
|
524
534
|
didSend = true;
|
|
525
|
-
return data
|
|
526
|
-
})
|
|
535
|
+
return data;
|
|
536
|
+
});
|
|
527
537
|
}
|
|
528
538
|
|
|
529
539
|
schedule(builder: EmailBuilder) {
|
|
530
|
-
this.currentQueue.push(builder)
|
|
531
|
-
this.sendNextIfNeeded()
|
|
540
|
+
this.currentQueue.push(builder);
|
|
541
|
+
this.sendNextIfNeeded();
|
|
532
542
|
}
|
|
533
543
|
|
|
534
544
|
scheduleAndWait(builder: EmailBuilder) {
|
|
535
|
-
this.currentQueue.push(builder)
|
|
536
|
-
this.sendNextIfNeeded()
|
|
545
|
+
this.currentQueue.push(builder);
|
|
546
|
+
this.sendNextIfNeeded();
|
|
537
547
|
}
|
|
538
548
|
}
|
|
539
549
|
|