@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.
@@ -1,5 +1,5 @@
1
1
  import Mail from 'nodemailer/lib/mailer';
2
- import { I18n } from "@stamhoofd/backend-i18n";
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?: "transactional" | "broadcast";
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, "to">): void;
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,CAAA;AAQ9C,MAAM,MAAM,uBAAuB,GAAG;IAClC,IAAI,CAAC,EAAE,MAAM,GAAC,IAAI,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACjB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC7B,EAAE,EAAE,MAAM,GAAC,uBAAuB,EAAE,CAAC;IACrC,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,GAAC,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAClH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,eAAe,GAAG,WAAW,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAC,IAAI,CAAC;IACtC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,GAAC,IAAI,KAAK,IAAI,CAAC;CAC1C,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,kBAAkB,GAAG;IAC9C,IAAI,EAAE,MAAM,CAAC;CAChB,CAAA;AAGD,MAAM,MAAM,YAAY,GAAG,MAAM,cAAc,GAAG,SAAS,CAAA;AAc3D,cAAM,WAAW;IACb,WAAW,EAAE,IAAI,CAAC;IAClB,wBAAwB,EAAE,IAAI,CAAC;IAC/B,GAAG,SAAK;IAER,YAAY,EAAE,YAAY,EAAE,CAAK;IACjC,OAAO,UAAQ;IAEf,aAAa;IAkDb,OAAO,CAAC,gBAAgB;IA2BxB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAC,uBAAuB,EAAE,GAAG,uBAAuB,EAAE;IASxE;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAkFzC,OAAO,CAAC,cAAc;IAqBtB,OAAO,CAAC,eAAe;YAUT,MAAM;YAoLN,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"}
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"}
@@ -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
- // eslint-disable-next-line @typescript-eslint/no-var-requires
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("Missing environment variables to send emails");
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("SMTP server not working", error);
51
+ console.error('SMTP server not working', error);
53
52
  }
54
53
  else {
55
- console.log("SMTP server is ready to take our messages");
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("Transactinoal SMTP server not working", error);
60
+ console.error('Transactinoal SMTP server not working', error);
62
61
  }
63
62
  else {
64
- console.log("Transactinoal SMTP server is ready to take our messages");
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("mail queue is empty");
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("mail queue is empty");
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 === "string") {
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("Filtered email to " + l + ": not whitelisted");
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: "All recipients are filtered due to hard bounce or spam",
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("Error in email callback", e);
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: "All recipients are filtered due to environment",
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("Error in email callback", e);
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 === "production" || !data.bcc) ? data.bcc : "simon@stamhoofd.be",
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("Invalid from email " + data.from);
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 === "transactional") ? this.transactionalTransporter : this.transporter;
297
- if (data.type === "transactional") {
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("Message sent via api:", to, data.subject, data.type);
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("Message sent:", to, data.subject, info.messageId, data.type);
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("Error in email callback", e);
320
+ console.error('Error in email callback', e);
322
321
  }
323
322
  }
