@nocobase/plugin-workflow-mailer 2.2.19 → 2.2.21

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.
Files changed (173) hide show
  1. package/dist/externalVersion.js +6 -6
  2. package/dist/node_modules/joi/package.json +1 -1
  3. package/dist/node_modules/nodemailer/dist/cjs/addressparser/index.d.ts +59 -0
  4. package/dist/node_modules/nodemailer/dist/cjs/addressparser/index.js +790 -0
  5. package/dist/node_modules/nodemailer/dist/cjs/base64/index.d.ts +36 -0
  6. package/dist/node_modules/nodemailer/dist/cjs/base64/index.js +119 -0
  7. package/dist/node_modules/nodemailer/dist/cjs/dkim/index.d.ts +52 -0
  8. package/dist/node_modules/nodemailer/dist/cjs/dkim/index.js +228 -0
  9. package/dist/node_modules/nodemailer/dist/cjs/dkim/message-parser.d.ts +48 -0
  10. package/dist/node_modules/nodemailer/dist/cjs/dkim/message-parser.js +180 -0
  11. package/dist/node_modules/nodemailer/dist/cjs/dkim/relaxed-body.d.ts +36 -0
  12. package/dist/node_modules/nodemailer/dist/cjs/dkim/relaxed-body.js +148 -0
  13. package/dist/node_modules/nodemailer/dist/cjs/dkim/sign.d.ts +52 -0
  14. package/dist/node_modules/nodemailer/dist/cjs/dkim/sign.js +165 -0
  15. package/dist/node_modules/nodemailer/dist/cjs/errors.d.ts +96 -0
  16. package/dist/node_modules/nodemailer/dist/cjs/errors.js +70 -0
  17. package/dist/node_modules/nodemailer/dist/cjs/fetch/cookies.d.ts +107 -0
  18. package/dist/node_modules/nodemailer/dist/cjs/fetch/cookies.js +282 -0
  19. package/dist/node_modules/nodemailer/dist/cjs/fetch/index.d.ts +65 -0
  20. package/dist/node_modules/nodemailer/dist/cjs/fetch/index.js +384 -0
  21. package/dist/node_modules/nodemailer/dist/cjs/json-transport/index.d.ts +64 -0
  22. package/dist/node_modules/nodemailer/dist/cjs/json-transport/index.js +99 -0
  23. package/dist/node_modules/nodemailer/dist/cjs/mail-composer/index.d.ts +174 -0
  24. package/dist/node_modules/nodemailer/dist/cjs/mail-composer/index.js +613 -0
  25. package/dist/node_modules/nodemailer/dist/cjs/mailer/index.d.ts +237 -0
  26. package/dist/node_modules/nodemailer/dist/cjs/mailer/index.js +415 -0
  27. package/dist/node_modules/nodemailer/dist/cjs/mailer/mail-message.d.ts +97 -0
  28. package/dist/node_modules/nodemailer/dist/cjs/mailer/mail-message.js +342 -0
  29. package/dist/node_modules/nodemailer/dist/cjs/mime-funcs/index.d.ts +161 -0
  30. package/dist/node_modules/nodemailer/dist/cjs/mime-funcs/index.js +787 -0
  31. package/dist/node_modules/nodemailer/dist/cjs/mime-funcs/mime-types.d.ts +2 -0
  32. package/dist/node_modules/nodemailer/dist/cjs/mime-funcs/mime-types.js +2103 -0
  33. package/dist/node_modules/nodemailer/dist/cjs/mime-node/index.d.ts +333 -0
  34. package/dist/node_modules/nodemailer/dist/cjs/mime-node/index.js +1493 -0
  35. package/dist/node_modules/nodemailer/dist/cjs/mime-node/last-newline.d.ts +5 -0
  36. package/dist/node_modules/nodemailer/dist/cjs/mime-node/last-newline.js +32 -0
  37. package/dist/node_modules/nodemailer/dist/cjs/mime-node/le-unix.d.ts +9 -0
  38. package/dist/node_modules/nodemailer/dist/cjs/mime-node/le-unix.js +40 -0
  39. package/dist/node_modules/nodemailer/dist/cjs/mime-node/le-windows.d.ts +10 -0
  40. package/dist/node_modules/nodemailer/dist/cjs/mime-node/le-windows.js +47 -0
  41. package/dist/node_modules/nodemailer/dist/cjs/nodemailer.d.ts +124 -0
  42. package/dist/node_modules/nodemailer/dist/cjs/nodemailer.js +1 -0
  43. package/dist/node_modules/nodemailer/dist/cjs/package-info.d.ts +3 -0
  44. package/dist/node_modules/nodemailer/dist/cjs/package-info.js +7 -0
  45. package/dist/node_modules/nodemailer/dist/cjs/package.json +3 -0
  46. package/dist/node_modules/nodemailer/dist/cjs/punycode/index.d.ts +73 -0
  47. package/dist/node_modules/nodemailer/{lib → dist/cjs}/punycode/index.js +62 -111
  48. package/dist/node_modules/nodemailer/dist/cjs/qp/index.d.ts +32 -0
  49. package/dist/node_modules/nodemailer/dist/cjs/qp/index.js +207 -0
  50. package/dist/node_modules/nodemailer/dist/cjs/sendmail-transport/index.d.ts +69 -0
  51. package/dist/node_modules/nodemailer/dist/cjs/sendmail-transport/index.js +210 -0
  52. package/dist/node_modules/nodemailer/dist/cjs/ses-transport/index.d.ts +112 -0
  53. package/dist/node_modules/nodemailer/dist/cjs/ses-transport/index.js +252 -0
  54. package/dist/node_modules/nodemailer/dist/cjs/shared/index.d.ts +260 -0
  55. package/dist/node_modules/nodemailer/dist/cjs/shared/index.js +680 -0
  56. package/dist/node_modules/nodemailer/dist/cjs/shared/objects.d.ts +23 -0
  57. package/dist/node_modules/nodemailer/dist/cjs/shared/objects.js +43 -0
  58. package/dist/node_modules/nodemailer/dist/cjs/shared/url.d.ts +21 -0
  59. package/dist/node_modules/nodemailer/dist/cjs/shared/url.js +255 -0
  60. package/dist/node_modules/nodemailer/dist/cjs/smtp-connection/data-stream.d.ts +15 -0
  61. package/dist/node_modules/nodemailer/dist/cjs/smtp-connection/data-stream.js +108 -0
  62. package/dist/node_modules/nodemailer/dist/cjs/smtp-connection/http-proxy-client.d.ts +47 -0
  63. package/dist/node_modules/nodemailer/dist/cjs/smtp-connection/http-proxy-client.js +189 -0
  64. package/dist/node_modules/nodemailer/dist/cjs/smtp-connection/index.d.ts +416 -0
  65. package/dist/node_modules/nodemailer/dist/cjs/smtp-connection/index.js +1837 -0
  66. package/dist/node_modules/nodemailer/dist/cjs/smtp-pool/index.d.ts +133 -0
  67. package/dist/node_modules/nodemailer/dist/cjs/smtp-pool/index.js +569 -0
  68. package/dist/node_modules/nodemailer/dist/cjs/smtp-pool/pool-resource.d.ts +62 -0
  69. package/dist/node_modules/nodemailer/dist/cjs/smtp-pool/pool-resource.js +257 -0
  70. package/dist/node_modules/nodemailer/dist/cjs/smtp-transport/index.d.ts +156 -0
  71. package/dist/node_modules/nodemailer/dist/cjs/smtp-transport/index.js +371 -0
  72. package/dist/node_modules/nodemailer/dist/cjs/stream-transport/index.d.ts +65 -0
  73. package/dist/node_modules/nodemailer/dist/cjs/stream-transport/index.js +146 -0
  74. package/dist/node_modules/nodemailer/dist/cjs/well-known/index.d.ts +35 -0
  75. package/dist/node_modules/nodemailer/dist/cjs/well-known/index.js +41 -0
  76. package/dist/node_modules/nodemailer/dist/cjs/well-known/services.d.ts +2 -0
  77. package/dist/node_modules/nodemailer/dist/cjs/well-known/services.js +674 -0
  78. package/dist/node_modules/nodemailer/dist/cjs/xoauth2/index.d.ts +201 -0
  79. package/dist/node_modules/nodemailer/dist/cjs/xoauth2/index.js +426 -0
  80. package/dist/node_modules/nodemailer/dist/esm/addressparser/index.d.ts +59 -0
  81. package/dist/node_modules/nodemailer/{lib → dist/esm}/addressparser/index.js +361 -131
  82. package/dist/node_modules/nodemailer/dist/esm/base64/index.d.ts +36 -0
  83. package/dist/node_modules/nodemailer/{lib → dist/esm}/base64/index.js +31 -56
  84. package/dist/node_modules/nodemailer/dist/esm/dkim/index.d.ts +52 -0
  85. package/dist/node_modules/nodemailer/{lib → dist/esm}/dkim/index.js +49 -78
  86. package/dist/node_modules/nodemailer/dist/esm/dkim/message-parser.d.ts +48 -0
  87. package/dist/node_modules/nodemailer/{lib → dist/esm}/dkim/message-parser.js +64 -42
  88. package/dist/node_modules/nodemailer/dist/esm/dkim/relaxed-body.d.ts +36 -0
  89. package/dist/node_modules/nodemailer/dist/esm/dkim/relaxed-body.js +141 -0
  90. package/dist/node_modules/nodemailer/dist/esm/dkim/sign.d.ts +52 -0
  91. package/dist/node_modules/nodemailer/{lib → dist/esm}/dkim/sign.js +50 -46
  92. package/dist/node_modules/nodemailer/dist/esm/errors.d.ts +96 -0
  93. package/dist/node_modules/nodemailer/{lib → dist/esm}/errors.js +26 -18
  94. package/dist/node_modules/nodemailer/dist/esm/fetch/cookies.d.ts +107 -0
  95. package/dist/node_modules/nodemailer/dist/esm/fetch/cookies.js +242 -0
  96. package/dist/node_modules/nodemailer/dist/esm/fetch/index.d.ts +65 -0
  97. package/dist/node_modules/nodemailer/{lib → dist/esm}/fetch/index.js +80 -147
  98. package/dist/node_modules/nodemailer/dist/esm/json-transport/index.d.ts +64 -0
  99. package/dist/node_modules/nodemailer/{lib → dist/esm}/json-transport/index.js +19 -39
  100. package/dist/node_modules/nodemailer/dist/esm/mail-composer/index.d.ts +174 -0
  101. package/dist/node_modules/nodemailer/{lib → dist/esm}/mail-composer/index.js +199 -265
  102. package/dist/node_modules/nodemailer/dist/esm/mailer/index.d.ts +237 -0
  103. package/dist/node_modules/nodemailer/{lib → dist/esm}/mailer/index.js +128 -234
  104. package/dist/node_modules/nodemailer/dist/esm/mailer/mail-message.d.ts +97 -0
  105. package/dist/node_modules/nodemailer/{lib → dist/esm}/mailer/mail-message.js +62 -114
  106. package/dist/node_modules/nodemailer/dist/esm/mime-funcs/index.d.ts +161 -0
  107. package/dist/node_modules/nodemailer/dist/esm/mime-funcs/index.js +738 -0
  108. package/dist/node_modules/nodemailer/dist/esm/mime-funcs/mime-types.d.ts +2 -0
  109. package/dist/node_modules/nodemailer/{lib → dist/esm}/mime-funcs/mime-types.js +29 -42
  110. package/dist/node_modules/nodemailer/dist/esm/mime-node/index.d.ts +333 -0
  111. package/dist/node_modules/nodemailer/{lib → dist/esm}/mime-node/index.js +259 -372
  112. package/dist/node_modules/nodemailer/dist/esm/mime-node/last-newline.d.ts +5 -0
  113. package/dist/node_modules/nodemailer/{lib → dist/esm}/mime-node/last-newline.js +4 -10
  114. package/dist/node_modules/nodemailer/dist/esm/mime-node/le-unix.d.ts +9 -0
  115. package/dist/node_modules/nodemailer/{lib → dist/esm}/mime-node/le-unix.js +6 -11
  116. package/dist/node_modules/nodemailer/dist/esm/mime-node/le-windows.d.ts +10 -0
  117. package/dist/node_modules/nodemailer/{lib → dist/esm}/mime-node/le-windows.js +6 -13
  118. package/dist/node_modules/nodemailer/dist/esm/nodemailer.d.ts +124 -0
  119. package/dist/node_modules/nodemailer/dist/esm/nodemailer.js +166 -0
  120. package/dist/node_modules/nodemailer/dist/esm/package-info.d.ts +3 -0
  121. package/dist/node_modules/nodemailer/dist/esm/package-info.js +4 -0
  122. package/dist/node_modules/nodemailer/dist/esm/package.json +3 -0
  123. package/dist/node_modules/nodemailer/dist/esm/punycode/index.d.ts +73 -0
  124. package/dist/node_modules/nodemailer/dist/esm/punycode/index.js +405 -0
  125. package/dist/node_modules/nodemailer/dist/esm/qp/index.d.ts +32 -0
  126. package/dist/node_modules/nodemailer/{lib → dist/esm}/qp/index.js +38 -67
  127. package/dist/node_modules/nodemailer/dist/esm/sendmail-transport/index.d.ts +69 -0
  128. package/dist/node_modules/nodemailer/{lib → dist/esm}/sendmail-transport/index.js +51 -101
  129. package/dist/node_modules/nodemailer/dist/esm/ses-transport/index.d.ts +112 -0
  130. package/dist/node_modules/nodemailer/dist/esm/ses-transport/index.js +212 -0
  131. package/dist/node_modules/nodemailer/dist/esm/shared/index.d.ts +260 -0
  132. package/dist/node_modules/nodemailer/{lib → dist/esm}/shared/index.js +156 -272
  133. package/dist/node_modules/nodemailer/dist/esm/shared/objects.d.ts +23 -0
  134. package/dist/node_modules/nodemailer/{lib → dist/esm}/shared/objects.js +13 -17
  135. package/dist/node_modules/nodemailer/dist/esm/shared/url.d.ts +21 -0
  136. package/dist/node_modules/nodemailer/dist/esm/shared/url.js +214 -0
  137. package/dist/node_modules/nodemailer/dist/esm/smtp-connection/data-stream.d.ts +15 -0
  138. package/dist/node_modules/nodemailer/dist/esm/smtp-connection/data-stream.js +103 -0
  139. package/dist/node_modules/nodemailer/dist/esm/smtp-connection/http-proxy-client.d.ts +47 -0
  140. package/dist/node_modules/nodemailer/{lib → dist/esm}/smtp-connection/http-proxy-client.js +49 -74
  141. package/dist/node_modules/nodemailer/dist/esm/smtp-connection/index.d.ts +416 -0
  142. package/dist/node_modules/nodemailer/{lib → dist/esm}/smtp-connection/index.js +574 -794
  143. package/dist/node_modules/nodemailer/dist/esm/smtp-pool/index.d.ts +133 -0
  144. package/dist/node_modules/nodemailer/{lib → dist/esm}/smtp-pool/index.js +172 -284
  145. package/dist/node_modules/nodemailer/dist/esm/smtp-pool/pool-resource.d.ts +62 -0
  146. package/dist/node_modules/nodemailer/{lib → dist/esm}/smtp-pool/pool-resource.js +57 -97
  147. package/dist/node_modules/nodemailer/dist/esm/smtp-transport/index.d.ts +156 -0
  148. package/dist/node_modules/nodemailer/{lib → dist/esm}/smtp-transport/index.js +81 -179
  149. package/dist/node_modules/nodemailer/dist/esm/stream-transport/index.d.ts +65 -0
  150. package/dist/node_modules/nodemailer/{lib → dist/esm}/stream-transport/index.js +36 -74
  151. package/dist/node_modules/nodemailer/dist/esm/well-known/index.d.ts +35 -0
  152. package/dist/node_modules/nodemailer/{lib → dist/esm}/well-known/index.js +5 -16
  153. package/dist/node_modules/nodemailer/dist/esm/well-known/services.d.ts +2 -0
  154. package/dist/node_modules/nodemailer/dist/esm/well-known/services.js +671 -0
  155. package/dist/node_modules/nodemailer/dist/esm/xoauth2/index.d.ts +201 -0
  156. package/dist/node_modules/nodemailer/{lib → dist/esm}/xoauth2/index.js +125 -187
  157. package/dist/node_modules/nodemailer/{lib → dist}/well-known/services.json +9 -2
  158. package/dist/node_modules/nodemailer/package.json +1 -1
  159. package/package.json +3 -3
  160. package/dist/node_modules/nodemailer/.gitattributes +0 -6
  161. package/dist/node_modules/nodemailer/.ncurc.js +0 -9
  162. package/dist/node_modules/nodemailer/.prettierignore +0 -8
  163. package/dist/node_modules/nodemailer/.prettierrc +0 -12
  164. package/dist/node_modules/nodemailer/.prettierrc.js +0 -10
  165. package/dist/node_modules/nodemailer/.release-please-config.json +0 -9
  166. package/dist/node_modules/nodemailer/eslint.config.js +0 -88
  167. package/dist/node_modules/nodemailer/lib/dkim/relaxed-body.js +0 -154
  168. package/dist/node_modules/nodemailer/lib/fetch/cookies.js +0 -276
  169. package/dist/node_modules/nodemailer/lib/mime-funcs/index.js +0 -671
  170. package/dist/node_modules/nodemailer/lib/nodemailer.js +0 -1
  171. package/dist/node_modules/nodemailer/lib/ses-transport/index.js +0 -266
  172. package/dist/node_modules/nodemailer/lib/shared/url.js +0 -151
  173. package/dist/node_modules/nodemailer/lib/smtp-connection/data-stream.js +0 -105
