@nocobase/plugin-workflow-mailer 2.3.0-beta.12 → 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 (187) hide show
  1. package/dist/externalVersion.js +6 -6
  2. package/dist/node_modules/joi/dist/joi-browser.min.js +1 -1
  3. package/dist/node_modules/joi/lib/index.js +1 -1
  4. package/dist/node_modules/joi/lib/messages.js +35 -6
  5. package/dist/node_modules/joi/lib/types/keys.js +18 -1
  6. package/dist/node_modules/joi/lib/types/link.js +18 -2
  7. package/dist/node_modules/joi/lib/types/string.js +2 -2
  8. package/dist/node_modules/joi/package.json +1 -1
  9. package/dist/node_modules/nodemailer/dist/cjs/addressparser/index.d.ts +59 -0
  10. package/dist/node_modules/nodemailer/dist/cjs/addressparser/index.js +790 -0
  11. package/dist/node_modules/nodemailer/dist/cjs/base64/index.d.ts +36 -0
  12. package/dist/node_modules/nodemailer/dist/cjs/base64/index.js +119 -0
  13. package/dist/node_modules/nodemailer/dist/cjs/dkim/index.d.ts +52 -0
  14. package/dist/node_modules/nodemailer/dist/cjs/dkim/index.js +228 -0
  15. package/dist/node_modules/nodemailer/dist/cjs/dkim/message-parser.d.ts +48 -0
  16. package/dist/node_modules/nodemailer/dist/cjs/dkim/message-parser.js +180 -0
  17. package/dist/node_modules/nodemailer/dist/cjs/dkim/relaxed-body.d.ts +36 -0
  18. package/dist/node_modules/nodemailer/dist/cjs/dkim/relaxed-body.js +148 -0
  19. package/dist/node_modules/nodemailer/dist/cjs/dkim/sign.d.ts +52 -0
  20. package/dist/node_modules/nodemailer/dist/cjs/dkim/sign.js +165 -0
  21. package/dist/node_modules/nodemailer/dist/cjs/errors.d.ts +96 -0
  22. package/dist/node_modules/nodemailer/dist/cjs/errors.js +70 -0
  23. package/dist/node_modules/nodemailer/dist/cjs/fetch/cookies.d.ts +107 -0
  24. package/dist/node_modules/nodemailer/dist/cjs/fetch/cookies.js +282 -0
  25. package/dist/node_modules/nodemailer/dist/cjs/fetch/index.d.ts +65 -0
  26. package/dist/node_modules/nodemailer/dist/cjs/fetch/index.js +384 -0
  27. package/dist/node_modules/nodemailer/dist/cjs/json-transport/index.d.ts +64 -0
  28. package/dist/node_modules/nodemailer/dist/cjs/json-transport/index.js +99 -0
  29. package/dist/node_modules/nodemailer/dist/cjs/mail-composer/index.d.ts +174 -0
  30. package/dist/node_modules/nodemailer/dist/cjs/mail-composer/index.js +613 -0
  31. package/dist/node_modules/nodemailer/dist/cjs/mailer/index.d.ts +237 -0
  32. package/dist/node_modules/nodemailer/dist/cjs/mailer/index.js +415 -0
  33. package/dist/node_modules/nodemailer/dist/cjs/mailer/mail-message.d.ts +97 -0
  34. package/dist/node_modules/nodemailer/dist/cjs/mailer/mail-message.js +342 -0
  35. package/dist/node_modules/nodemailer/dist/cjs/mime-funcs/index.d.ts +161 -0
  36. package/dist/node_modules/nodemailer/dist/cjs/mime-funcs/index.js +787 -0
  37. package/dist/node_modules/nodemailer/dist/cjs/mime-funcs/mime-types.d.ts +2 -0
  38. package/dist/node_modules/nodemailer/dist/cjs/mime-funcs/mime-types.js +2103 -0
  39. package/dist/node_modules/nodemailer/dist/cjs/mime-node/index.d.ts +333 -0
  40. package/dist/node_modules/nodemailer/dist/cjs/mime-node/index.js +1493 -0
  41. package/dist/node_modules/nodemailer/dist/cjs/mime-node/last-newline.d.ts +5 -0
  42. package/dist/node_modules/nodemailer/dist/cjs/mime-node/last-newline.js +32 -0
  43. package/dist/node_modules/nodemailer/dist/cjs/mime-node/le-unix.d.ts +9 -0
  44. package/dist/node_modules/nodemailer/dist/cjs/mime-node/le-unix.js +40 -0
  45. package/dist/node_modules/nodemailer/dist/cjs/mime-node/le-windows.d.ts +10 -0
  46. package/dist/node_modules/nodemailer/dist/cjs/mime-node/le-windows.js +47 -0
  47. package/dist/node_modules/nodemailer/dist/cjs/nodemailer.d.ts +124 -0
  48. package/dist/node_modules/nodemailer/dist/cjs/nodemailer.js +1 -0
  49. package/dist/node_modules/nodemailer/dist/cjs/package-info.d.ts +3 -0
  50. package/dist/node_modules/nodemailer/dist/cjs/package-info.js +7 -0
  51. package/dist/node_modules/nodemailer/dist/cjs/package.json +3 -0
  52. package/dist/node_modules/nodemailer/dist/cjs/punycode/index.d.ts +73 -0
  53. package/dist/node_modules/nodemailer/{lib → dist/cjs}/punycode/index.js +63 -112
  54. package/dist/node_modules/nodemailer/dist/cjs/qp/index.d.ts +32 -0
  55. package/dist/node_modules/nodemailer/dist/cjs/qp/index.js +207 -0
  56. package/dist/node_modules/nodemailer/dist/cjs/sendmail-transport/index.d.ts +69 -0
  57. package/dist/node_modules/nodemailer/dist/cjs/sendmail-transport/index.js +210 -0
  58. package/dist/node_modules/nodemailer/dist/cjs/ses-transport/index.d.ts +112 -0
  59. package/dist/node_modules/nodemailer/dist/cjs/ses-transport/index.js +252 -0
  60. package/dist/node_modules/nodemailer/dist/cjs/shared/index.d.ts +260 -0
  61. package/dist/node_modules/nodemailer/dist/cjs/shared/index.js +680 -0
  62. package/dist/node_modules/nodemailer/dist/cjs/shared/objects.d.ts +23 -0
  63. package/dist/node_modules/nodemailer/dist/cjs/shared/objects.js +43 -0
  64. package/dist/node_modules/nodemailer/dist/cjs/shared/url.d.ts +21 -0
  65. package/dist/node_modules/nodemailer/dist/cjs/shared/url.js +255 -0
  66. package/dist/node_modules/nodemailer/dist/cjs/smtp-connection/data-stream.d.ts +15 -0
  67. package/dist/node_modules/nodemailer/dist/cjs/smtp-connection/data-stream.js +108 -0
  68. package/dist/node_modules/nodemailer/dist/cjs/smtp-connection/http-proxy-client.d.ts +47 -0
  69. package/dist/node_modules/nodemailer/dist/cjs/smtp-connection/http-proxy-client.js +189 -0
  70. package/dist/node_modules/nodemailer/dist/cjs/smtp-connection/index.d.ts +416 -0
  71. package/dist/node_modules/nodemailer/dist/cjs/smtp-connection/index.js +1837 -0
  72. package/dist/node_modules/nodemailer/dist/cjs/smtp-pool/index.d.ts +133 -0
  73. package/dist/node_modules/nodemailer/dist/cjs/smtp-pool/index.js +569 -0
  74. package/dist/node_modules/nodemailer/dist/cjs/smtp-pool/pool-resource.d.ts +62 -0
  75. package/dist/node_modules/nodemailer/dist/cjs/smtp-pool/pool-resource.js +257 -0
  76. package/dist/node_modules/nodemailer/dist/cjs/smtp-transport/index.d.ts +156 -0
  77. package/dist/node_modules/nodemailer/dist/cjs/smtp-transport/index.js +371 -0
  78. package/dist/node_modules/nodemailer/dist/cjs/stream-transport/index.d.ts +65 -0
  79. package/dist/node_modules/nodemailer/dist/cjs/stream-transport/index.js +146 -0
  80. package/dist/node_modules/nodemailer/dist/cjs/well-known/index.d.ts +35 -0
  81. package/dist/node_modules/nodemailer/dist/cjs/well-known/index.js +41 -0
  82. package/dist/node_modules/nodemailer/dist/cjs/well-known/services.d.ts +2 -0
  83. package/dist/node_modules/nodemailer/dist/cjs/well-known/services.js +674 -0
  84. package/dist/node_modules/nodemailer/dist/cjs/xoauth2/index.d.ts +201 -0
  85. package/dist/node_modules/nodemailer/dist/cjs/xoauth2/index.js +426 -0
  86. package/dist/node_modules/nodemailer/dist/esm/addressparser/index.d.ts +59 -0
  87. package/dist/node_modules/nodemailer/dist/esm/addressparser/index.js +786 -0
  88. package/dist/node_modules/nodemailer/dist/esm/base64/index.d.ts +36 -0
  89. package/dist/node_modules/nodemailer/{lib → dist/esm}/base64/index.js +39 -68
  90. package/dist/node_modules/nodemailer/dist/esm/dkim/index.d.ts +52 -0
  91. package/dist/node_modules/nodemailer/{lib → dist/esm}/dkim/index.js +62 -92
  92. package/dist/node_modules/nodemailer/dist/esm/dkim/message-parser.d.ts +48 -0
  93. package/dist/node_modules/nodemailer/dist/esm/dkim/message-parser.js +176 -0
  94. package/dist/node_modules/nodemailer/dist/esm/dkim/relaxed-body.d.ts +36 -0
  95. package/dist/node_modules/nodemailer/dist/esm/dkim/relaxed-body.js +141 -0
  96. package/dist/node_modules/nodemailer/dist/esm/dkim/sign.d.ts +52 -0
  97. package/dist/node_modules/nodemailer/dist/esm/dkim/sign.js +125 -0
  98. package/dist/node_modules/nodemailer/dist/esm/errors.d.ts +96 -0
  99. package/dist/node_modules/nodemailer/dist/esm/errors.js +67 -0
  100. package/dist/node_modules/nodemailer/dist/esm/fetch/cookies.d.ts +107 -0
  101. package/dist/node_modules/nodemailer/dist/esm/fetch/cookies.js +242 -0
  102. package/dist/node_modules/nodemailer/dist/esm/fetch/index.d.ts +65 -0
  103. package/dist/node_modules/nodemailer/dist/esm/fetch/index.js +344 -0
  104. package/dist/node_modules/nodemailer/dist/esm/json-transport/index.d.ts +64 -0
  105. package/dist/node_modules/nodemailer/dist/esm/json-transport/index.js +62 -0
  106. package/dist/node_modules/nodemailer/dist/esm/mail-composer/index.d.ts +174 -0
  107. package/dist/node_modules/nodemailer/{lib → dist/esm}/mail-composer/index.js +283 -275
  108. package/dist/node_modules/nodemailer/dist/esm/mailer/index.d.ts +237 -0
  109. package/dist/node_modules/nodemailer/{lib → dist/esm}/mailer/index.js +151 -205
  110. package/dist/node_modules/nodemailer/dist/esm/mailer/mail-message.d.ts +97 -0
  111. package/dist/node_modules/nodemailer/{lib → dist/esm}/mailer/mail-message.js +111 -125
  112. package/dist/node_modules/nodemailer/dist/esm/mime-funcs/index.d.ts +161 -0
  113. package/dist/node_modules/nodemailer/dist/esm/mime-funcs/index.js +738 -0
  114. package/dist/node_modules/nodemailer/dist/esm/mime-funcs/mime-types.d.ts +2 -0
  115. package/dist/node_modules/nodemailer/{lib → dist/esm}/mime-funcs/mime-types.js +43 -49
  116. package/dist/node_modules/nodemailer/dist/esm/mime-node/index.d.ts +333 -0
  117. package/dist/node_modules/nodemailer/{lib → dist/esm}/mime-node/index.js +576 -437
  118. package/dist/node_modules/nodemailer/dist/esm/mime-node/last-newline.d.ts +5 -0
  119. package/dist/node_modules/nodemailer/{lib → dist/esm}/mime-node/last-newline.js +4 -10
  120. package/dist/node_modules/nodemailer/dist/esm/mime-node/le-unix.d.ts +9 -0
  121. package/dist/node_modules/nodemailer/{lib → dist/esm}/mime-node/le-unix.js +7 -15
  122. package/dist/node_modules/nodemailer/dist/esm/mime-node/le-windows.d.ts +10 -0
  123. package/dist/node_modules/nodemailer/{lib → dist/esm}/mime-node/le-windows.js +6 -16
  124. package/dist/node_modules/nodemailer/dist/esm/nodemailer.d.ts +124 -0
  125. package/dist/node_modules/nodemailer/dist/esm/nodemailer.js +166 -0
  126. package/dist/node_modules/nodemailer/dist/esm/package-info.d.ts +3 -0
  127. package/dist/node_modules/nodemailer/dist/esm/package-info.js +4 -0
  128. package/dist/node_modules/nodemailer/dist/esm/package.json +3 -0
  129. package/dist/node_modules/nodemailer/dist/esm/punycode/index.d.ts +73 -0
  130. package/dist/node_modules/nodemailer/dist/esm/punycode/index.js +405 -0
  131. package/dist/node_modules/nodemailer/dist/esm/qp/index.d.ts +32 -0
  132. package/dist/node_modules/nodemailer/{lib → dist/esm}/qp/index.js +59 -77
  133. package/dist/node_modules/nodemailer/dist/esm/sendmail-transport/index.d.ts +69 -0
  134. package/dist/node_modules/nodemailer/dist/esm/sendmail-transport/index.js +170 -0
  135. package/dist/node_modules/nodemailer/dist/esm/ses-transport/index.d.ts +112 -0
  136. package/dist/node_modules/nodemailer/dist/esm/ses-transport/index.js +212 -0
  137. package/dist/node_modules/nodemailer/dist/esm/shared/index.d.ts +260 -0
  138. package/dist/node_modules/nodemailer/dist/esm/shared/index.js +631 -0
  139. package/dist/node_modules/nodemailer/dist/esm/shared/objects.d.ts +23 -0
  140. package/dist/node_modules/nodemailer/dist/esm/shared/objects.js +38 -0
  141. package/dist/node_modules/nodemailer/dist/esm/shared/url.d.ts +21 -0
  142. package/dist/node_modules/nodemailer/dist/esm/shared/url.js +214 -0
  143. package/dist/node_modules/nodemailer/dist/esm/smtp-connection/data-stream.d.ts +15 -0
  144. package/dist/node_modules/nodemailer/dist/esm/smtp-connection/data-stream.js +103 -0
  145. package/dist/node_modules/nodemailer/dist/esm/smtp-connection/http-proxy-client.d.ts +47 -0
  146. package/dist/node_modules/nodemailer/dist/esm/smtp-connection/http-proxy-client.js +149 -0
  147. package/dist/node_modules/nodemailer/dist/esm/smtp-connection/index.d.ts +416 -0
  148. package/dist/node_modules/nodemailer/dist/esm/smtp-connection/index.js +1797 -0
  149. package/dist/node_modules/nodemailer/dist/esm/smtp-pool/index.d.ts +133 -0
  150. package/dist/node_modules/nodemailer/{lib → dist/esm}/smtp-pool/index.js +195 -314
  151. package/dist/node_modules/nodemailer/dist/esm/smtp-pool/pool-resource.d.ts +62 -0
  152. package/dist/node_modules/nodemailer/{lib → dist/esm}/smtp-pool/pool-resource.js +70 -107
  153. package/dist/node_modules/nodemailer/dist/esm/smtp-transport/index.d.ts +156 -0
  154. package/dist/node_modules/nodemailer/dist/esm/smtp-transport/index.js +331 -0
  155. package/dist/node_modules/nodemailer/dist/esm/stream-transport/index.d.ts +65 -0
  156. package/dist/node_modules/nodemailer/dist/esm/stream-transport/index.js +106 -0
  157. package/dist/node_modules/nodemailer/dist/esm/well-known/index.d.ts +35 -0
  158. package/dist/node_modules/nodemailer/{lib → dist/esm}/well-known/index.js +12 -23
  159. package/dist/node_modules/nodemailer/dist/esm/well-known/services.d.ts +2 -0
  160. package/dist/node_modules/nodemailer/dist/esm/well-known/services.js +671 -0
  161. package/dist/node_modules/nodemailer/dist/esm/xoauth2/index.d.ts +201 -0
  162. package/dist/node_modules/nodemailer/dist/esm/xoauth2/index.js +386 -0
  163. package/dist/node_modules/nodemailer/dist/well-known/services.json +640 -0
  164. package/dist/node_modules/nodemailer/package.json +1 -1
  165. package/package.json +4 -4
  166. package/dist/node_modules/nodemailer/.gitattributes +0 -6
  167. package/dist/node_modules/nodemailer/.ncurc.js +0 -7
  168. package/dist/node_modules/nodemailer/.prettierrc.js +0 -8
  169. package/dist/node_modules/nodemailer/lib/addressparser/index.js +0 -313
  170. package/dist/node_modules/nodemailer/lib/dkim/message-parser.js +0 -155
  171. package/dist/node_modules/nodemailer/lib/dkim/relaxed-body.js +0 -154
  172. package/dist/node_modules/nodemailer/lib/dkim/sign.js +0 -117
  173. package/dist/node_modules/nodemailer/lib/fetch/cookies.js +0 -281
  174. package/dist/node_modules/nodemailer/lib/fetch/index.js +0 -274
  175. package/dist/node_modules/nodemailer/lib/json-transport/index.js +0 -82
  176. package/dist/node_modules/nodemailer/lib/mime-funcs/index.js +0 -625
  177. package/dist/node_modules/nodemailer/lib/nodemailer.js +0 -1
  178. package/dist/node_modules/nodemailer/lib/sendmail-transport/index.js +0 -210
  179. package/dist/node_modules/nodemailer/lib/ses-transport/index.js +0 -349
  180. package/dist/node_modules/nodemailer/lib/shared/index.js +0 -688
  181. package/dist/node_modules/nodemailer/lib/smtp-connection/data-stream.js +0 -108
  182. package/dist/node_modules/nodemailer/lib/smtp-connection/http-proxy-client.js +0 -143
  183. package/dist/node_modules/nodemailer/lib/smtp-connection/index.js +0 -1825
  184. package/dist/node_modules/nodemailer/lib/smtp-transport/index.js +0 -416
  185. package/dist/node_modules/nodemailer/lib/stream-transport/index.js +0 -135
  186. package/dist/node_modules/nodemailer/lib/well-known/services.json +0 -343
  187. package/dist/node_modules/nodemailer/lib/xoauth2/index.js +0 -376