324
323
  catch (e) {
325
- console.error("Failed to send e-mail:");
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("Error in email failure callback", e2, 'for original error', e);
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: "E-mail kon niet worden verzonden",
350
- text: "Een e-mail vanaf " + data.from + " kon niet worden verstuurd aan " + mail.to + ": \n\n" + e + "\n\n" + (mail.text ?? ""),
351
- type: (data.type === "transactional") ? "broadcast" : "transactional"
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("Missing POSTMARK_SERVER_TOKEN");
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
- "From": data.from,
369
- "To": data.to,
370
- "Bcc": data.bcc,
371
- "Subject": data.subject,
372
- "TextBody": data.text,
373
- "HtmlBody": data.html,
374
- "Headers": headers,
375
- "ReplyTo": data.replyTo,
376
- "Tag": "api",
377
- "MessageStream": (data.headers?.["X-PM-Message-Stream"] ?? "outbound")
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("nl", "BE").localizedDomains.defaultTransactionalEmail()) + '>';
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("5670bc42-cf94-46b6-9ce0-7cdc4ffbb4d9")) + '>';
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":";;;;AAAA,gDAA8D;AAC9D,oEAAmC;AAEnC,yDAAsD;AACtD,wEAAsC;AACtC,gDAA2C;AAC3C,0DAA8C;AAC9C,6DAAwD;AAGxD,kFAAkF;AAClF,8DAA8D;AAC9D,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;AAwCpC,MAAM,WAAW;IACb,WAAW,CAAO;IAClB,wBAAwB,CAAO;IAC/B,GAAG,GAAG,EAAE,CAAA;IAER,YAAY,GAAmB,EAAE,CAAA;IACjC,OAAO,GAAG,KAAK,CAAA;IAEf,aAAa;QACT,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,OAAO;QACX,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAChE,OAAO;QACX,CAAC;QAED,sEAAsE;QACtE,IAAI,CAAC,WAAW,GAAG,oBAAU,CAAC,eAAe,CAAC;YAC1C,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,SAAS,CAAC,SAAS;YACzB,IAAI,EAAE,SAAS,CAAC,SAAS;YACzB,IAAI,EAAE;gBACF,IAAI,EAAE,SAAS,CAAC,aAAa,EAAE,0BAA0B;gBACzD,IAAI,EAAE,SAAS,CAAC,aAAa,CAAC,8BAA8B;aAC/D;SACJ,CAAC,CAAC;QAEH,sEAAsE;QACtE,IAAI,CAAC,wBAAwB,GAAG,oBAAU,CAAC,eAAe,CAAC;YACvD,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,SAAS,CAAC,uBAAuB;YACvC,IAAI,EAAE,SAAS,CAAC,uBAAuB;YACvC,IAAI,EAAE;gBACF,IAAI,EAAE,SAAS,CAAC,2BAA2B,EAAE,0BAA0B;gBACvE,IAAI,EAAE,SAAS,CAAC,2BAA2B,CAAC,8BAA8B;aAC7E;SACJ,CAAC,CAAC;QAEH,kCAAkC;QAClC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;YAC9B,IAAI,KAAK,EAAE,CAAC;gBACR,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACJ,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;YAC7D,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,kCAAkC;QAClC,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;YAC3C,IAAI,KAAK,EAAE,CAAC;gBACR,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;YAClE,CAAC;iBAAM,CAAC;gBACJ,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;YAC3E,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,gBAAgB;QACpB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAA;gBAClC,OAAM;YACV,CAAC;YACD,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAA;YAEjC,OAAO,IAAI,KAAK,SAAS,EAAE,CAAC;gBACxB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAA;gBACzB,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;oBAChC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAA;oBAClC,OAAM;gBACV,CAAC;gBACD,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAA;YACjC,CAAC;YAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBACxB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YACpB,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;gBACZ,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;gBACpB,IAAI,CAAC,gBAAgB,EAAE,CAAA;YAC3B,CAAC,CAAC,CAAA;QACN,CAAC;IACL,CAAC;IAED,OAAO,CAAC,EAAoC;QACxC,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;QAC3D,CAAC;QAED,iCAAiC;QACjC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,uBAAa,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;IAC9D,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,QAAgB;QAC1B,IAAI,WAAW,GAAG,KAAK,CAAA;QACvB,IAAI,OAAO,GAAG,KAAK,CAAA;QACnB,IAAI,MAAM,GAAG,KAAK,CAAA;QAClB,IAAI,KAAK,GAAG,EAAE,CAAA;QACd,IAAI,WAAW,GAAG,KAAK,CAAA;QACvB,IAAI,UAAU,GAAG,EAAE,CAAA;QAEnB,MAAM,SAAS,GAAa,EAAE,CAAA;QAE9B,SAAS,UAAU;YACf,IAAI,CAAS,CAAA;YACb,IAAI,WAAW,EAAE,CAAC;gBACd,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;YACpB,CAAC;iBAAM,CAAC;gBACJ,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,CAAA;YACzB,CAAC;YACD,IAAI,uBAAa,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACrB,CAAC;YACD,WAAW,GAAG,KAAK,CAAA;YACnB,KAAK,GAAG,EAAE,CAAA;YACV,MAAM,GAAG,KAAK,CAAA;YACd,WAAW,GAAG,KAAK,CAAA;YACnB,OAAO,GAAG,KAAK,CAAA;YACf,UAAU,GAAG,EAAE,CAAA;QACnB,CAAC;QAED,4DAA4D;QAC5D,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YACnD,MAAM,YAAY,GAAG,OAAO,CAAA;YAC5B,IAAI,OAAO,EAAE,CAAC;gBACV,OAAO,GAAG,KAAK,CAAA;YACnB,CAAC;YACD,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClC,IAAI,WAAW,EAAE,CAAC;gBACd,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;oBACrB,OAAO,GAAG,IAAI,CAAA;oBACd,SAAQ;gBACZ,CAAC;YACL,CAAC;YAED,IAAI,CAAC,YAAY,EAAE,CAAC;gBAChB,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;oBACrB,IAAI,WAAW,EAAE,CAAC;wBACd,WAAW,GAAG,KAAK,CAAA;wBACnB,SAAQ;oBACZ,CAAC;oBACD,WAAW,GAAG,IAAI,CAAA;oBAClB,SAAQ;gBACZ,CAAC;gBAED,IAAI,CAAC,WAAW,EAAE,CAAC;oBACf,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;wBACpB,MAAM,GAAG,IAAI,CAAA;wBACb,SAAQ;oBACZ,CAAC;oBAED,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;wBACpB,MAAM,GAAG,KAAK,CAAA;wBACd,WAAW,GAAG,IAAI,CAAA;wBAClB,SAAQ;oBACZ,CAAC;oBAED,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;wBACpB,uBAAuB;wBACvB,UAAU,EAAE,CAAA;wBACZ,SAAQ;oBACZ,CAAC;gBACL,CAAC;YACL,CAAC;YAED,IAAI,MAAM,EAAE,CAAC;gBACT,KAAK,IAAI,SAAS,CAAA;YACtB,CAAC;YACD,UAAU,IAAI,SAAS,CAAA;QAC3B,CAAC;QAED,UAAU,EAAE,CAAA;QACZ,OAAO,SAAS,CAAA;IACpB,CAAC;IAEO,cAAc,CAAC,KAAa,EAAE,SAAmB;QACrD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACzD,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;YAC9B,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxB,OAAO,IAAI,CAAC;YAChB,CAAC;YAED,MAAM,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACnC,MAAM,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;YAEvC,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC;gBACnC,OAAO,IAAI,CAAC;YAChB,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,oBAAoB,GAAG,CAAC,GAAG,mBAAmB,CAAC,CAAA;YAC5D,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,OAAO,IAAI,CAAA;IACf,CAAC;IAEO,eAAe,CAAC,UAAqC,EAAE,SAAmB;QAC9E,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACzD,OAAO,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;gBAC5B,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;YACrD,CAAC,CAAC,CAAA;QACN,CAAC;QAED,OAAO,UAAU,CAAA;IACrB,CAAC;IAEO,KAAK,CAAC,MAAM,CAAC,IAAoB;QACrC,IAAI,SAAS,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;YACnC,yBAAyB;YACzB,OAAO;QACX,CAAC;QAED,4CAA4C;QAC5C,uCAAuC;QACvC,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACtC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,iBAAiB;YACjB,OAAO,CAAC,IAAI,CAAC,0BAA0B,GAAC,IAAI,CAAC,EAAE,GAAC,mBAAmB,CAAC,CAAA;YACpE,OAAM;QACV,CAAC;QAED,yBAAyB;QACzB,UAAU,GAAG,MAAM,2BAAY,CAAC,YAAY,CAAC,UAAU,CAAC,CAAA;QAExD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,iBAAiB;YACjB,OAAO,CAAC,IAAI,CAAC,+CAA+C,GAAC,IAAI,CAAC,EAAE,GAAC,mBAAmB,CAAC,CAAA;YAEzF,IAAI,CAAC;gBACD,IAAI,CAAC,QAAQ,EAAE,CACX,IAAI,2BAAW,CAAC;oBACZ,IAAI,EAAE,cAAc;oBACpB,OAAO,EAAE,wDAAwD;oBACjE,KAAK,EAAE,+DAA+D;iBACzE,CAAC,CACL,CAAA;YACL,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAA;YAC/C,CAAC;YACD,OAAM;QACV,CAAC;QAED,wBAAwB;QACxB,IAAI,SAAS,CAAC,WAAW,KAAK,YAAY,IAAI,CAAC,SAAS,CAAC,8BAA8B,IAAI,SAAS,CAAC,8BAA8B,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;YAC9I,MAAM,SAAS,GAAG,SAAS,CAAC,8BAA8B,IAAI,EAAE,CAAA;YAChE,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;QAC5D,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,iBAAiB;YACjB,IAAI,CAAC;gBACD,IAAI,CAAC,QAAQ,EAAE,CACX,IAAI,2BAAW,CAAC;oBACZ,IAAI,EAAE,cAAc;oBACpB,OAAO,EAAE,gDAAgD;oBACzD,KAAK,EAAE,8GAA8G;iBACxH,CAAC,CACL,CAAA;YACL,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAA;YAC/C,CAAC;YACD,OAAM;QACV,CAAC;QAED,aAAa;QACb,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;YACpC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;gBAClB,OAAO,SAAS,CAAC,KAAK,CAAA;YAC1B,CAAC;YACD,MAAM,WAAW,GAAG,mBAAS,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;YAC7D,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,OAAO,SAAS,CAAC,KAAK,CAAA;YAC1B,CAAC;YACD,OAAO,GAAG,GAAC,WAAW,GAAC,KAAK,GAAC,SAAS,CAAC,KAAK,GAAC,GAAG,CAAA;QACpD,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEb,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,0CAA0C;QAC1C,MAAM,IAAI,GAAsB;YAC5B,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,iBAAiB;YAClC,GAAG,EAAE,CAAC,SAAS,CAAC,WAAW,KAAK,YAAY,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,oBAAoB;YAC5F,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,EAAE;YACF,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,eAAe;YACtC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,kBAAkB;SACtC,CAAC;QAEF,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACxC,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAChC,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YAEtB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACb,IAAI,CAAC,IAAI,GAAG,sBAAU,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE;oBACzC,QAAQ,EAAE,IAAI;oBACd,uBAAuB,EAAE,KAAK;iBACjC,CAAC,CAAC;YACP,CAAC;QACL,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAChD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,IAAI,CAAC,IAAI,CAAC,CAAA;QACtD,CAAC;QAED,IAAI,CAAC;YACD,mDAAmD;YACnD,IAAI,SAAS,CAAC,uBAAuB,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gBACnF,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,uBAAuB,CAAC,EAAE,CAAC;oBACzE,gBAAgB;oBAChB,IAAI,CAAC,IAAI,GAAG,WAAW,CAAA;gBAC3B,CAAC;YACL,CAAC;YAED,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAA;YAEtG,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gBAChC,IAAI,CAAC,OAAO,GAAG;oBACX,GAAG,IAAI,CAAC,OAAO;oBACf,GAAG,SAAS,CAAC,0BAA0B;iBAC1C,CAAA;YACL,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,OAAO,GAAG;oBACX,GAAG,IAAI,CAAC,OAAO;oBACf,GAAG,SAAS,CAAC,YAAY;iBAC5B,CAAA;YACL,CAAC;YAED,IAAI,SAAS,CAAC,qBAAqB,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC7D,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;gBACxB,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACtE,CAAC;iBAAM,CAAC;gBACJ,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC9C,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9E,CAAC;YAED,IAAI,CAAC;gBACD,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAA;YACzB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAA;YAC/C,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAA;YACvC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEpB,uEAAuE;YACvE,MAAM,IAAA,eAAK,EAAC,IAAI,CAAC,CAAC;YAElB,mEAAmE;YACnE,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAE7C,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC;gBAEvB,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;oBACzD,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;gBAC5B,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC;oBACD,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAA;gBACtB,CAAC;gBAAC,OAAO,EAAE,EAAE,CAAC;oBACV,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,EAAE,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAA;gBACjF,CAAC;gBAED,iCAAiC;gBACjC,IAAI,SAAS,CAAC,WAAW,KAAK,aAAa,EAAE,CAAC;oBAC1C,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC;wBAC7C,IAAI,CAAC,aAAa,CAAC;4BACf,OAAO,EAAE,kCAAkC;4BAC3C,IAAI,EAAE,mBAAmB,GAAC,IAAI,CAAC,IAAI,GAAC,iCAAiC,GAAC,IAAI,CAAC,EAAE,GAAC,QAAQ,GAAC,CAAC,GAAC,MAAM,GAAC,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;4BACjH,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,eAAe;yBACxE,CAAC,CAAA;oBACN,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,IAAuB;QACzC,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;QACpD,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QAC1E,MAAM,OAAO,GAAoC,EAAE,CAAC;QACpD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,OAAO,GAA4B;YACrC,MAAM,EAAE,IAAI,CAAC,IAAI;YACjB,IAAI,EAAE,IAAI,CAAC,EAAE;YACb,KAAK,EAAE,IAAI,CAAC,GAAG;YACf,SAAS,EAAE,IAAI,CAAC,OAAO;YACvB,UAAU,EAAE,IAAI,CAAC,IAAI;YACrB,UAAU,EAAE,IAAI,CAAC,IAAI;YACrB,SAAS,EAAE,OAAO;YAClB,SAAS,EAAE,IAAI,CAAC,OAAO;YACvB,KAAK,EAAE,KAAK;YACZ,eAAe,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,qBAAqB,CAAC,IAAI,UAAU,CAAC;SACzE,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,OAAO,CAAC,CAAC;QAErD,IAAI,CAAC;YACD,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,CAAC,CAAC,CAAC;YAC3D,MAAM,CAAC,CAAC;QACZ,CAAC;IAEL,CAAC;IAED;;;OAGG;IACH,mBAAmB,CAAC,IAAU;QAC1B,+CAA+C;QAC/C,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,YAAY,IAAI,WAAW,CAAC,GAAG,YAAY,GAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,EAAE,CAAC,GAAE,GAAG,CAAA;IACjI,CAAC;IAED,qBAAqB;QACjB,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,YAAY,IAAI,WAAW,CAAC,GAAG,gBAAgB,GAAE,CAAC,IAAI,mBAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,gBAAgB,CAAC,yBAAyB,EAAE,CAAC,GAAE,GAAG,CAAA;IACrJ,CAAC;IAED,mBAAmB;QACf,OAAO,oBAAoB,CAAA;IAC/B,CAAC;IAED;;;OAGG;IACH,mBAAmB,CAAC,IAAU;QAC1B,OAAO,iBAAiB,GAAE,CAAC,IAAI,CAAC,EAAE,CAAC,sCAAsC,CAAC,CAAC,GAAE,GAAG,CAAA;IACpF,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,IAAoC;QAC9C,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;YAC7B,IAAI,EAAE,IAAI,CAAC,qBAAqB,EAAE;YAClC,EAAE,EAAE,IAAI,CAAC,mBAAmB,EAAE;SACjC,CAAC,CAAA;QACF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACnB,CAAC;IAED,IAAI,CAAC,IAAoB;QACrB,IAAI,SAAS,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;YACnC,yBAAyB;YACzB,OAAO;QACX,CAAC;QACD,IAAI,OAAO,GAAG,KAAK,CAAA;QAEnB,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;YACf,IAAI,OAAO,EAAE,CAAC;gBACV,OAAO,SAAS,CAAA;YACpB,CAAC;YACD,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,IAAI,CAAA;QACf,CAAC,CAAC,CAAA;IACN,CAAC;IAED,QAAQ,CAAC,OAAqB;QAC1B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC/B,IAAI,CAAC,gBAAgB,EAAE,CAAA;IAC3B,CAAC;IAED,eAAe,CAAC,OAAqB;QACjC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC/B,IAAI,CAAC,gBAAgB,EAAE,CAAA;IAC3B,CAAC;CACJ;AAEY,QAAA,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC"}
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.55.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": "05688607d81f5f9d7d01b425d3ffe87e583e47c9"
28
+ "gitHead": "9e6e3c22154937a4977cc0d1b669d9577067b832"
29
29
  }
