@stamhoofd/email 2.78.2 → 2.78.4

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
- import Mail from 'nodemailer/lib/mailer';
2
1
  import { I18n } from '@stamhoofd/backend-i18n';
2
+ import Mail from 'nodemailer/lib/mailer';
3
3
  export type EmailInterfaceRecipient = {
4
4
  name?: string | null;
5
5
  email: string;
@@ -27,6 +27,23 @@ export type EmailInterface = EmailInterfaceBase & {
27
27
  from: string;
28
28
  };
29
29
  export type EmailBuilder = () => EmailInterface | undefined;
30
+ export type InternalEmailData = {
31
+ from: string;
32
+ bcc: string | undefined;
33
+ replyTo: string | undefined;
34
+ to: string;
35
+ subject: string;
36
+ text?: string;
37
+ html?: string;
38
+ attachments?: {
39
+ filename: string;
40
+ path?: string;
41
+ href?: string;
42
+ content?: string | Buffer;
43
+ contentType?: string;
44
+ }[];
45
+ headers?: Record<string, string>;
46
+ };
30
47
  declare class EmailStatic {
31
48
  transporter: Mail;
32
49
  transactionalTransporter: Mail;
@@ -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,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;YAoNN,OAAO;IAkCrB;;;OAGG;IACH,mBAAmB,CAAC,IAAI,EAAE,IAAI;IAK9B,qBAAqB;IAIrB,mBAAmB;IAInB;;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":"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"}
@@ -2,13 +2,13 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Email = void 0;
4
4
  const tslib_1 = require("tslib");
5
+ const simple_errors_1 = require("@simonbackx/simple-errors");
6
+ const backend_i18n_1 = require("@stamhoofd/backend-i18n");
7
+ const structures_1 = require("@stamhoofd/structures");
5
8
  const utility_1 = require("@stamhoofd/utility");
9
+ const html_to_text_1 = tslib_1.__importDefault(require("html-to-text"));
6
10
  const nodemailer_1 = tslib_1.__importDefault(require("nodemailer"));
7
11
  const EmailAddress_1 = require("../models/EmailAddress");
8
- const html_to_text_1 = tslib_1.__importDefault(require("html-to-text"));
9
- const utility_2 = require("@stamhoofd/utility");
10
- const backend_i18n_1 = require("@stamhoofd/backend-i18n");
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
13
  const postmark = require('postmark');
14
14
  class EmailStatic {
@@ -21,6 +21,9 @@ class EmailStatic {
21
21
  if (this.transporter) {
22
22
  return;
23
23
  }
24
+ if (STAMHOOFD.environment === 'test') {
25
+ throw new Error('When using Email in tests, make sure to use EmailMocker.infect() in jest.setup.ts');
26
+ }
24
27
  if (!STAMHOOFD.SMTP_HOST || !STAMHOOFD.SMTP_PORT) {
25
28
  throw new Error('Missing environment variables to send emails');
26
29
  return;
@@ -82,6 +85,9 @@ class EmailStatic {
82
85
  this.sending = true;
83
86
  this.doSend(next).catch((e) => {
84
87
  console.error(e);
88
+ if (next.callback) {
89
+ next.callback(e);
90
+ }
85
91
  }).finally(() => {
86
92
  this.sending = false;
87
93
  this.sendNextIfNeeded();
@@ -182,7 +188,9 @@ class EmailStatic {
182
188
  if (whitelist.includes('*' + domain)) {
183
189
  return true;
184
190
  }
185
- console.warn('Filtered email to ' + l + ': not whitelisted');
191
+ if (STAMHOOFD.environment === 'production') {
192
+ console.warn('Filtered email ' + l + ': not whitelisted');
193
+ }
186
194
  return false;
187
195
  }
188
196
  return true;
@@ -196,16 +204,22 @@ class EmailStatic {
196
204
  return recipients;
197
205
  }
198
206
  async doSend(data) {
199
- if (STAMHOOFD.environment === 'test') {
200
- // Do not send any emails
201
- return;
202
- }
203
207
  // Check if this email is not marked as spam
204
208
  // Filter recipients if bounced or spam
205
209
  let recipients = this.parseTo(data.to);
206
210
  if (recipients.length === 0) {
207
211
  // Invalid string
208
- console.warn("Invalid e-mail string: '" + data.to + "'. E-mail skipped");
212
+ console.warn('Invalid e-mail string: ' + JSON.stringify(data.to) + '. E-mail skipped');
213
+ try {
214
+ data.callback?.(new simple_errors_1.SimpleError({
215
+ code: 'all_filtered',
216
+ message: 'Invalid email address',
217
+ human: 'Ongeldig e-mailadres',
218
+ }));
219
+ }
220
+ catch (e) {
221
+ console.error('Error in email callback', e);
222
+ }
209
223
  return;
210
224
  }
211
225
  // Check spam and bounces
@@ -267,16 +281,18 @@ class EmailStatic {
267
281
  }
268
282
  }
269
283
  // Rebuild to
270
- const bcc = bccRecipients.length === 0 ? undefined : bccRecipients.map((recipient) => {
271
- if (!recipient.name) {
272
- return recipient.email;
273
- }
274
- const cleanedName = utility_1.Formatter.emailSenderName(recipient.name);
275
- if (cleanedName.length < 2) {
276
- return recipient.email;
277
- }
278
- return '"' + cleanedName + '" <' + recipient.email + '>';
279
- }).join(', ');
284
+ const bcc = bccRecipients.length === 0
285
+ ? undefined
286
+ : bccRecipients.map((recipient) => {
287
+ if (!recipient.name) {
288
+ return recipient.email;
289
+ }
290
+ const cleanedName = utility_1.Formatter.emailSenderName(recipient.name);
291
+ if (cleanedName.length < 2) {
292
+ return recipient.email;
293
+ }
294
+ return '"' + cleanedName + '" <' + recipient.email + '>';
295
+ }).join(', ');
280
296
  this.setupIfNeeded();
281
297
  // send mail with defined transport object
282
298
  const mail = {
@@ -343,11 +359,13 @@ class EmailStatic {
343
359
  }
344
360
  }
345
361
  catch (e) {
346
- console.error('Failed to send e-mail:');
347
- console.error(e);
348
- console.error(mail);
349
- // Sleep 1 second to give servers some time to fix possible rate limits
350
- await (0, utility_2.sleep)(1000);
362
+ if (STAMHOOFD.environment !== 'test') {
363
+ console.error('Failed to send e-mail:');
364
+ console.error(e);
365
+ console.error(mail);
366
+ // Sleep 1 second to give servers some time to fix possible rate limits
367
+ await (0, utility_1.sleep)(1000);
368
+ }
351
369
  // Reschedule twice (at maximum) to fix temporary connection issues
352
370
  data.retryCount = (data.retryCount ?? 0) + 1;
353
371
  if (data.retryCount <= 2) {
@@ -358,13 +376,15 @@ class EmailStatic {
358
376
  }
359
377
  else {
360
378
  try {
361
- data.callback?.(e);
379
+ if (data.callback) {
380
+ data.callback(e);
381
+ }
362
382
  }
363
383
  catch (e2) {
364
384
  console.error('Error in email failure callback', e2, 'for original error', e);
365
385
  }
366
386
  // Email address is not verified.
367
- if (STAMHOOFD.environment !== 'development') {
387
+ if (STAMHOOFD.environment === 'production') {
368
388
  if (data.from !== this.getWebmasterFromEmail()) {
369
389
  this.sendWebmaster({
370
390
  subject: 'E-mail kon niet worden verzonden',
@@ -415,7 +435,7 @@ class EmailStatic {
415
435
  return '"' + (STAMHOOFD.platformName ?? 'Stamhoofd') + ' " <hallo@' + (i18n.localizedDomains.defaultTransactionalEmail()) + '>';
416
436
  }
417
437
  getWebmasterFromEmail() {
418
- return '"' + (STAMHOOFD.platformName ?? 'Stamhoofd') + ' " <webmaster@' + (new backend_i18n_1.I18n('nl', 'BE').localizedDomains.defaultTransactionalEmail()) + '>';
438
+ return '"' + (STAMHOOFD.platformName ?? 'Stamhoofd') + ' " <webmaster@' + (new backend_i18n_1.I18n('nl', structures_1.Country.Belgium).localizedDomains.defaultTransactionalEmail()) + '>';
419
439
  }
420
440
  getWebmasterToEmail() {
421
441
  return 'hallo@stamhoofd.be';
@@ -431,10 +451,6 @@ class EmailStatic {
431
451
  this.send(mail);
432
452
  }
433
453
  send(data) {
434
- if (STAMHOOFD.environment === 'test') {
435
- // Do not send any emails
436
- return;
437
- }
438
454
  let didSend = false;
439
455
  this.schedule(() => {
440
456
  if (didSend) {
@@ -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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"}
@@ -0,0 +1,27 @@
1
+ import { InternalEmailData } from './Email';
2
+ type MockedCallback = (data: InternalEmailData) => Promise<void> | void;
3
+ type MockedResponse = {
4
+ error?: Error | null;
5
+ callback?: MockedCallback;
6
+ };
7
+ export declare class EmailMocker {
8
+ sentEmails: InternalEmailData[];
9
+ failedEmails: InternalEmailData[];
10
+ responseQueue: MockedResponse[];
11
+ mode: 'transactional' | 'broadcast';
12
+ constructor(mode?: 'transactional' | 'broadcast');
13
+ static transactional: EmailMocker;
14
+ static broadcast: EmailMocker;
15
+ static infect(): void;
16
+ static afterAll(): void;
17
+ reset(): void;
18
+ onNext(callback: MockedCallback): void;
19
+ succeedNext(): void;
20
+ failNext(error: Error): void;
21
+ getSucceededCount(): number;
22
+ getFailedCount(): number;
23
+ getSucceededEmail(index: number): InternalEmailData;
24
+ getSucceededEmails(): InternalEmailData[];
25
+ }
26
+ export {};
27
+ //# sourceMappingURL=EmailMocker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmailMocker.d.ts","sourceRoot":"","sources":["../../src/classes/EmailMocker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAGnD,KAAK,cAAc,GAAG,CAAC,IAAI,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACxE,KAAK,cAAc,GAAG;IAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,cAAc,CAAA;CAAE,CAAC;AAE1E,qBAAa,WAAW;IACpB,UAAU,EAAE,iBAAiB,EAAE,CAAM;IACrC,YAAY,EAAE,iBAAiB,EAAE,CAAM;IAEvC,aAAa,EAAE,cAAc,EAAE,CAAM;IACrC,IAAI,EAAE,eAAe,GAAG,WAAW,CAAmB;gBAE1C,IAAI,GAAE,eAAe,GAAG,WAA6B;IAIjE,MAAM,CAAC,aAAa,cAAoC;IACxD,MAAM,CAAC,SAAS,cAAgC;IAEhD,MAAM,CAAC,MAAM;IAsDb,MAAM,CAAC,QAAQ;IAMf,KAAK;IAOL,MAAM,CAAC,QAAQ,EAAE,cAAc;IAI/B,WAAW;IAIX,QAAQ,CAAC,KAAK,EAAE,KAAK;IAKrB,iBAAiB;IAIjB,cAAc;IAId,iBAAiB,CAAC,KAAK,EAAE,MAAM;IAI/B,kBAAkB;CAGrB"}
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.EmailMocker = void 0;
27
+ const Email_1 = require("./Email");
28
+ const test_utils_1 = require("@stamhoofd/test-utils");
29
+ class EmailMocker {
30
+ sentEmails = [];
31
+ failedEmails = [];
32
+ responseQueue = [];
33
+ mode = 'transactional';
34
+ constructor(mode = 'transactional') {
35
+ this.mode = mode;
36
+ }
37
+ static transactional = new EmailMocker('transactional');
38
+ static broadcast = new EmailMocker('broadcast');
39
+ static infect() {
40
+ if (STAMHOOFD.environment !== 'test') {
41
+ throw new Error('EmailMocker can only be used in test environment');
42
+ }
43
+ const handler = async (mocker, data) => {
44
+ const nextHandler = mocker.responseQueue.shift();
45
+ try {
46
+ if (nextHandler) {
47
+ if (nextHandler.callback) {
48
+ await nextHandler.callback(data);
49
+ }
50
+ if (nextHandler.error) {
51
+ throw nextHandler.error;
52
+ }
53
+ }
54
+ }
55
+ catch (e) {
56
+ mocker.failedEmails.push(data);
57
+ throw e;
58
+ }
59
+ mocker.sentEmails.push(data);
60
+ return {
61
+ messageId: 'mocked-' + mocker.sentEmails.length,
62
+ };
63
+ };
64
+ test_utils_1.TestUtils.addBeforeAll(async () => {
65
+ // We load async here because this is a dev dependency (otherwise Node will reach this and complain, breaking the boot)
66
+ const sinon = await Promise.resolve().then(() => __importStar(require('sinon')));
67
+ sinon.stub(Email_1.Email, 'setupIfNeeded').callsFake(function () {
68
+ this.transporter = {
69
+ sendMail: async (data) => {
70
+ return handler(EmailMocker.broadcast, data);
71
+ },
72
+ };
73
+ this.transactionalTransporter = {
74
+ sendMail: async (data) => {
75
+ return handler(EmailMocker.transactional, data);
76
+ },
77
+ };
78
+ });
79
+ });
80
+ test_utils_1.TestUtils.addAfterEach(() => {
81
+ EmailMocker.afterAll();
82
+ });
83
+ }
84
+ static afterAll() {
85
+ // Clear
86
+ EmailMocker.transactional.reset();
87
+ EmailMocker.broadcast.reset();
88
+ }
89
+ reset() {
90
+ this.sentEmails = [];
91
+ this.failedEmails = [];
92
+ this.responseQueue = [];
93
+ }
94
+ // Defining failure / success
95
+ onNext(callback) {
96
+ this.responseQueue.push({ callback });
97
+ }
98
+ succeedNext() {
99
+ this.responseQueue.push({});
100
+ }
101
+ failNext(error) {
102
+ this.responseQueue.push({ error });
103
+ }
104
+ // Helpers
105
+ getSucceededCount() {
106
+ return this.sentEmails.length;
107
+ }
108
+ getFailedCount() {
109
+ return this.failedEmails.length;
110
+ }
111
+ getSucceededEmail(index) {
112
+ return this.sentEmails[index];
113
+ }
114
+ getSucceededEmails() {
115
+ return this.sentEmails;
116
+ }
117
+ }
118
+ exports.EmailMocker = EmailMocker;
119
+ //# sourceMappingURL=EmailMocker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmailMocker.js","sourceRoot":"","sources":["../../src/classes/EmailMocker.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mCAAmD;AACnD,sDAAkD;AAKlD,MAAa,WAAW;IACpB,UAAU,GAAwB,EAAE,CAAC;IACrC,YAAY,GAAwB,EAAE,CAAC;IAEvC,aAAa,GAAqB,EAAE,CAAC;IACrC,IAAI,GAAkC,eAAe,CAAC;IAEtD,YAAY,OAAsC,eAAe;QAC7D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,MAAM,CAAC,aAAa,GAAG,IAAI,WAAW,CAAC,eAAe,CAAC,CAAC;IACxD,MAAM,CAAC,SAAS,GAAG,IAAI,WAAW,CAAC,WAAW,CAAC,CAAC;IAEhD,MAAM,CAAC,MAAM;QACT,IAAI,SAAS,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACxE,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,EAAE,MAAmB,EAAE,IAAuB,EAAE,EAAE;YACnE,MAAM,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;YAEjD,IAAI,CAAC;gBACD,IAAI,WAAW,EAAE,CAAC;oBACd,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;wBACvB,MAAM,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;oBACrC,CAAC;oBACD,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;wBACpB,MAAM,WAAW,CAAC,KAAK,CAAC;oBAC5B,CAAC;gBACL,CAAC;YACL,CAAC;YACD,OAAO,CAAC,EAAE,CAAC;gBACP,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC/B,MAAM,CAAC,CAAC;YACZ,CAAC;YAED,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE7B,OAAO;gBACH,SAAS,EAAE,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM;aAClD,CAAC;QACN,CAAC,CAAC;QAEF,sBAAS,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YAC9B,uHAAuH;YACvH,MAAM,KAAK,GAAG,wDAAa,OAAO,GAAC,CAAC;YAEpC,KAAK,CAAC,IAAI,CAAC,aAAK,EAAE,eAAe,CAAC,CAAC,SAAS,CAAC;gBACzC,IAAI,CAAC,WAAW,GAAG;oBACf,QAAQ,EAAE,KAAK,EAAE,IAAuB,EAAE,EAAE;wBACxC,OAAO,OAAO,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;oBAChD,CAAC;iBACG,CAAC;gBAET,IAAI,CAAC,wBAAwB,GAAG;oBAC5B,QAAQ,EAAE,KAAK,EAAE,IAAuB,EAAE,EAAE;wBACxC,OAAO,OAAO,CAAC,WAAW,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;oBACpD,CAAC;iBACG,CAAC;YACb,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,sBAAS,CAAC,YAAY,CAAC,GAAG,EAAE;YACxB,WAAW,CAAC,QAAQ,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,QAAQ;QACX,QAAQ;QACR,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAClC,WAAW,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IAClC,CAAC;IAED,KAAK;QACD,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;IAC5B,CAAC;IAED,6BAA6B;IAC7B,MAAM,CAAC,QAAwB;QAC3B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,WAAW;QACP,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;IAED,QAAQ,CAAC,KAAY;QACjB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,UAAU;IACV,iBAAiB;QACb,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;IAClC,CAAC;IAED,cAAc;QACV,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;IACpC,CAAC;IAED,iBAAiB,CAAC,KAAa;QAC3B,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,kBAAkB;QACd,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;;AA5GL,kCA6GC"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
- export * from "./models/EmailAddress";
2
- export * from "./classes/Email";
1
+ export * from './models/EmailAddress';
2
+ export * from './classes/Email';
3
+ export * from './classes/EmailMocker';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA;AACrC,cAAc,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC"}
package/dist/index.js CHANGED
@@ -3,4 +3,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  tslib_1.__exportStar(require("./models/EmailAddress"), exports);
5
5
  tslib_1.__exportStar(require("./classes/Email"), exports);
6
+ tslib_1.__exportStar(require("./classes/EmailMocker"), exports);
6
7
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,gEAAqC;AACrC,0DAA+B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,gEAAsC;AACtC,0DAAgC;AAChC,gEAAsC"}
@@ -1 +1 @@
1
- {"root":["../src/index.ts","../src/classes/email.test.ts","../src/classes/email.ts","../src/models/emailaddress.ts","../../../../environment.d.ts","../../../../jest-extended.d.ts","../../../stamhoofd.d.ts"],"version":"5.6.2"}
1
+ {"root":["../src/index.ts","../src/classes/email.test.ts","../src/classes/email.ts","../src/classes/emailmocker.ts","../src/models/emailaddress.ts","../../../../environment.d.ts","../../../../jest-extended.d.ts","../../../stamhoofd.d.ts"],"version":"5.6.2"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stamhoofd/email",
3
- "version": "2.78.2",
3
+ "version": "2.78.4",
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": "454b272e0ac9a3ec6e081d70bf1154447a45444d"
28
+ "gitHead": "e8c207be8fd75320024f670d5c663eaa8306ba29"
29
29
  }
@@ -1,12 +1,12 @@
1
- import { DataValidator, Formatter } from '@stamhoofd/utility';
1
+ import { SimpleError } from '@simonbackx/simple-errors';
2
+ import { I18n } from '@stamhoofd/backend-i18n';
3
+ import { Country } from '@stamhoofd/structures';
4
+ import { DataValidator, Formatter, sleep } from '@stamhoofd/utility';
5
+ import htmlToText from 'html-to-text';
2
6
  import nodemailer from 'nodemailer';
3
7
  import Mail from 'nodemailer/lib/mailer';
4
- import { EmailAddress } from '../models/EmailAddress';
5
- import htmlToText from 'html-to-text';
6
- import { sleep } from '@stamhoofd/utility';
7
- import { I18n } from '@stamhoofd/backend-i18n';
8
- import { SimpleError } from '@simonbackx/simple-errors';
9
8
  import { type default as Postmark } from 'postmark';
9
+ import { EmailAddress } from '../models/EmailAddress';
10
10
 
11
11
  // Importing postmark returns undefined (this is a bug, so we need to use require)
12
12
 
@@ -38,7 +38,7 @@ export type EmailInterface = EmailInterfaceBase & {
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
39
  export type EmailBuilder = () => EmailInterface | undefined;
40
40
 
41
- type InternalEmailData = {
41
+ export type InternalEmailData = {
42
42
  from: string;
43
43
  bcc: string | undefined;
44
44
  replyTo: string | undefined;
@@ -62,6 +62,11 @@ class EmailStatic {
62
62
  if (this.transporter) {
63
63
  return;
64
64
  }
65
+
66
+ if (STAMHOOFD.environment === 'test') {
67
+ throw new Error('When using Email in tests, make sure to use EmailMocker.infect() in jest.setup.ts');
68
+ }
69
+
65
70
  if (!STAMHOOFD.SMTP_HOST || !STAMHOOFD.SMTP_PORT) {
66
71
  throw new Error('Missing environment variables to send emails');
67
72
  return;
@@ -130,6 +135,9 @@ class EmailStatic {
130
135
  this.sending = true;
131
136
  this.doSend(next).catch((e) => {
132
137
  console.error(e);
138
+ if (next.callback) {
139
+ next.callback(e);
140
+ }
133
141
  }).finally(() => {
134
142
  this.sending = false;
135
143
  this.sendNextIfNeeded();
@@ -246,7 +254,9 @@ class EmailStatic {
246
254
  return true;
247
255
  }
248
256
 
249
- console.warn('Filtered email to ' + l + ': not whitelisted');
257
+ if (STAMHOOFD.environment === 'production') {
258
+ console.warn('Filtered email ' + l + ': not whitelisted');
259
+ }
250
260
  return false;
251
261
  }
252
262
 
@@ -264,17 +274,25 @@ class EmailStatic {
264
274
  }
265
275
 
266
276
  private async doSend(data: EmailInterface) {
267
- if (STAMHOOFD.environment === 'test') {
268
- // Do not send any emails
269
- return;
270
- }
271
-
272
277
  // Check if this email is not marked as spam
273
278
  // Filter recipients if bounced or spam
274
279
  let recipients = this.parseTo(data.to);
275
280
  if (recipients.length === 0) {
276
281
  // Invalid string
277
- console.warn("Invalid e-mail string: '" + data.to + "'. E-mail skipped");
282
+ console.warn('Invalid e-mail string: ' + JSON.stringify(data.to) + '. E-mail skipped');
283
+
284
+ try {
285
+ data.callback?.(
286
+ new SimpleError({
287
+ code: 'all_filtered',
288
+ message: 'Invalid email address',
289
+ human: 'Ongeldig e-mailadres',
290
+ }),
291
+ );
292
+ }
293
+ catch (e) {
294
+ console.error('Error in email callback', e);
295
+ }
278
296
  return;
279
297
  }
280
298
 
@@ -337,7 +355,7 @@ class EmailStatic {
337
355
 
338
356
  // Clean bcc
339
357
  let bccRecipients: EmailInterfaceRecipient[] = [];
340
- if (data.bcc) {
358
+ if (data.bcc) {
341
359
  // Filter
342
360
  bccRecipients.push(...(await EmailAddress.filterSendTo(this.parseTo(data.bcc))));
343
361
 
@@ -349,16 +367,18 @@ class EmailStatic {
349
367
  }
350
368
 
351
369
  // Rebuild to
352
- const bcc = bccRecipients.length === 0 ? undefined : bccRecipients.map((recipient) => {
353
- if (!recipient.name) {
354
- return recipient.email;
355
- }
356
- const cleanedName = Formatter.emailSenderName(recipient.name);
357
- if (cleanedName.length < 2) {
358
- return recipient.email;
359
- }
360
- return '"' + cleanedName + '" <' + recipient.email + '>';
361
- }).join(', ');
370
+ const bcc = bccRecipients.length === 0
371
+ ? undefined
372
+ : bccRecipients.map((recipient) => {
373
+ if (!recipient.name) {
374
+ return recipient.email;
375
+ }
376
+ const cleanedName = Formatter.emailSenderName(recipient.name);
377
+ if (cleanedName.length < 2) {
378
+ return recipient.email;
379
+ }
380
+ return '"' + cleanedName + '" <' + recipient.email + '>';
381
+ }).join(', ');
362
382
 
363
383
  this.setupIfNeeded();
364
384
 
@@ -437,12 +457,14 @@ class EmailStatic {
437
457
  }
438
458
  }
439
459
  catch (e) {
440
- console.error('Failed to send e-mail:');
441
- console.error(e);
442
- console.error(mail);
460
+ if (STAMHOOFD.environment !== 'test') {
461
+ console.error('Failed to send e-mail:');
462
+ console.error(e);
463
+ console.error(mail);
443
464
 
444
- // Sleep 1 second to give servers some time to fix possible rate limits
445
- await sleep(1000);
465
+ // Sleep 1 second to give servers some time to fix possible rate limits
466
+ await sleep(1000);
467
+ }
446
468
 
447
469
  // Reschedule twice (at maximum) to fix temporary connection issues
448
470
  data.retryCount = (data.retryCount ?? 0) + 1;
@@ -455,14 +477,16 @@ class EmailStatic {
455
477
  }
456
478
  else {
457
479
  try {
458
- data.callback?.(e);
480
+ if (data.callback) {
481
+ data.callback(e);
482
+ }
459
483
  }
460
484
  catch (e2) {
461
485
  console.error('Error in email failure callback', e2, 'for original error', e);
462
486
  }
463
487
 
464
488
  // Email address is not verified.
465
- if (STAMHOOFD.environment !== 'development') {
489
+ if (STAMHOOFD.environment === 'production') {
466
490
  if (data.from !== this.getWebmasterFromEmail()) {
467
491
  this.sendWebmaster({
468
492
  subject: 'E-mail kon niet worden verzonden',
@@ -519,7 +543,7 @@ class EmailStatic {
519
543
  }
520
544
 
521
545
  getWebmasterFromEmail() {
522
- return '"' + (STAMHOOFD.platformName ?? 'Stamhoofd') + ' " <webmaster@' + (new I18n('nl', 'BE').localizedDomains.defaultTransactionalEmail()) + '>';
546
+ return '"' + (STAMHOOFD.platformName ?? 'Stamhoofd') + ' " <webmaster@' + (new I18n('nl', Country.Belgium).localizedDomains.defaultTransactionalEmail()) + '>';
523
547
  }
524
548
 
525
549
  getWebmasterToEmail() {
@@ -538,10 +562,6 @@ class EmailStatic {
538
562
  }
539
563
 
540
564
  send(data: EmailInterface) {
541
- if (STAMHOOFD.environment === 'test') {
542
- // Do not send any emails
543
- return;
544
- }
545
565
  let didSend = false;
546
566
 
547
567
  this.schedule(() => {
@@ -0,0 +1,116 @@
1
+ import { Email, InternalEmailData } from './Email';
2
+ import { TestUtils } from '@stamhoofd/test-utils';
3
+
4
+ type MockedCallback = (data: InternalEmailData) => Promise<void> | void;
5
+ type MockedResponse = { error?: Error | null; callback?: MockedCallback };
6
+
7
+ export class EmailMocker {
8
+ sentEmails: InternalEmailData[] = [];
9
+ failedEmails: InternalEmailData[] = [];
10
+
11
+ responseQueue: MockedResponse[] = [];
12
+ mode: 'transactional' | 'broadcast' = 'transactional';
13
+
14
+ constructor(mode: 'transactional' | 'broadcast' = 'transactional') {
15
+ this.mode = mode;
16
+ }
17
+
18
+ static transactional = new EmailMocker('transactional');
19
+ static broadcast = new EmailMocker('broadcast');
20
+
21
+ static infect() {
22
+ if (STAMHOOFD.environment !== 'test') {
23
+ throw new Error('EmailMocker can only be used in test environment');
24
+ }
25
+
26
+ const handler = async (mocker: EmailMocker, data: InternalEmailData) => {
27
+ const nextHandler = mocker.responseQueue.shift();
28
+
29
+ try {
30
+ if (nextHandler) {
31
+ if (nextHandler.callback) {
32
+ await nextHandler.callback(data);
33
+ }
34
+ if (nextHandler.error) {
35
+ throw nextHandler.error;
36
+ }
37
+ }
38
+ }
39
+ catch (e) {
40
+ mocker.failedEmails.push(data);
41
+ throw e;
42
+ }
43
+
44
+ mocker.sentEmails.push(data);
45
+
46
+ return {
47
+ messageId: 'mocked-' + mocker.sentEmails.length,
48
+ };
49
+ };
50
+
51
+ TestUtils.addBeforeAll(async () => {
52
+ // We load async here because this is a dev dependency (otherwise Node will reach this and complain, breaking the boot)
53
+ const sinon = await import('sinon');
54
+
55
+ sinon.stub(Email, 'setupIfNeeded').callsFake(function (this: typeof Email) {
56
+ this.transporter = {
57
+ sendMail: async (data: InternalEmailData) => {
58
+ return handler(EmailMocker.broadcast, data);
59
+ },
60
+ } as any;
61
+
62
+ this.transactionalTransporter = {
63
+ sendMail: async (data: InternalEmailData) => {
64
+ return handler(EmailMocker.transactional, data);
65
+ },
66
+ } as any;
67
+ });
68
+ });
69
+
70
+ TestUtils.addAfterEach(() => {
71
+ EmailMocker.afterAll();
72
+ });
73
+ }
74
+
75
+ static afterAll() {
76
+ // Clear
77
+ EmailMocker.transactional.reset();
78
+ EmailMocker.broadcast.reset();
79
+ }
80
+
81
+ reset() {
82
+ this.sentEmails = [];
83
+ this.failedEmails = [];
84
+ this.responseQueue = [];
85
+ }
86
+
87
+ // Defining failure / success
88
+ onNext(callback: MockedCallback) {
89
+ this.responseQueue.push({ callback });
90
+ }
91
+
92
+ succeedNext() {
93
+ this.responseQueue.push({});
94
+ }
95
+
96
+ failNext(error: Error) {
97
+ this.responseQueue.push({ error });
98
+ }
99
+
100
+ // Helpers
101
+ getSucceededCount() {
102
+ return this.sentEmails.length;
103
+ }
104
+
105
+ getFailedCount() {
106
+ return this.failedEmails.length;
107
+ }
108
+
109
+ getSucceededEmail(index: number) {
110
+ return this.sentEmails[index];
111
+ }
112
+
113
+ getSucceededEmails() {
114
+ return this.sentEmails;
115
+ }
116
+ }
package/src/index.ts CHANGED
@@ -1,2 +1,3 @@
1
- export * from "./models/EmailAddress"
2
- export * from "./classes/Email"
1
+ export * from './models/EmailAddress';
2
+ export * from './classes/Email';
3
+ export * from './classes/EmailMocker';