@@ -1,107 +1,77 @@
1
- 'use strict';
2
-
3
- const EventEmitter = require('events');
4
- const shared = require('../shared');
5
- const mimeTypes = require('../mime-funcs/mime-types');
6
- const MailComposer = require('../mail-composer');
7
- const DKIM = require('../dkim');
8
- const httpProxyClient = require('../smtp-connection/http-proxy-client');
9
- const errors = require('../errors');
10
- const util = require('util');
11
- const urllib = require('../shared/url');
12
- const packageData = require('../../package.json');
13
- const MailMessage = require('./mail-message');
14
- const net = require('net');
15
- const dns = require('dns');
16
- const crypto = require('crypto');
17
-
1
+ import { EventEmitter } from 'node:events';
2
+ import * as shared from '../shared/index.js';
3
+ import * as mimeTypes from '../mime-funcs/mime-types.js';
4
+ import MailComposer from '../mail-composer/index.js';
5
+ import DKIM from '../dkim/index.js';
6
+ import httpProxyClient from '../smtp-connection/http-proxy-client.js';
7
+ import * as errors from '../errors.js';
8
+ import util from 'node:util';
9
+ import * as urllib from '../shared/url.js';
10
+ import * as packageData from '../package-info.js';
11
+ import MailMessage from './mail-message.js';
12
+ import net from 'node:net';
13
+ import dns from 'node:dns';
14
+ import crypto from 'node:crypto';
18
15
  /**
19
16
  * Recipients allowed on one message unless the caller sets its own maxRecipients. A backstop
20
17
  * against a runaway or hostile recipient list rather than a delivery policy: RFC 5321 only
21
18
  * asks a server to accept 100, so a real send is bounded far below this.
22
19
  */