@@ -1,69 +1,69 @@
1
1
  import { DataValidator, Formatter } from '@stamhoofd/utility';
2
- import nodemailer from "nodemailer"
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 "@stamhoofd/backend-i18n"
7
+ import { I18n } from '@stamhoofd/backend-i18n';
8
8
  import { SimpleError } from '@simonbackx/simple-errors';
9
- import {type default as Postmark} from "postmark";
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
- // eslint-disable-next-line @typescript-eslint/no-var-requires
13
- const postmark = require("postmark")
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?: "transactional" | "broadcast",
30
- headers?: Record<string, string>|null,
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("Missing environment variables to send emails");
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("SMTP server not working", error);
96
- } else {
97
- console.log("SMTP server is ready to take our messages");
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("Transactinoal SMTP server not working", error);
105
- } else {
106
- console.log("Transactinoal SMTP server is ready to take our messages");
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("mail queue is empty")
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("mail queue is empty")
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 === "string") {
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
- } else {
165
- m = cleanedStr.trim()
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("Filtered email to " + l + ": not whitelisted")
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: "All recipients are filtered due to hard bounce or spam",
290
- human: 'Alle ontvangers zijn gefilterd wegens een hard bounce of spam'
291
- })
292
- )
293
- } catch (e) {
294
- console.error("Error in email callback", e)
295
- }
296
- return
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: "All recipients are filtered due to environment",
312
- human: 'Alle ontvangers zijn gefilterd omwille van de demo-omgeving die het versturen van bepaalde e-mails limiteert'
313
- })
314
- )
315
- } catch (e) {
316
- console.error("Error in email callback", e)
317
- }
318
- return
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 === "production" || !data.bcc) ? data.bcc : "simon@stamhoofd.be",
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("Invalid from email " + data.from)
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 === "transactional") ? this.transactionalTransporter : this.transporter
383
+ const transporter = (data.type === 'transactional') ? this.transactionalTransporter : this.transporter;
379
384
 