@@ -0,0 +1,62 @@
1
+ import SMTPConnection from '../smtp-connection/index.js';
2
+ import { type Logger } from '../shared/index.js';
3
+ import { EventEmitter } from 'node:events';
4
+ import type { SMTPTransportAuth, SMTPTransportSendCallback } from '../smtp-transport/index.js';
5
+ import type MailMessage from '../mailer/mail-message.js';
6
+ import type SMTPPool from './index.js';
7
+ import type { SMTPPoolResolvedOptions, SMTPPoolQueueEntry } from './index.js';
8
+ /**
9
+ * Callback for connect(), the result is true once the connection is ready for messages
10
+ */
11
+ export type PoolResourceConnectCallback = (err: Error | null, connected?: true) => void;
12
+ /**
13
+ * Callback for send()
14
+ */
15
+ export type PoolResourceSendCallback = SMTPTransportSendCallback;
16
+ /**
17
+ * Creates an element for the pool
18
+ *
19
+ * @constructor
20
+ * @param pool SMTPPool instance
21
+ */
22
+ export default class PoolResource extends EventEmitter {
23
+ pool: SMTPPool;
24
+ options: SMTPPoolResolvedOptions;
25
+ logger: Logger;
26
+ /**
27
+ * Authentication data for the connection, set when the pool options include auth
28
+ */
29
+ auth?: SMTPTransportAuth | undefined;
30
+ messages: number;
31
+ available: boolean;
32
+ /**
33
+ * The SMTP connection, set by connect()
34
+ */
35
+ connection: SMTPConnection;
36
+ /**
37
+ * Resource id, assigned by the pool
38
+ */
39
+ id: number;
40
+ /**
41
+ * The queue entry being sent, assigned by the pool. False once it has been handled
42
+ */
43
+ queueEntry?: SMTPPoolQueueEntry | false | undefined;
44
+ constructor(pool: SMTPPool);
45
+ /**
46
+ * Initiates a connection to the SMTP server
47
+ *
48
+ * @param callback Callback function to run once the connection is established or failed
49
+ */
50
+ connect(callback: PoolResourceConnectCallback): void;
51
+ /**
52
+ * Sends an e-mail to be sent using the selected settings
53
+ *
54
+ * @param mail Mail object
55
+ * @param callback Callback function
56
+ */
57
+ send(mail: MailMessage, callback: PoolResourceSendCallback): void;
58
+ /**
59
+ * Closes the connection
60
+ */
61
+ close(): void;
62
+ }
@@ -1,37 +1,34 @@
1
- 'use strict';
2
-
3
- const SMTPConnection = require('../smtp-connection');
4
- const assign = require('../shared').assign;
5
- const XOAuth2 = require('../xoauth2');
6
- const EventEmitter = require('events');
7
-
1
+ import SMTPConnection from '../smtp-connection/index.js';
2
+ import { assign } from '../shared/index.js';
3
+ import XOAuth2 from '../xoauth2/index.js';
4
+ import * as errors from '../errors.js';
5
+ import { EventEmitter } from 'node:events';
8
6
  /**
9
7
  * Creates an element for the pool
10
8
  *
11
9
  * @constructor
12
- * @param {Object} options SMTPPool instance
10
+ * @param pool SMTPPool instance
13
11
  */