23
20
  const DEFAULT_MAX_RECIPIENTS = 100000;
24
-
25
21
  /**
26
22
  * Creates an object for exposing the Mail API
27
23
  *
28
24
  * @constructor
29
- * @param {Object} transporter Transport object instance to pass the mails to
25
+ * @param transporter Transport object instance to pass the mails to
30
26
  */
31
27
  class Mail extends EventEmitter {
32
28
  constructor(transporter, options, defaults) {
33
29
  super();
34
-
35
30
  this.options = options || {};
36
31
  this._defaults = defaults || {};
37
-
38
32
  this._defaultPlugins = {
39
33
  compile: [(...args) => this._convertDataImages(...args)],
40
34
  stream: []
41
35
  };
42
-
43
36
  this._userPlugins = {
44
37
  compile: [],
45
38
  stream: []
46
39
  };
47
-
48
40
  this.meta = new Map();
49
-
50
41
  this.dkim = this.options.dkim ? new DKIM(this.options.dkim) : false;
51
-
52
42
  this.transporter = transporter;
53
43
  this.transporter.mailer = this;
54
-
55
44
  this.logger = shared.getLogger(this.options, {
56
45
  component: this.options.component || 'mail'
57
46
  });
58
-
59
- this.logger.debug(
60
- {
61
- tnx: 'create'
62
- },
63
- 'Creating transport: %s',
64
- this.getVersionString()
65
- );
66
-
47
+ this.logger.debug({
48
+ tnx: 'create'
49
+ }, 'Creating transport: %s', this.getVersionString());
67
50
  // setup emit handlers for the transporter
68
51
  if (typeof this.transporter.on === 'function') {
69
52
  // deprecated log interface
70
53
  this.transporter.on('log', log => {
71
- this.logger.debug(
72
- {
73
- tnx: 'transport'
74
- },
75
- '%s: %s',
76
- log.type,
77
- log.message
78
- );
54
+ this.logger.debug({
55
+ tnx: 'transport'
56
+ }, '%s: %s', log.type, log.message);
79
57
  });
80
-
81
58
  // transporter errors
82
59
  this.transporter.on('error', err => {
83
- this.logger.error(
84
- {
85
- err,
86
- tnx: 'transport'
87
- },
88
- 'Transport Error: %s',
89
- err.message
90
- );
60
+ this.logger.error({
61
+ err,
62
+ tnx: 'transport'
63
+ }, 'Transport Error: %s', err.message);
91
64
  this.emit('error', err);
92
65
  });
93
-
94
66
  // indicates if the sender has became idle
95
67
  this.transporter.on('idle', (...args) => {
96
68
  this.emit('idle', ...args);
97
69
  });
98
-
99
70
  // indicates if the sender has became idle and all connections are terminated
100
71
  this.transporter.on('clear', (...args) => {
101
72
  this.emit('clear', ...args);
102
73
  });
103
74
  }
104
-
105
75
  /**
106
76
  * Optional methods passed to the underlying transport object
107
77
  */
@@ -114,198 +84,139 @@ class Mail extends EventEmitter {
114
84
  }
115
85
  return this.transporter[method](...args);
116
86
  }
117
-
118
- this.logger.warn(
119
- {
120
- tnx: 'transport',
121
- methodName: method
122
- },
123
- 'Non existing method %s called for transport',
124
- method
125
- );
87
+ this.logger.warn({
88
+ tnx: 'transport',
89
+ methodName: method
90
+ }, 'Non existing method %s called for transport', method);
126
91
  return false;
127
92
  };