380
- if (data.type === "transactional") {
385
+ if (data.type === 'transactional') {
381
386
  mail.headers = {
382
387
  ...data.headers,
383
- ...STAMHOOFD.TRANSACTIONAL_SMTP_HEADERS
384
- }
385
- } else {
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("Message sent via api:", to, data.subject, data.type);
395
- } else {
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("Message sent:", to, data.subject, info.messageId, data.type);
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
- } catch (e) {
406
- console.error("Failed to send e-mail:")
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
- } else {
430
+ }
431
+ else {
423
432
  try {
424
- data.callback?.(e)
425
- } catch (e2) {
426
- console.error("Error in email failure callback", e2, 'for original error', e)
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: "E-mail kon niet worden verzonden",
434
- text: "Een e-mail vanaf "+data.from+" kon niet worden verstuurd aan "+mail.to+": \n\n"+e+"\n\n"+(mail.text ?? ""),
435
- type: (data.type === "transactional") ? "broadcast" : "transactional"
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("Missing POSTMARK_SERVER_TOKEN")
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, Value: 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
- "From": data.from,
455
- "To": data.to,
456
- "Bcc": data.bcc,
457
- "Subject": data.subject,
458
- "TextBody": data.text,
459
- "HtmlBody": data.html,
460
- "Headers": headers,
461
- "ReplyTo": data.replyTo,
462
- "Tag": "api",
463
- "MessageStream": (data.headers?.["X-PM-Message-Stream"] ?? "outbound")
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
- } catch (e) {
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("nl", "BE").localizedDomains.defaultTransactionalEmail()) +'>'
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("5670bc42-cf94-46b6-9ce0-7cdc4ffbb4d9")) +'>'
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, "to">) {
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