14
- class PoolResource extends EventEmitter {
12
+ export default class PoolResource extends EventEmitter {
15
13
  constructor(pool) {
16
14
  super();
17
-
18
15
  this.pool = pool;
19
16
  this.options = pool.options;
20
17
  this.logger = this.pool.logger;
21
-
22
18
  if (this.options.auth) {
23
19
  switch ((this.options.auth.type || '').toString().toUpperCase()) {
24
20
  case 'OAUTH2': {
25
- let oauth2 = new XOAuth2(this.options.auth, this.logger);
26
- oauth2.provisionCallback = (this.pool.mailer && this.pool.mailer.get('oauth2_provision_cb')) || oauth2.provisionCallback;
21
+ const oauth2 = new XOAuth2(this.options.auth, this.logger);
22
+ oauth2.provisionCallback =
23
+ (this.pool.mailer && this.pool.mailer.get('oauth2_provision_cb')) || oauth2.provisionCallback;
27
24
  this.auth = {
28
25
  type: 'OAUTH2',
29
26
  user: this.options.auth.user,
30
27
  oauth2,
31
28
  method: 'XOAUTH2'
32
29
  };
33
- oauth2.on('token', token => this.pool.mailer.emit('token', token));
34
- oauth2.on('error', err => this.emit('error', err));
30
+ oauth2.on('token', (token) => this.pool.mailer.emit('token', token));
31
+ oauth2.on('error', err => this._fail(err));
35
32
  break;
36
33
  }
37
34
  default:
@@ -50,110 +47,90 @@ class PoolResource extends EventEmitter {
50
47
  };
51
48
  }
52
49
  }
53
-
54
50
  this._connection = false;
55
51
  this._connected = false;
56
-
57
52
  this.messages = 0;
58
53
  this.available = true;
54
+ this._failed = false;
55
+ }
56
+ /**
57
+ * Emits 'error' for the first failure only. A dead resource can report the same failure more
58
+ * than once (the connection error, then the send callback), the pool handles it once
59
+ * @internal
60
+ */
61
+ _fail(err) {
62
+ if (this._failed) {
63
+ return;
64
+ }
65
+ this._failed = true;
66
+ this.emit('error', err);
59
67
  }
60
-
61
68
  /**
62
69
  * Initiates a connection to the SMTP server
63
70
  *
64
- * @param {Function} callback Callback function to run once the connection is established or failed
71
+ * @param callback Callback function to run once the connection is established or failed
65
72
  */
66
73
  connect(callback) {
67
74
  this.pool.getSocket(this.options, (err, socketOptions) => {
68
75
  if (err) {
76
+ // nothing was connected, so no 'close' event is coming that would free the
77
+ // slot this resource holds in the pool, report the failure the way a failed
78
+ // login does
79
+ this._fail(err);
69
80
  return callback(err);
70
81
  }
71
-
72
82
  let returned = false;
73
83
  let options = this.options;
74
84
  if (socketOptions && socketOptions.connection) {
75
- this.logger.info(
76
- {
77
- tnx: 'proxy',
78
- remoteAddress: socketOptions.connection.remoteAddress,
79
- remotePort: socketOptions.connection.remotePort,
80
- destHost: options.host || '',
81
- destPort: options.port || '',
82
- action: 'connected'
83
- },
84
- 'Using proxied socket from %s:%s to %s:%s',
85
- socketOptions.connection.remoteAddress,
86
- socketOptions.connection.remotePort,
87
- options.host || '',
88
- options.port || ''
89
- );
90
-
91
- options = assign(false, options);
92
- Object.keys(socketOptions).forEach(key => {
93
- options[key] = socketOptions[key];
94
- });
85
+ this.logger.info({
86
+ tnx: 'proxy',
87
+ remoteAddress: socketOptions.connection.remoteAddress,
88
+ remotePort: socketOptions.connection.remotePort,
89
+ destHost: options.host || '',
90
+ destPort: options.port || '',
91
+ action: 'connected'
92
+ }, 'Using proxied socket from %s:%s to %s:%s', socketOptions.connection.remoteAddress, socketOptions.connection.remotePort, options.host || '', options.port || '');
93
+ options = Object.assign(assign(false, options), socketOptions);
95
94
  }
96
-
97
95
  this.connection = new SMTPConnection(options);
98
-
99
- this.connection.once('error', err => {
100
- this.emit('error', err);
96
+ this.connection.on('error', err => {
97
+ this._fail(err);
101
98
  if (returned) {
102
99
  return;
103
100
  }
104
101
  returned = true;
105
102
  return callback(err);
106
103
  });
107
-
108
104
  this.connection.once('end', () => {
109
105
  this.close();
110
- if (returned) {
111
- return;
112
- }
113
106
  returned = true;
114
-
115
- let timer = setTimeout(() => {
116
- if (returned) {
117
- return;
118
- }
119
- // still have not returned, this means we have an unexpected connection close
120
- let err = new Error('Unexpected socket close');
121
- if (this.connection && this.connection._socket && this.connection._socket.upgrading) {
122
- // starttls connection errors
123
- err.code = 'ETLS';
124
- }
125
- callback(err);
126
- }, 1000);
127
-
128
- try {
129
- timer.unref();
130
- } catch (E) {
131
- // Ignore. Happens on envs with non-node timer implementation
132
- }
133
107
  });
134
-
135
- this.connection.connect(() => {
108
+ this.connection.connect(err => {
136
109
  if (returned) {
137
110
  return;
138
111
  }
139
-
112
+ if (err) {
113
+ // a close before the greeting, the 'end' that follows closes this resource
114
+ // and the pool requeues or fails the entry, bounded by maxRequeues
115
+ returned = true;
116
+ return;
117
+ }
140
118
  if (this.auth && (this.connection.allowsAuth || options.forceAuth)) {
141
119
  this.connection.login(this.auth, err => {
142
120
  if (returned) {
143
121
  return;
144
122
  }
145
123
  returned = true;
146
-
147
124
  if (err) {
148
125
  this.connection.close();
149
- this.emit('error', err);
126
+ this._fail(err);
150
127
  return callback(err);
151
128
  }
152
-
153
129
  this._connected = true;
154
130
  callback(null, true);
155
131
  });
156
- } else {
132
+ }
133
+ else {
157
134
  returned = true;
158
135
  this._connected = true;
159
136
  return callback(null, true);
@@ -161,12 +138,11 @@ class PoolResource extends EventEmitter {
161
138
  });
162
139
  });
163
140
  }
164
-
165
141
  /**
166
142
  * Sends an e-mail to be sent using the selected settings
167
143
  *
168
- * @param {Object} mail Mail object
169
- * @param {Function} callback Callback function
144
+ * @param mail Mail object
145
+ * @param callback Callback function
170
146
  */
171
147
  send(mail, callback) {
172
148
  if (!this._connected) {
@@ -177,64 +153,53 @@ class PoolResource extends EventEmitter {
177
153
  return this.send(mail, callback);
178
154
  });
179
155
  }
180
-
181
- let envelope = mail.message.getEnvelope();
182
- let messageId = mail.message.messageId();
183
-
184
- let recipients = [].concat(envelope.to || []);
156
+ const envelope = mail.message.getEnvelope();
157
+ const messageId = mail.message.messageId();
158
+ const recipients = [].concat(envelope.to || []);
185
159
  if (recipients.length > 3) {
186
160
  recipients.push('...and ' + recipients.splice(2).length + ' more');
187
161
  }
188
- this.logger.info(
189
- {
190
- tnx: 'send',
191
- messageId,
192
- cid: this.id
193
- },
194
- 'Sending message %s using #%s to <%s>',
162
+ this.logger.info({
163
+ tnx: 'send',
195
164
  messageId,
196
- this.id,
197
- recipients.join(', ')
198
- );
199
-
165
+ cid: this.id
166
+ }, 'Sending message %s using #%s to <%s>', messageId, this.id, recipients.join(', '));
200
167
  if (mail.data.dsn) {
201
168
  envelope.dsn = mail.data.dsn;
202
169
  }
203
-
170
+ // RFC 8689: Pass requireTLSExtensionEnabled to envelope for MAIL FROM parameter
171
+ if (mail.data.requireTLSExtensionEnabled) {
172
+ envelope.requireTLSExtensionEnabled = mail.data.requireTLSExtensionEnabled;
173
+ }
204
174
  this.connection.send(envelope, mail.message.createReadStream(), (err, info) => {
205
175
  this.messages++;
206
-
207
176
  if (err) {
208
177
  this.connection.close();
209
- this.emit('error', err);
178
+ this._fail(err);
210
179
  return callback(err);
211
180
  }
212
-
213
181
  info.envelope = {
214
182
  from: envelope.from,
215
183
  to: envelope.to
216
184
  };
217
185
  info.messageId = messageId;
218
-
219
186
  setImmediate(() => {
220
- let err;
221
187
  if (this.messages >= this.options.maxMessages) {
222
- err = new Error('Resource exhausted');
223
- err.code = 'EMAXLIMIT';
188
+ const err = new Error('Resource exhausted');
189
+ err.code = errors.EMAXLIMIT;
224
190
  this.connection.close();
225
- this.emit('error', err);
226
- } else {
191
+ this._fail(err);
192
+ }
193
+ else {
227
194
  this.pool._checkRateLimit(() => {
228
195
  this.available = true;
229
196
  this.emit('available');
230
197
  });
231
198
  }
232
199
  });
233
-
234
200
  callback(null, info);
235
201
  });
236
202
  }
237
-
238
203
  /**
239
204
  * Closes the connection
240
205
  */
@@ -249,5 +214,3 @@ class PoolResource extends EventEmitter {
249
214
  this.emit('close');
250
215
  }
251
216
  }
252
-
253
- module.exports = PoolResource;
@@ -0,0 +1,156 @@
1
+ import { EventEmitter } from 'node:events';
2
+ import { type SMTPConnectionOptions, type SMTPConnectionAuth, type SMTPConnectionSendInfo } from '../smtp-connection/index.js';
3
+ import * as shared from '../shared/index.js';
4
+ import { type XOAuth2Options } from '../xoauth2/index.js';
5
+ import type { ResultCallback } from '../errors.js';
6
+ import type MailMessage from '../mailer/mail-message.js';
7
+ import type { default as Mail, GetSocketCallback, SentMessageInfo, SendMailOptions, TransportOptions, VerifyCallback } from '../mailer/index.js';
8
+ import type { MimeNodeEnvelope } from '../mime-node/index.js';
9
+ /**
10
+ * Authentication settings, either from the transport options or from the message data.
11
+ * OAuth2 settings are handed to XOAuth2 as is
12
+ */
13
+ export interface SMTPTransportAuthOptions extends XOAuth2Options {
14
+ /** 'OAuth2' selects XOAUTH2, anything else is a password login, 'LOGIN' when not set */
15
+ type?: string | undefined;
16
+ /** Username */
17
+ user?: string | undefined;
18
+ /** Password */
19
+ pass?: string | undefined;
20
+ /** SASL method to use, e.g. 'PLAIN', 'LOGIN' or 'CRAM-MD5' */
21
+ method?: string | undefined;
22
+ /** Extra options for the authentication method, handed to a custom SASL handler */
23
+ options?: {
24
+ [key: string]: any;
25
+ } | undefined;
26
+ /** Service identifier, an OAuth2 login needs either this or a user */
27
+ service?: string | undefined;
28
+ }
29
+ /**
30
+ * Authentication data built by getAuth() and handed to SMTPConnection#login
31
+ */
32
+ export interface SMTPTransportAuth extends SMTPConnectionAuth {
33
+ /** 'OAUTH2', or the upper cased type from the settings, 'LOGIN' when none was given */
34
+ type: string;
35
+ /** 'XOAUTH2' for OAuth2, otherwise the configured SASL method, false lets the connection pick one */
36
+ method: string | false;
37
+ }
38
+ /**
39
+ * Receives the socket details from getSocket, false when a new socket should be opened. The
40
+ * object is merged into the connection options, a proxy handler provides the connected socket
41
+ * as `connection`. The same callback type Mail hands to a transport, so that the SMTP
42
+ * transports stay assignable to the Transport interface
43
+ */
44
+ export type SMTPTransportGetSocketCallback = GetSocketCallback;
45
+ /**
46
+ * Custom socket provider, replaces the getSocket method of the transport
47
+ */
48
+ export type SMTPTransportGetSocket = (options: SMTPTransportOptions, callback: SMTPTransportGetSocketCallback) => void;
49
+ /**
50
+ * Options for the SMTP transport, the connection options plus the transport level settings
51
+ */
52
+ export interface SMTPTransportOptions extends SMTPConnectionOptions, TransportOptions {
53
+ /** Well-known service name, e.g. 'Gmail', fills in host, port and secure */
54
+ service?: string | undefined;
55
+ /** Connection url, e.g. 'smtps://user:pass@smtp.example.com', parsed into options */
56
+ url?: string | undefined;
57
+ /** Authentication settings, no authentication when not set */
58
+ auth?: SMTPTransportAuthOptions | undefined;
59
+ /** Custom socket provider, e.g. for connecting through a proxy, replaces the getSocket method */
60
+ getSocket?: SMTPTransportGetSocket | undefined;
61
+ /** Authenticate even when the server does not advertise AUTH, and fail verify() when it does but no credentials were given */
62
+ forceAuth?: boolean | undefined;
63
+ /** Default SASL method for the password logins when the auth settings do not name one */
64
+ authMethod?: string | undefined;
65
+ /** Logger component name, defaults to 'smtp-transport' */
66
+ component?: string | undefined;
67
+ /** Set to true to get a pooled transport from createTransport, this transport does not read it */
68
+ pool?: boolean | undefined;
69
+ }
70
+ /**
71
+ * Result of a sent message, the connection result plus the envelope and the Message-ID
72
+ */
73
+ export interface SMTPSentMessageInfo extends SMTPConnectionSendInfo, SentMessageInfo {
74
+ /** Envelope the message was sent with */
75
+ envelope: MimeNodeEnvelope;
76
+ /** Message-ID value of the sent message */
77
+ messageId: string;
78
+ /** Recipients the server accepted */
79
+ accepted: string[];
80
+ /** Recipients the server rejected */
81
+ rejected: string[];
82
+ /** Final server response for the message */
83
+ response: string;
84
+ }
85
+ /**
86
+ * Callback for send()
87
+ */
88
+ export type SMTPTransportSendCallback = ResultCallback<SMTPSentMessageInfo>;
89
+ /**
90
+ * Creates a SMTP transport object for Nodemailer
91
+ *
92
+ * @constructor
93
+ * @param options Connection options
94
+ */
95
+ declare class SMTPTransport extends EventEmitter {
96
+ options: SMTPTransportOptions;
97
+ logger: shared.Logger;
98
+ name: string;
99
+ version: string;
100
+ /**
101
+ * Transport level authentication data, set when the options include auth
102
+ */
103
+ auth?: SMTPTransportAuth | false | undefined;
104
+ /**
105
+ * The Mail instance using this transport, assigned by Mail
106
+ */
107
+ mailer?: Mail<SMTPSentMessageInfo, SMTPTransportOptions> | undefined;
108
+ constructor(options?: SMTPTransportOptions | string);
109
+ /**
110
+ * Placeholder function for creating proxy sockets. This method immediatelly returns
111
+ * without a socket
112
+ *
113
+ * @param options Connection options
114
+ * @param callback Callback function to run with the socket keys
115
+ */
116
+ getSocket(options: SMTPTransportOptions, callback: SMTPTransportGetSocketCallback): void;
117
+ getAuth(authOpts?: SMTPTransportAuthOptions | false | null): SMTPTransportAuth | false | undefined;
118
+ /**
119
+ * Sends an e-mail using the selected settings
120
+ *
121
+ * @param mail Mail object
122
+ * @param callback Callback function
123
+ */
124
+ send(mail: MailMessage<SMTPSentMessageInfo>, callback: SMTPTransportSendCallback): void;
125
+ /**
126
+ * Verifies SMTP configuration
127
+ *
128
+ * @returns Promise that resolves to true if the configuration is usable
129
+ */
130
+ verify(): Promise<true>;
131
+ /**
132
+ * Verifies SMTP configuration
133
+ *
134
+ * @param callback Callback function
135
+ */
136
+ verify(callback: VerifyCallback): void;
137
+ /**
138
+ * Releases resources
139
+ */
140
+ close(): void;
141
+ }
142
+ /**
143
+ * Type aliases in the layout of @types/nodemailer, so `SMTPTransport.Options` style references keep working
144
+ */
145
+ declare namespace SMTPTransport {
146
+ type Options = SMTPTransportOptions;
147
+ type MailOptions = SendMailOptions;
148
+ type SentMessageInfo = SMTPSentMessageInfo;
149
+ type AuthenticationType = SMTPTransportAuth;
150
+ type AuthenticationTypeLogin = SMTPTransportAuth;
151
+ type AuthenticationTypeOAuth2 = SMTPTransportAuth;
152
+ type AuthenticationTypeCustom = SMTPTransportAuth;
153
+ }
154
+ /** The same aliases as module level exports, for `import * as SMTPTransport` and `import SMTPTransport = require()` */
155
+ export type { SMTPTransportOptions as Options, SendMailOptions as MailOptions, SMTPSentMessageInfo as SentMessageInfo, SMTPTransportAuth as AuthenticationType, SMTPTransportAuth as AuthenticationTypeLogin, SMTPTransportAuth as AuthenticationTypeOAuth2, SMTPTransportAuth as AuthenticationTypeCustom };
156
+ export default SMTPTransport;