@nocobase/plugin-workflow-mailer 2.3.0-beta.13 → 2.3.0-beta.14

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,74 +1,59 @@
1
- 'use strict';
2
-
3
- const EventEmitter = require('events');
4
- const SMTPConnection = require('../smtp-connection');
5
- const wellKnown = require('../well-known');
6
- const shared = require('../shared');
7
- const XOAuth2 = require('../xoauth2');
8
- const errors = require('../errors');
9
- const packageData = require('../../package.json');
10
-
1
+ import { EventEmitter } from 'node:events';
2
+ import SMTPConnection from '../smtp-connection/index.js';
3
+ import wellKnown from '../well-known/index.js';
4
+ import * as shared from '../shared/index.js';
5
+ import XOAuth2 from '../xoauth2/index.js';
6
+ import * as errors from '../errors.js';
7
+ import * as packageData from '../package-info.js';
11
8
  /**
12
9
  * Creates a SMTP transport object for Nodemailer
13
10
  *
14
11
  * @constructor
15
- * @param {Object} options Connection options
12
+ * @param options Connection options
16
13
  */
17
14
  class SMTPTransport extends EventEmitter {
18
15
  constructor(options) {
19
16
  super();
20
-
21
17
  options = options || {};
22
-
23
18
  if (typeof options === 'string') {
24
19
  options = {
25
20
  url: options
26
21
  };
27
22
  }
28
-
29
23
  let urlData;
30
24
  let service = options.service;
31
-
32
25
  if (typeof options.getSocket === 'function') {
33
26
  this.getSocket = options.getSocket;
34
27
  }
35
-
36
28
  if (options.url) {
37
29
  urlData = shared.parseConnectionUrl(options.url);
38
30
  service = service || urlData.service;
39
31
  }
40
-
41
- this.options = shared.assign(
42
- false, // create new object
43
- options, // regular options
44
- urlData, // url options
45
- service && wellKnown(service) // wellknown options
32
+ this.options = shared.assign(false, // create new object
33
+ options, // regular options
34
+ urlData, // url options
35
+ (service && wellKnown(service)) // wellknown options
46
36
  );
47
-
48
37
  this.logger = shared.getLogger(this.options, {
49
38
  component: this.options.component || 'smtp-transport'
50
39
  });
51
-
52
40
  this.name = 'SMTP';
53
41
  this.version = packageData.version + '[client:' + packageData.version + ']';
54
-
55
42
  if (this.options.auth) {
56
43
  this.auth = this.getAuth({});
57
44
  }
58
45
  }
59
-
60
46
  /**
61
47
  * Placeholder function for creating proxy sockets. This method immediatelly returns
62
48
  * without a socket
63
49
  *
64
- * @param {Object} options Connection options
65
- * @param {Function} callback Callback function to run with the socket keys
50
+ * @param options Connection options
51
+ * @param callback Callback function to run with the socket keys
66
52
  */
67
53
  getSocket(options, callback) {
68
54
  // return immediatelly
69
- return setImmediate(() => callback(null, false));
55
+ setImmediate(() => callback(null, false));
70
56
  }
71
-
72
57
  getAuth(authOpts) {
73
58
  if (!authOpts) {
74
59
  if (this.auth && this.auth.oauth2 && this.mailer) {
@@ -79,17 +64,10 @@ class SMTPTransport extends EventEmitter {
79
64
  }
80
65
  return this.auth;
81
66
  }
82
-
83
- const authData = Object.assign(
84
- {},
85
- this.options.auth && typeof this.options.auth === 'object' ? this.options.auth : {},
86
- typeof authOpts === 'object' ? authOpts : {}
87
- );
88
-
67
+ const authData = Object.assign({}, this.options.auth && typeof this.options.auth === 'object' ? this.options.auth : {}, typeof authOpts === 'object' ? authOpts : {});
89
68
  if (Object.keys(authData).length === 0) {
90
69
  return false;
91
70
  }
92
-
93
71
  switch ((authData.type || '').toString().toUpperCase()) {
94
72
  case 'OAUTH2': {
95
73
  if (!authData.service && !authData.user) {
@@ -97,7 +75,7 @@ class SMTPTransport extends EventEmitter {
97
75
  }
98
76
  const oauth2 = new XOAuth2(authData, this.logger);
99
77
  oauth2.provisionCallback = (this.mailer && this.mailer.get('oauth2_provision_cb')) || oauth2.provisionCallback;
100
- oauth2.on('token', token => this.mailer.emit('token', token));
78
+ oauth2.on('token', (token) => this.mailer.emit('token', token));
101
79
  oauth2.on('error', err => this.emit('error', err));
102
80
  return {
103
81
  type: 'OAUTH2',
@@ -119,44 +97,32 @@ class SMTPTransport extends EventEmitter {
119
97
  };
120
98
  }
121
99
  }
122
-
123
100
  /**
124
101
  * Sends an e-mail using the selected settings
125
102
  *
126
- * @param {Object} mail Mail object
127
- * @param {Function} callback Callback function
103
+ * @param mail Mail object
104
+ * @param callback Callback function
128
105
  */
129
106
  send(mail, callback) {
130
107
  this.getSocket(this.options, (err, socketOptions) => {
131
108
  if (err) {
132
109
  return callback(err);
133
110
  }
134
-
135
111
  let returned = false;
136
112
  let options = this.options;
137
113
  if (socketOptions && socketOptions.connection) {
138
- this.logger.info(
139
- {
140
- tnx: 'proxy',
141
- remoteAddress: socketOptions.connection.remoteAddress,
142
- remotePort: socketOptions.connection.remotePort,
143
- destHost: options.host || '',
144
- destPort: options.port || '',
145
- action: 'connected'
146
- },
147
- 'Using proxied socket from %s:%s to %s:%s',
148
- socketOptions.connection.remoteAddress,
149
- socketOptions.connection.remotePort,
150
- options.host || '',
151
- options.port || ''
152
- );
153
-
114
+ this.logger.info({
115
+ tnx: 'proxy',
116
+ remoteAddress: socketOptions.connection.remoteAddress,
117
+ remotePort: socketOptions.connection.remotePort,
118
+ destHost: options.host || '',
119
+ destPort: options.port || '',
120
+ action: 'connected'
121
+ }, 'Using proxied socket from %s:%s to %s:%s', socketOptions.connection.remoteAddress, socketOptions.connection.remotePort, options.host || '', options.port || '');
154
122
  // only copy options if we need to modify it
155
123
  options = Object.assign(shared.assign(false, options), socketOptions);
156
124
  }
157
-
158
125
  const connection = new SMTPConnection(options);
159
-
160
126
  let perCallAuth;
161
127
  const cleanupPerCallAuth = () => {
162
128
  if (perCallAuth && perCallAuth !== this.auth && perCallAuth.oauth2) {
@@ -164,7 +130,6 @@ class SMTPTransport extends EventEmitter {
164
130
  }
165
131
  perCallAuth = null;
166
132
  };
167
-
168
133
  connection.once('error', err => {
169
134
  if (returned) {
170
135
  return;
@@ -174,76 +139,37 @@ class SMTPTransport extends EventEmitter {
174
139
  connection.close();
175
140
  return callback(err);
176
141
  });
177
-
178
- connection.once('end', () => {
179
- if (returned) {
180
- return;
181
- }
182
-
183
- const timer = setTimeout(() => {
184
- if (returned) {
185
- return;
186
- }
187
- returned = true;
188
- cleanupPerCallAuth();
189
- // still have not returned, this means we have an unexpected connection close
190
- const err = new Error('Unexpected socket close');
191
- if (connection && connection._socket && connection._socket.upgrading) {
192
- // starttls connection errors
193
- err.code = errors.ETLS;
194
- }
195
- callback(err);
196
- }, 1000);
197
-
198
- try {
199
- timer.unref();
200
- } catch (_E) {
201
- // Ignore. Happens on envs with non-node timer implementation
202
- }
203
- });
204
-
205
142
  const sendMessage = () => {
206
143
  const envelope = mail.message.getEnvelope();
207
144
  const messageId = mail.message.messageId();
208
-
209
145
  const recipients = [].concat(envelope.to || []);
210
146
  if (recipients.length > 3) {
211
147
  recipients.push('...and ' + recipients.splice(2).length + ' more');
212
148
  }
213
-
214
149
  if (mail.data.dsn) {
215
150
  envelope.dsn = mail.data.dsn;
216
151
  }
217
-
218
152
  // RFC 8689: Pass requireTLSExtensionEnabled to envelope for MAIL FROM parameter
219
153
  if (mail.data.requireTLSExtensionEnabled) {
220
154
  envelope.requireTLSExtensionEnabled = mail.data.requireTLSExtensionEnabled;
221
155
  }
222
-
223
- this.logger.info(
224
- {
225
- tnx: 'send',
226
- messageId
227
- },
228
- 'Sending message %s to <%s>',
229
- messageId,
230
- recipients.join(', ')
231
- );
232
-
156
+ this.logger.info({
157
+ tnx: 'send',
158
+ messageId
159
+ }, 'Sending message %s to <%s>', messageId, recipients.join(', '));
233
160
  connection.send(envelope, mail.message.createReadStream(), (err, info) => {
161
+ if (returned) {
162
+ // the connection error handler has already reported this send
163
+ return;
164
+ }
234
165
  returned = true;
235
166
  cleanupPerCallAuth();
236
167
  connection.close();
237
168
  if (err) {
238
- this.logger.error(
239
- {
240
- err,
241
- tnx: 'send'
242
- },
243
- 'Send error for %s: %s',
244
- messageId,
245
- err.message
246
- );
169
+ this.logger.error({
170
+ err,
171
+ tnx: 'send'
172
+ }, 'Send error for %s: %s', messageId, err.message);
247
173
  return callback(err);
248
174
  }
249
175
  info.envelope = {
@@ -253,89 +179,71 @@ class SMTPTransport extends EventEmitter {
253
179
  info.messageId = messageId;
254
180
  try {
255
181
  return callback(null, info);
256
- } catch (E) {
257
- this.logger.error(
258
- {
259
- err: E,
260
- tnx: 'callback'
261
- },
262
- 'Callback error for %s: %s',
263
- messageId,
264
- E.message
265
- );
182
+ }
183
+ catch (E) {
184
+ this.logger.error({
185
+ err: E,
186
+ tnx: 'callback'
187
+ }, 'Callback error for %s: %s', messageId, E.message);
266
188
  }
267
189
  });
268
190
  };
269
-
270
- connection.connect(() => {
191
+ connection.connect(err => {
271
192
  if (returned) {
272
193
  return;
273
194
  }
274
-
195
+ if (err) {
196
+ // the server closed the connection before the greeting
197
+ returned = true;
198
+ connection.close();
199
+ return callback(err);
200
+ }
275
201
  perCallAuth = this.getAuth(mail.data.auth);
276
-
277
202
  if (perCallAuth && (connection.allowsAuth || options.forceAuth)) {
278
203
  connection.login(perCallAuth, err => {
279
204
  cleanupPerCallAuth();
280
205
  if (returned) {
281
206
  return;
282
207
  }
283
-
284
208
  if (err) {
285
209
  returned = true;
286
210
  connection.close();
287
211
  return callback(err);
288
212
  }
289
-
290
213
  sendMessage();
291
214
  });
292
- } else {
215
+ }
216
+ else {
293
217
  sendMessage();
294
218
  }
295
219
  });
296
220
  });
297
221
  }
298
-
299
- /**
300
- * Verifies SMTP configuration
301
- *
302
- * @param {Function} callback Callback function
303
- */
304
222
  verify(callback) {
305
223
  let promise;
306
-
307
224
  if (!callback) {
308
225
  promise = new Promise((resolve, reject) => {
309
226
  callback = shared.callbackPromise(resolve, reject);
310
227
  });
311
228
  }
312
-
229
+ // the error paths hand over the error alone
230
+ const done = callback;
313
231
  this.getSocket(this.options, (err, socketOptions) => {
314
232
  if (err) {
315
- return callback(err);
233
+ return done(err);
316
234
  }
317
-
318
235
  let options = this.options;
319
236
  if (socketOptions && socketOptions.connection) {
320
- this.logger.info(
321
- {
322
- tnx: 'proxy',
323
- remoteAddress: socketOptions.connection.remoteAddress,
324
- remotePort: socketOptions.connection.remotePort,
325
- destHost: options.host || '',
326
- destPort: options.port || '',
327
- action: 'connected'
328
- },
329
- 'Using proxied socket from %s:%s to %s:%s',
330
- socketOptions.connection.remoteAddress,
331
- socketOptions.connection.remotePort,
332
- options.host || '',
333
- options.port || ''
334
- );
335
-
237
+ this.logger.info({
238
+ tnx: 'proxy',
239
+ remoteAddress: socketOptions.connection.remoteAddress,
240
+ remotePort: socketOptions.connection.remotePort,
241
+ destHost: options.host || '',
242
+ destPort: options.port || '',
243
+ action: 'connected'
244
+ }, 'Using proxied socket from %s:%s to %s:%s', socketOptions.connection.remoteAddress, socketOptions.connection.remotePort, options.host || '', options.port || '');
336
245
  options = Object.assign(shared.assign(false, options), socketOptions);
337
246
  }
338
-
339
247
  const connection = new SMTPConnection(options);
340
248
  let returned = false;
341
249
  let perCallAuth;
@@ -345,7 +253,6 @@ class SMTPTransport extends EventEmitter {
345
253
  }
346
254
  perCallAuth = null;
347
255
  };
348
-
349
256
  connection.once('error', err => {
350
257
  if (returned) {
351
258
  return;
@@ -353,18 +260,16 @@ class SMTPTransport extends EventEmitter {
353
260
  returned = true;
354
261
  cleanupPerCallAuth();
355
262
  connection.close();
356
- return callback(err);
263
+ return done(err);
357
264
  });
358
-
359
265
  connection.once('end', () => {
360
266
  if (returned) {
361
267
  return;
362
268
  }
363
269
  returned = true;
364
270
  cleanupPerCallAuth();
365
- return callback(new Error('Connection closed'));
271
+ return done(new Error('Connection closed'));
366
272
  });
367
-
368
273
  const finalize = () => {
369
274
  if (returned) {
370
275
  return;
@@ -372,48 +277,47 @@ class SMTPTransport extends EventEmitter {
372
277
  returned = true;
373
278
  cleanupPerCallAuth();
374
279
  connection.quit();
375
- return callback(null, true);
280
+ return done(null, true);
376
281
  };
377
-
378
- connection.connect(() => {
282
+ connection.connect(err => {
379
283
  if (returned) {
380
284
  return;
381
285
  }
382
-
286
+ if (err) {
287
+ returned = true;
288
+ connection.close();
289
+ return done(err);
290
+ }
383
291
  perCallAuth = this.getAuth({});
384
-
385
292
  if (perCallAuth && (connection.allowsAuth || options.forceAuth)) {
386
293
  connection.login(perCallAuth, err => {
387
294
  cleanupPerCallAuth();
388
295
  if (returned) {
389
296
  return;
390
297
  }
391
-
392
298
  if (err) {
393
299
  returned = true;
394
300
  connection.close();
395
- return callback(err);
301
+ return done(err);
396
302
  }
397
-
398
303
  finalize();
399
304
  });
400
- } else if (!perCallAuth && connection.allowsAuth && options.forceAuth) {
305
+ }
306
+ else if (!perCallAuth && connection.allowsAuth && options.forceAuth) {
401
307
  const err = new Error('Authentication info was not provided');
402
308
  err.code = errors.ENOAUTH;
403
-
404
309
  returned = true;
405
310
  cleanupPerCallAuth();
406
311
  connection.close();
407
- return callback(err);
408
- } else {
312
+ return done(err);
313
+ }
314
+ else {
409
315
  finalize();
410
316
  }
411
317
  });
412
318
  });
413
-
414
319
  return promise;
415
320
  }
416
-
417
321
  /**
418
322
  * Releases resources
419
323
  */
@@ -424,6 +328,4 @@ class SMTPTransport extends EventEmitter {
424
328
  this.emit('close');
425
329
  }
426
330
  }
427
-
428
- // expose to the world
429
- module.exports = SMTPTransport;
331
+ export default SMTPTransport;
@@ -0,0 +1,65 @@
1
+ import type { Readable } from 'node:stream';
2
+ import type { Logger } from '../shared/index.js';
3
+ import type { MimeNodeEnvelope } from '../mime-node/index.js';
4
+ import type MailMessage from '../mailer/mail-message.js';
5
+ import type { default as Mail, SentMessageInfo, SendMailOptions, TransportOptions } from '../mailer/index.js';
6
+ /**
7
+ * Options for the Stream transport
8
+ */
9
+ export interface StreamTransportOptions extends TransportOptions {
10
+ /** Selects this transport in createTransport */
11
+ streamTransport?: boolean | undefined;
12
+ /** If true, the message is returned as a Buffer object instead of a stream */
13
+ buffer?: boolean | undefined;
14
+ /** Either 'windows' or 'unix', the line ending of the generated message */
15
+ newline?: string | undefined;
16
+ }
17
+ /**
18
+ * The value the Stream transport hands to the send callback
19
+ */
20
+ export interface StreamSentMessageInfo extends SentMessageInfo {
21
+ /** The envelope the message was generated with */
22
+ envelope: MimeNodeEnvelope;
23
+ /** Message-ID value of the message */
24
+ messageId: string;
25
+ /** The generated message, a Buffer when the buffer option is set, a readable stream otherwise */
26
+ message: Readable | Buffer;
27
+ }
28
+ /**
29
+ * Generates a Transport object for streaming
30
+ *
31
+ * Possible options can be the following:
32
+ *
33
+ * * **buffer** if true, then returns the message as a Buffer object instead of a stream
34
+ * * **newline** either 'windows' or 'unix'
35
+ *
36
+ * @constructor
37
+ * @param optional config parameter
38
+ */
39
+ declare class StreamTransport {
40
+ mailer: Mail<StreamSentMessageInfo>;
41
+ options: StreamTransportOptions;
42
+ name: string;
43
+ version: string;
44
+ logger: Logger;
45
+ winbreak: boolean;
46
+ constructor(options?: StreamTransportOptions);
47
+ /**
48
+ * Compiles a mailcomposer message and forwards it to handler that sends it
49
+ *
50
+ * @param mail MailComposer object
51
+ * @param done Callback function to run when the sending is completed
52
+ */
53
+ send(mail: MailMessage<StreamSentMessageInfo>, done: (err: Error | null, info?: StreamSentMessageInfo) => void): void;
54
+ }
55
+ /**
56
+ * Type aliases in the layout of @types/nodemailer, so `StreamTransport.Options` style references keep working
57
+ */
58
+ declare namespace StreamTransport {
59
+ type Options = StreamTransportOptions;
60
+ type MailOptions = SendMailOptions;
61
+ type SentMessageInfo = StreamSentMessageInfo;
62
+ }
63
+ /** The same aliases as module level exports, for `import * as StreamTransport` and `import StreamTransport = require()` */
64
+ export type { StreamTransportOptions as Options, SendMailOptions as MailOptions, StreamSentMessageInfo as SentMessageInfo };
65
+ export default StreamTransport;