128
93
  });
129
-
130
94
  // setup proxy handling
131
95
  if (this.options.proxy && typeof this.options.proxy === 'string') {
132
96
  this.setupProxy(this.options.proxy);
133
97
  }
134
98
  }
135
-
136
99
  use(step, plugin) {
137
100
  step = (step || '').toString();
138
101
  if (!this._userPlugins.hasOwnProperty(step)) {
139
102
  this._userPlugins[step] = [plugin];
140
- } else {
103
+ }
104
+ else {
141
105
  this._userPlugins[step].push(plugin);
142
106
  }
143
-
144
107
  return this;
145
108
  }
146
-
147
- /**
148
- * Sends an email using the preselected transport object
149
- *
150
- * @param {Object} data E-data description
151
- * @param {Function?} callback Callback to run once the sending succeeded or failed
152
- */
153
109
  sendMail(data, callback = null) {
154
110
  let promise;
155
-
156
111
  if (!callback) {
157
112
  promise = new Promise((resolve, reject) => {
158
113
  callback = shared.callbackPromise(resolve, reject);
159
114
  });
160
115
  }
161
-
116
+ const done = callback;
162
117
  if (typeof this.getSocket === 'function') {
163
118
  this.transporter.getSocket = this.getSocket;
164
119
  this.getSocket = false;
165
120
  }
166
-
167
121
  const mail = new MailMessage(this, data);
168
-
169
- this.logger.debug(
170
- {
171
- tnx: 'transport',
172
- name: this.transporter.name,
173
- version: this.transporter.version,
174
- action: 'send'
175
- },
176
- 'Sending mail using %s/%s',
177
- this.transporter.name,
178
- this.transporter.version
179
- );
180
-
122
+ this.logger.debug({
123
+ tnx: 'transport',
124
+ name: this.transporter.name,
125
+ version: this.transporter.version,
126
+ action: 'send'
127
+ }, 'Sending mail using %s/%s', this.transporter.name, this.transporter.version);
181
128
  this._processPlugins('compile', mail, err => {
182
129
  if (err) {
183
- this.logger.error(
184
- {
185
- err,
186
- tnx: 'plugin',
187
- action: 'compile'
188
- },
189
- 'PluginCompile Error: %s',
190
- err.message
191
- );
192
- return callback(err);
130
+ this.logger.error({
131
+ err,
132
+ tnx: 'plugin',
133
+ action: 'compile'
134
+ }, 'PluginCompile Error: %s', err.message);
135
+ return done(err);
136
+ }
137
+ let recipientCount;
138
+ try {
139
+ mail.message = new MailComposer(mail.data).compile();
140
+ mail.setMailerHeader();
141
+ mail.setPriorityHeaders();
142
+ mail.setListHeaders();
143
+ recipientCount = mail.message.getEnvelope().to.length;
144
+ }
145
+ catch (err) {
146
+ // message data can throw while it is compiled, the error belongs to the callback
147
+ this.logger.error({
148
+ err,
149
+ tnx: 'transport',
150
+ action: 'send'
151
+ }, 'Compile Error: %s', err.message);
152
+ return done(err);
193
153
  }
194
-
195
- mail.message = new MailComposer(mail.data).compile();
196
-
197
- mail.setMailerHeader();
198
- mail.setPriorityHeaders();
199
- mail.setListHeaders();
200
-
201
154
  const maxRecipients = mail.data.maxRecipients === undefined ? DEFAULT_MAX_RECIPIENTS : mail.data.maxRecipients;
202
- const recipientCount = mail.message.getEnvelope().to.length;
203
-
204
155
  if (maxRecipients && recipientCount > maxRecipients) {
205
- const err = new Error(
206
- `Message has ${recipientCount} recipients, which is over the ${maxRecipients} allowed by maxRecipients`
207
- );
156
+ const err = new Error(`Message has ${recipientCount} recipients, which is over the ${maxRecipients} allowed by maxRecipients`);
208
157
  err.code = errors.EMAXRECIPIENTS;
209
- this.logger.error(
210
- {
211
- err,
212
- tnx: 'transport',
213
- action: 'send'
214
- },
215
- 'Send Error: %s',
216
- err.message
217
- );
218
- return callback(err);
158
+ this.logger.error({
159
+ err,
160
+ tnx: 'transport',
161
+ action: 'send'
162
+ }, 'Send Error: %s', err.message);
163
+ return done(err);
219
164
  }
220
-
221
165
  this._processPlugins('stream', mail, err => {
222
166
  if (err) {
223
- this.logger.error(
224
- {
225
- err,
226
- tnx: 'plugin',
227
- action: 'stream'
228
- },
229
- 'PluginStream Error: %s',
230
- err.message
231
- );
232
- return callback(err);
167
+ this.logger.error({
168
+ err,
169
+ tnx: 'plugin',
170
+ action: 'stream'
171
+ }, 'PluginStream Error: %s', err.message);
172
+ return done(err);
233
173
  }
234
-
235
174
  if (mail.data.dkim || this.dkim) {
236
175
  mail.message.processFunc(input => {
237
176
  const dkim = mail.data.dkim ? new DKIM(mail.data.dkim) : this.dkim;
238
- this.logger.debug(
239
- {
240
- tnx: 'DKIM',
241
- messageId: mail.message.messageId(),
242
- dkimDomains: dkim.keys.map(key => key.keySelector + '.' + key.domainName).join(', ')
243
- },
244
- 'Signing outgoing message with %s keys',
245
- dkim.keys.length
246
- );
177
+ this.logger.debug({
178
+ tnx: 'DKIM',
179
+ messageId: mail.message.messageId(),
180
+ dkimDomains: dkim.keys.map(key => key.keySelector + '.' + key.domainName).join(', ')
181
+ }, 'Signing outgoing message with %s keys', dkim.keys.length);
247
182
  return dkim.sign(input, mail.data._dkim);
248
183
  });
249
184
  }
250
-
251
185
  this.transporter.send(mail, (...args) => {
252
186
  if (args[0]) {
253
- this.logger.error(
254
- {
255
- err: args[0],
256
- tnx: 'transport',
257
- action: 'send'
258
- },
259
- 'Send Error: %s',
260
- args[0].message
261
- );
187
+ this.logger.error({
188
+ err: args[0],
189
+ tnx: 'transport',
190
+ action: 'send'
191
+ }, 'Send Error: %s', args[0].message);
262
192
  }
263
- callback(...args);
193
+ done(...args);
264
194
  });
265
195
  });
266
196
  });
267
-
268
197
  return promise;
269
198
  }
270
-
271
199
  getVersionString() {
272
- return util.format(
273
- '%s (%s; +%s; %s/%s)',
274
- packageData.name,
275
- packageData.version,
276
- packageData.homepage,
277
- this.transporter.name,
278
- this.transporter.version
279
- );
200
+ return util.format('%s (%s; +%s; %s/%s)', packageData.name, packageData.version, packageData.homepage, this.transporter.name, this.transporter.version);
280
201
  }
281
-
202
+ /** @internal */
282
203
  _processPlugins(step, mail, callback) {
283
204
  step = (step || '').toString();
284
-
285
205
  if (!this._userPlugins.hasOwnProperty(step)) {
286
206
  return callback();
287
207
  }
288
-
289
208
  const userPlugins = this._userPlugins[step] || [];
290
209
  const defaultPlugins = this._defaultPlugins[step] || [];
291
-
292
210
  if (userPlugins.length) {
293
- this.logger.debug(
294
- {
295
- tnx: 'transaction',
296
- pluginCount: userPlugins.length,
297
- step
298
- },
299
- 'Using %s plugins for %s',
300
- userPlugins.length,
211
+ this.logger.debug({
212
+ tnx: 'transaction',
213
+ pluginCount: userPlugins.length,
301
214
  step
302
- );
215
+ }, 'Using %s plugins for %s', userPlugins.length, step);
303
216
  }
304
-
305
217
  if (userPlugins.length + defaultPlugins.length === 0) {
306
218
  return callback();
307
219
  }
308
-
309
220
  let pos = 0;
310
221
  let block = 'default';
311
222
  const processPlugins = () => {
@@ -315,7 +226,8 @@ class Mail extends EventEmitter {
315
226
  block = 'user';
316
227
  pos = 0;
317
228
  curplugins = userPlugins;
318
- } else {
229
+ }
230
+ else {
319
231
  return callback();
320
232
  }
321
233
  }
@@ -327,26 +239,21 @@ class Mail extends EventEmitter {
327
239
  processPlugins();
328
240
  });
329
241
  };
330
-
331
242
  processPlugins();
332
243
  }
333
-
334
244
  /**
335
245
  * Sets up proxy handler for a Nodemailer object
336
246
  *
337
- * @param {String} proxyUrl Proxy configuration url
247
+ * @param proxyUrl Proxy configuration url
338
248
  */
339
249
  setupProxy(proxyUrl) {
340
250
  const proxy = urllib.parse(proxyUrl);
341
-
342
251
  // setup socket handler for the mailer object
343
252
  this.getSocket = (options, callback) => {
344
253
  const protocol = proxy.protocol.replace(/:$/, '').toLowerCase();
345
-
346
254
  if (this.meta.has('proxy_handler_' + protocol)) {
347
255
  return this.meta.get('proxy_handler_' + protocol)(proxy, options, callback);
348
256
  }
349
-
350
257
  switch (protocol) {
351
258
  // Connect using a HTTP CONNECT method
352
259
  case 'http':
@@ -369,7 +276,7 @@ class Mail extends EventEmitter {
369
276
  err.code = errors.EPROXY;
370
277
  return callback(err);
371
278
  }
372
- const connect = ipaddress => {
279
+ const connect = (ipaddress) => {
373
280
  const proxyV2 = !!this.meta.get('proxy_socks_module').SocksClient;
374
281
  const socksClient = proxyV2 ? this.meta.get('proxy_socks_module').SocksClient : this.meta.get('proxy_socks_module');
375
282
  const proxyType = Number(proxy.protocol.replace(/\D/g, '')) || 5;
@@ -385,23 +292,23 @@ class Mail extends EventEmitter {
385
292
  },
386
293
  command: 'connect'
387
294
  };
388
-
389
- if (proxy.auth) {
390
- const username = decodeURIComponent(proxy.auth.split(':').shift());
391
- const password = decodeURIComponent(proxy.auth.split(':').pop());
295
+ if (proxy.username || proxy.password) {
296
+ const username = proxy.username || '';
297
+ const password = proxy.password || '';
392
298
  if (proxyV2) {
393
299
  connectionOpts.proxy.userId = username;
394
300
  connectionOpts.proxy.password = password;
395
- } else if (proxyType === 4) {
301
+ }
302
+ else if (proxyType === 4) {
396
303
  connectionOpts.userid = username;
397
- } else {
304
+ }
305
+ else {
398
306
  connectionOpts.authentication = {
399
307
  username,
400
308
  password
401
309
  };
402
310
  }
403
311
  }
404
-
405
312
  socksClient.createConnection(connectionOpts, (err, info) => {
406
313
  if (err) {
407
314
  return callback(err);
@@ -411,11 +318,9 @@ class Mail extends EventEmitter {
411
318
  });
412
319
  });
413
320
  };
414
-
415
321
  if (net.isIP(proxy.hostname)) {
416
322
  return connect(proxy.hostname);
417
323
  }
418
-
419
324
  return dns.resolve(proxy.hostname, (err, address) => {
420
325
  if (err) {
421
326
  return callback(err);
@@ -429,53 +334,42 @@ class Mail extends EventEmitter {
429
334
  callback(err);
430
335
  };
431
336
  }
432
-
337
+ /** @internal */
433
338
  _convertDataImages(mail, callback) {
434
339
  if ((!this.options.attachDataUrls && !mail.data.attachDataUrls) || !mail.data.html) {
435
340
  return callback();
436
341
  }
437
- mail.resolveContent(
438
- mail.data,
439
- 'html',
440
- { disableFileAccess: mail.data.disableFileAccess, disableUrlAccess: mail.data.disableUrlAccess },
441
- (err, html) => {
442
- if (err) {
443
- return callback(err);
444
- }
445
- let cidCounter = 0;
446
- html = (html || '')
447
- .toString()
448
- .replace(
449
- /(<img\b[^<>]{0,1024} src\s{0,20}=[\s"']{0,20})(data:([^;]+);[^"'>\s]+)/gi,
450
- (match, prefix, dataUri, mimeType) => {
451
- const cid = crypto.randomBytes(10).toString('hex') + '@localhost';
452
- if (!mail.data.attachments) {
453
- mail.data.attachments = [];
454
- }
455
- if (!Array.isArray(mail.data.attachments)) {
456
- mail.data.attachments = [].concat(mail.data.attachments || []);
457
- }
458
- mail.data.attachments.push({
459
- path: dataUri,
460
- cid,
461
- filename: 'image-' + ++cidCounter + '.' + mimeTypes.detectExtension(mimeType)
462
- });
463
- return prefix + 'cid:' + cid;
464
- }
465
- );
466
- mail.data.html = html;
467
- callback();
342
+ mail.resolveContent(mail.data, 'html', { disableFileAccess: mail.data.disableFileAccess, disableUrlAccess: mail.data.disableUrlAccess }, (err, html) => {
343
+ if (err) {
344
+ return callback(err);
468
345
  }
469
- );
346
+ let cidCounter = 0;
347
+ html = (html || '')
348
+ .toString()
349
+ .replace(/(<img\b[^<>]{0,1024} src\s{0,20}=[\s"']{0,20})(data:([^;]+);[^"'>\s]+)/gi, (match, prefix, dataUri, mimeType) => {
350
+ const cid = crypto.randomBytes(10).toString('hex') + '@localhost';
351
+ if (!mail.data.attachments) {
352
+ mail.data.attachments = [];
353
+ }
354
+ if (!Array.isArray(mail.data.attachments)) {
355
+ mail.data.attachments = [].concat(mail.data.attachments || []);
356
+ }
357
+ mail.data.attachments.push({
358
+ path: dataUri,
359
+ cid,
360
+ filename: 'image-' + ++cidCounter + '.' + mimeTypes.detectExtension(mimeType)
361
+ });
362
+ return prefix + 'cid:' + cid;
363
+ });
364
+ mail.data.html = html;
365
+ callback();
366
+ });
470
367
  }
471
-
472
368
  set(key, value) {
473
369
  return this.meta.set(key, value);
474
370
  }
475
-
476
371
  get(key) {
477
372
  return this.meta.get(key);
478
373
  }
479
374
  }
480
-
481
- module.exports = Mail;
375
+ export default Mail;
@@ -0,0 +1,97 @@
1
+ import MimeNode, { type MimeNodePreparedHeaderValue } from '../mime-node/index.js';
2
+ import type { MailComposerOptions } from '../mail-composer/index.js';
3
+ import type { DKIMOptions } from '../dkim/index.js';
4
+ import type { SMTPEnvelopeDsn } from '../smtp-connection/index.js';
5
+ import type { SMTPTransportAuthOptions } from '../smtp-transport/index.js';
6
+ import type { SESSendEmailRequest } from '../ses-transport/index.js';
7
+ import type { NodemailerError } from '../errors.js';
8
+ import type { ResolveContentOptions } from '../shared/index.js';
9
+ import type Mail from './index.js';
10
+ import type { SentMessageInfo } from './index.js';
11
+ /**
12
+ * The message data accepted by sendMail. MailComposerOptions describes the fields the MIME
13
+ * tree is built from, the fields below are the ones the mailer reads on top of those
14
+ */
15
+ export interface SendMailOptions extends MailComposerOptions {
16
+ /** DKIM signing options for this message, used instead of the ones of the transporter */
17
+ dkim?: DKIMOptions | undefined;
18
+ /** Extra DKIM options for this message, merged over the options of the signer. The SES transport sets skipFields here, the option is not meant for callers */
19
+ _dkim?: DKIMOptions | undefined;
20
+ /** Recipients allowed on this message, 0 disables the limit, defaults to 100000 */
21
+ maxRecipients?: number | undefined;
22
+ /** SMTP transports: DSN parameters for the envelope, sent when the server supports the DSN extension */
23
+ dsn?: SMTPEnvelopeDsn | undefined;
24
+ /** SMTP transports: RFC 8689, send the REQUIRETLS parameter with MAIL FROM */
25
+ requireTLSExtensionEnabled?: boolean | undefined;
26
+ /** SMTP transports: per-message authentication settings, used instead of the transport level auth */
27
+ auth?: SMTPTransportAuthOptions | undefined;
28
+ /** SES transport: extra SendEmailCommand parameters merged into the API call */
29
+ ses?: SESSendEmailRequest | undefined;
30
+ }
31
+ /**
32
+ * Default message fields, the third argument of createTransport. Applied to every message
33
+ * for the fields the message does not set itself, the headers are merged one by one
34
+ */
35
+ export type MailDefaults = SendMailOptions;
36
+ /**
37
+ * The message data as held by a MailMessage: the options the caller passed to sendMail with
38
+ * the transporter defaults applied. resolveAll rewrites the content and address fields in
39
+ * place and normalize adds the envelope, the Message-ID and the normalized headers
40
+ */
41
+ export interface MailMessageData extends SendMailOptions {
42
+ /** Header values flattened to strings and keyed by lowercase header name, set by normalize */
43
+ normalizedHeaders?: {
44
+ [key: string]: string;
45
+ } | undefined;
46
+ }
47
+ /**
48
+ * Callback for resolveAll and normalize, receives the message data with every content value
49
+ * resolved
50
+ */
51
+ export type MailMessageDataCallback = (err: NodemailerError | null, data: MailMessageData) => void;
52
+ /**
53
+ * Callback for resolveContent, receives the resolved content value
54
+ */
55
+ export type MailMessageContentCallback = (err: NodemailerError | null, value?: any) => void;
56
+ /**
57
+ * A single prepared List-* header value, emitted as is
58
+ */
59
+ export interface MailMessageListHeaderValue extends MimeNodePreparedHeaderValue {
60
+ prepared: boolean;
61
+ foldLines: boolean;
62
+ value: string;
63
+ }
64
+ /**
65
+ * A List-* header as built from the list value, one prepared value per list entry
66
+ */
67
+ export interface MailMessageListHeader {
68
+ /** Header key, 'list-' followed by the lowercase list key */
69
+ key: string;
70
+ value: MailMessageListHeaderValue[];
71
+ }
72
+ export default class MailMessage<T = SentMessageInfo> {
73
+ mailer: Mail<T>;
74
+ data: MailMessageData;
75
+ /**
76
+ * The compiled MIME tree. Set once the compile step is done, so it is null while the
77
+ * 'compile' plugins run and set by the time the 'stream' plugins and the transport see
78
+ * the message. Declared as always set, the way @types/nodemailer declared it, since the
79
+ * plugins that read it are the ones that run after it is set
80
+ */
81
+ message: MimeNode;
82
+ constructor(mailer: Mail<T>, data?: SendMailOptions);
83
+ resolveContent(data: {
84
+ [key: string]: any;
85
+ }, key: string | number, callback: MailMessageContentCallback): void;
86
+ resolveContent(data: {
87
+ [key: string]: any;
88
+ }, key: string | number, options: ResolveContentOptions | false | undefined, callback: MailMessageContentCallback): void;
89
+ resolveContent(data: {
90
+ [key: string]: any;
91
+ }, key: string | number, options?: ResolveContentOptions | false): Promise<any>;
92
+ resolveAll(callback: MailMessageDataCallback): void;
93
+ normalize(callback: MailMessageDataCallback): void;
94
+ setMailerHeader(): void;
95
+ setPriorityHeaders(): void;
96
+ setListHeaders(): void;
97
+ }