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

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
@@ -0,0 +1,371 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const node_events_1 = require("node:events");
40
+ const index_js_1 = __importDefault(require("../smtp-connection/index.js"));
41
+ const index_js_2 = __importDefault(require("../well-known/index.js"));
42
+ const shared = __importStar(require("../shared/index.js"));
43
+ const index_js_3 = __importDefault(require("../xoauth2/index.js"));
44
+ const errors = __importStar(require("../errors.js"));
45
+ const packageData = __importStar(require("../package-info.js"));
46
+ /**
47
+ * Creates a SMTP transport object for Nodemailer
48
+ *
49
+ * @constructor
50
+ * @param options Connection options
51
+ */
52
+ class SMTPTransport extends node_events_1.EventEmitter {
53
+ constructor(options) {
54
+ super();
55
+ options = options || {};
56
+ if (typeof options === 'string') {
57
+ options = {
58
+ url: options
59
+ };
60
+ }
61
+ let urlData;
62
+ let service = options.service;
63
+ if (typeof options.getSocket === 'function') {
64
+ this.getSocket = options.getSocket;
65
+ }
66
+ if (options.url) {
67
+ urlData = shared.parseConnectionUrl(options.url);
68
+ service = service || urlData.service;
69
+ }
70
+ this.options = shared.assign(false, // create new object
71
+ options, // regular options
72
+ urlData, // url options
73
+ (service && (0, index_js_2.default)(service)) // wellknown options
74
+ );
75
+ this.logger = shared.getLogger(this.options, {
76
+ component: this.options.component || 'smtp-transport'
77
+ });
78
+ this.name = 'SMTP';
79
+ this.version = packageData.version + '[client:' + packageData.version + ']';
80
+ if (this.options.auth) {
81
+ this.auth = this.getAuth({});
82
+ }
83
+ }
84
+ /**
85
+ * Placeholder function for creating proxy sockets. This method immediatelly returns
86
+ * without a socket
87
+ *
88
+ * @param options Connection options
89
+ * @param callback Callback function to run with the socket keys
90
+ */
91
+ getSocket(options, callback) {
92
+ // return immediatelly
93
+ setImmediate(() => callback(null, false));
94
+ }
95
+ getAuth(authOpts) {
96
+ if (!authOpts) {
97
+ if (this.auth && this.auth.oauth2 && this.mailer) {
98
+ // Transport-level auth is resolved in the constructor, before the Mail wrapper
99
+ // assigns `this.mailer`, so a provision callback registered with
100
+ // `transporter.set('oauth2_provision_cb', ...)` has to be re-checked here
101
+ this.auth.oauth2.provisionCallback = this.mailer.get('oauth2_provision_cb') || this.auth.oauth2.provisionCallback;
102
+ }
103
+ return this.auth;
104
+ }
105
+ const authData = Object.assign({}, this.options.auth && typeof this.options.auth === 'object' ? this.options.auth : {}, typeof authOpts === 'object' ? authOpts : {});
106
+ if (Object.keys(authData).length === 0) {
107
+ return false;
108
+ }
109
+ switch ((authData.type || '').toString().toUpperCase()) {
110
+ case 'OAUTH2': {
111
+ if (!authData.service && !authData.user) {
112
+ return false;
113
+ }
114
+ const oauth2 = new index_js_3.default(authData, this.logger);
115
+ oauth2.provisionCallback = (this.mailer && this.mailer.get('oauth2_provision_cb')) || oauth2.provisionCallback;
116
+ oauth2.on('token', (token) => this.mailer.emit('token', token));
117
+ oauth2.on('error', err => this.emit('error', err));
118
+ return {
119
+ type: 'OAUTH2',
120
+ user: authData.user,
121
+ oauth2,
122
+ method: 'XOAUTH2'
123
+ };
124
+ }
125
+ default:
126
+ return {
127
+ type: (authData.type || '').toString().toUpperCase() || 'LOGIN',
128
+ user: authData.user,
129
+ credentials: {
130
+ user: authData.user || '',
131
+ pass: authData.pass,
132
+ options: authData.options
133
+ },
134
+ method: (authData.method || '').trim().toUpperCase() || this.options.authMethod || false
135
+ };
136
+ }
137
+ }
138
+ /**
139
+ * Sends an e-mail using the selected settings
140
+ *
141
+ * @param mail Mail object
142
+ * @param callback Callback function
143
+ */
144
+ send(mail, callback) {
145
+ this.getSocket(this.options, (err, socketOptions) => {
146
+ if (err) {
147
+ return callback(err);
148
+ }
149
+ let returned = false;
150
+ let options = this.options;
151
+ if (socketOptions && socketOptions.connection) {
152
+ this.logger.info({
153
+ tnx: 'proxy',
154
+ remoteAddress: socketOptions.connection.remoteAddress,
155
+ remotePort: socketOptions.connection.remotePort,
156
+ destHost: options.host || '',
157
+ destPort: options.port || '',
158
+ action: 'connected'
159
+ }, 'Using proxied socket from %s:%s to %s:%s', socketOptions.connection.remoteAddress, socketOptions.connection.remotePort, options.host || '', options.port || '');
160
+ // only copy options if we need to modify it
161
+ options = Object.assign(shared.assign(false, options), socketOptions);
162
+ }
163
+ const connection = new index_js_1.default(options);
164
+ let perCallAuth;
165
+ const cleanupPerCallAuth = () => {
166
+ if (perCallAuth && perCallAuth !== this.auth && perCallAuth.oauth2) {
167
+ perCallAuth.oauth2.removeAllListeners();
168
+ }
169
+ perCallAuth = null;
170
+ };
171
+ connection.once('error', err => {
172
+ if (returned) {
173
+ return;
174
+ }
175
+ returned = true;
176
+ cleanupPerCallAuth();
177
+ connection.close();
178
+ return callback(err);
179
+ });
180
+ const sendMessage = () => {
181
+ const envelope = mail.message.getEnvelope();
182
+ const messageId = mail.message.messageId();
183
+ const recipients = [].concat(envelope.to || []);
184
+ if (recipients.length > 3) {
185
+ recipients.push('...and ' + recipients.splice(2).length + ' more');
186
+ }
187
+ if (mail.data.dsn) {
188
+ envelope.dsn = mail.data.dsn;
189
+ }
190
+ // RFC 8689: Pass requireTLSExtensionEnabled to envelope for MAIL FROM parameter
191
+ if (mail.data.requireTLSExtensionEnabled) {
192
+ envelope.requireTLSExtensionEnabled = mail.data.requireTLSExtensionEnabled;
193
+ }
194
+ this.logger.info({
195
+ tnx: 'send',
196
+ messageId
197
+ }, 'Sending message %s to <%s>', messageId, recipients.join(', '));
198
+ connection.send(envelope, mail.message.createReadStream(), (err, info) => {
199
+ if (returned) {
200
+ // the connection error handler has already reported this send
201
+ return;
202
+ }
203
+ returned = true;
204
+ cleanupPerCallAuth();
205
+ connection.close();
206
+ if (err) {
207
+ this.logger.error({
208
+ err,
209
+ tnx: 'send'
210
+ }, 'Send error for %s: %s', messageId, err.message);
211
+ return callback(err);
212
+ }
213
+ info.envelope = {
214
+ from: envelope.from,
215
+ to: envelope.to
216
+ };
217
+ info.messageId = messageId;
218
+ try {
219
+ return callback(null, info);
220
+ }
221
+ catch (E) {
222
+ this.logger.error({
223
+ err: E,
224
+ tnx: 'callback'
225
+ }, 'Callback error for %s: %s', messageId, E.message);
226
+ }
227
+ });
228
+ };
229
+ connection.connect(err => {
230
+ if (returned) {
231
+ return;
232
+ }
233
+ if (err) {
234
+ // the server closed the connection before the greeting
235
+ returned = true;
236
+ connection.close();
237
+ return callback(err);
238
+ }
239
+ perCallAuth = this.getAuth(mail.data.auth);
240
+ if (perCallAuth && (connection.allowsAuth || options.forceAuth)) {
241
+ connection.login(perCallAuth, err => {
242
+ cleanupPerCallAuth();
243
+ if (returned) {
244
+ return;
245
+ }
246
+ if (err) {
247
+ returned = true;
248
+ connection.close();
249
+ return callback(err);
250
+ }
251
+ sendMessage();
252
+ });
253
+ }
254
+ else {
255
+ sendMessage();
256
+ }
257
+ });
258
+ });
259
+ }
260
+ verify(callback) {
261
+ let promise;
262
+ if (!callback) {
263
+ promise = new Promise((resolve, reject) => {
264
+ callback = shared.callbackPromise(resolve, reject);
265
+ });
266
+ }
267
+ // the error paths hand over the error alone
268
+ const done = callback;
269
+ this.getSocket(this.options, (err, socketOptions) => {
270
+ if (err) {
271
+ return done(err);
272
+ }
273
+ let options = this.options;
274
+ if (socketOptions && socketOptions.connection) {
275
+ this.logger.info({
276
+ tnx: 'proxy',
277
+ remoteAddress: socketOptions.connection.remoteAddress,
278
+ remotePort: socketOptions.connection.remotePort,
279
+ destHost: options.host || '',
280
+ destPort: options.port || '',
281
+ action: 'connected'
282
+ }, 'Using proxied socket from %s:%s to %s:%s', socketOptions.connection.remoteAddress, socketOptions.connection.remotePort, options.host || '', options.port || '');
283
+ options = Object.assign(shared.assign(false, options), socketOptions);
284
+ }
285
+ const connection = new index_js_1.default(options);
286
+ let returned = false;
287
+ let perCallAuth;
288
+ const cleanupPerCallAuth = () => {
289
+ if (perCallAuth && perCallAuth !== this.auth && perCallAuth.oauth2) {
290
+ perCallAuth.oauth2.removeAllListeners();
291
+ }
292
+ perCallAuth = null;
293
+ };
294
+ connection.once('error', err => {
295
+ if (returned) {
296
+ return;
297
+ }
298
+ returned = true;
299
+ cleanupPerCallAuth();
300
+ connection.close();
301
+ return done(err);
302
+ });
303
+ connection.once('end', () => {
304
+ if (returned) {
305
+ return;
306
+ }
307
+ returned = true;
308
+ cleanupPerCallAuth();
309
+ return done(new Error('Connection closed'));
310
+ });
311
+ const finalize = () => {
312
+ if (returned) {
313
+ return;
314
+ }
315
+ returned = true;
316
+ cleanupPerCallAuth();
317
+ connection.quit();
318
+ return done(null, true);
319
+ };
320
+ connection.connect(err => {
321
+ if (returned) {
322
+ return;
323
+ }
324
+ if (err) {
325
+ returned = true;
326
+ connection.close();
327
+ return done(err);
328
+ }
329
+ perCallAuth = this.getAuth({});
330
+ if (perCallAuth && (connection.allowsAuth || options.forceAuth)) {
331
+ connection.login(perCallAuth, err => {
332
+ cleanupPerCallAuth();
333
+ if (returned) {
334
+ return;
335
+ }
336
+ if (err) {
337
+ returned = true;
338
+ connection.close();
339
+ return done(err);
340
+ }
341
+ finalize();
342
+ });
343
+ }
344
+ else if (!perCallAuth && connection.allowsAuth && options.forceAuth) {
345
+ const err = new Error('Authentication info was not provided');
346
+ err.code = errors.ENOAUTH;
347
+ returned = true;
348
+ cleanupPerCallAuth();
349
+ connection.close();
350
+ return done(err);
351
+ }
352
+ else {
353
+ finalize();
354
+ }
355
+ });
356
+ });
357
+ return promise;
358
+ }
359
+ /**
360
+ * Releases resources
361
+ */
362
+ close() {
363
+ if (this.auth && this.auth.oauth2) {
364
+ this.auth.oauth2.removeAllListeners();
365
+ }
366
+ this.emit('close');
367
+ }
368
+ }
369
+ exports.default = SMTPTransport;
370
+ module.exports = exports.default;
371
+ Object.defineProperty(module.exports, 'default', { value: exports.default, enumerable: false, writable: true, configurable: true });
@@ -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;
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const packageData = __importStar(require("../package-info.js"));
40
+ const shared = __importStar(require("../shared/index.js"));
41
+ const le_windows_js_1 = __importDefault(require("../mime-node/le-windows.js"));
42
+ const le_unix_js_1 = __importDefault(require("../mime-node/le-unix.js"));
43
+ /**
44
+ * Generates a Transport object for streaming
45
+ *
46
+ * Possible options can be the following:
47
+ *
48
+ * * **buffer** if true, then returns the message as a Buffer object instead of a stream
49
+ * * **newline** either 'windows' or 'unix'
50
+ *
51
+ * @constructor
52
+ * @param optional config parameter
53
+ */
54
+ class StreamTransport {
55
+ constructor(options) {
56
+ options = options || {};
57
+ this.options = options;
58
+ this.name = 'StreamTransport';
59
+ this.version = packageData.version;
60
+ this.logger = shared.getLogger(this.options, {
61
+ component: this.options.component || 'stream-transport'
62
+ });
63
+ this.winbreak = ['win', 'windows', 'dos', '\r\n'].includes((options.newline || '').toString().toLowerCase());
64
+ }
65
+ /**
66
+ * Compiles a mailcomposer message and forwards it to handler that sends it
67
+ *
68
+ * @param mail MailComposer object
69
+ * @param done Callback function to run when the sending is completed
70
+ */
71
+ send(mail, done) {
72
+ // We probably need this in the output. send() runs after the message was compiled,
73
+ // so mail.message is set
74
+ mail.message.keepBcc = true;
75
+ const envelope = mail.message.getEnvelope();
76
+ const messageId = mail.message.messageId();
77
+ const recipients = [].concat(envelope.to || []);
78
+ if (recipients.length > 3) {
79
+ recipients.push('...and ' + recipients.splice(2).length + ' more');
80
+ }
81
+ this.logger.info({
82
+ tnx: 'send',
83
+ messageId
84
+ }, 'Sending message %s to <%s> using %s line breaks', messageId, recipients.join(', '), this.winbreak ? '<CR><LF>' : '<LF>');
85
+ setImmediate(() => {
86
+ let stream;
87
+ try {
88
+ stream = mail.message.createReadStream();
89
+ if (this.options.newline) {
90
+ // apply the transport-level line ending transform; the message-level
91
+ // `newline` option is handled by MimeNode in createReadStream()
92
+ const sourceStream = stream;
93
+ stream = sourceStream.pipe(this.winbreak ? new le_windows_js_1.default() : new le_unix_js_1.default());
94
+ sourceStream.once('error', err => stream.emit('error', err));
95
+ }
96
+ }
97
+ catch (E) {
98
+ this.logger.error({
99
+ err: E,
100
+ tnx: 'send',
101
+ messageId
102
+ }, 'Creating send stream failed for %s. %s', messageId, E.message);
103
+ return done(E);
104
+ }
105
+ if (!this.options.buffer) {
106
+ stream.once('error', err => {
107
+ this.logger.error({
108
+ err,
109
+ tnx: 'send',
110
+ messageId
111
+ }, 'Failed creating message for %s. %s', messageId, err.message);
112
+ });
113
+ return done(null, {
114
+ envelope,
115
+ messageId,
116
+ message: stream
117
+ });
118
+ }
119
+ const chunks = [];
120
+ let chunklen = 0;
121
+ stream.on('readable', () => {
122
+ let chunk;
123
+ while ((chunk = stream.read()) !== null) {
124
+ chunks.push(chunk);
125
+ chunklen += chunk.length;
126
+ }
127
+ });
128
+ stream.once('error', err => {
129
+ this.logger.error({
130
+ err,
131
+ tnx: 'send',
132
+ messageId
133
+ }, 'Failed creating message for %s. %s', messageId, err.message);
134
+ return done(err);
135
+ });
136
+ stream.on('end', () => done(null, {
137
+ envelope,
138
+ messageId,
139
+ message: Buffer.concat(chunks, chunklen)
140
+ }));
141
+ });
142
+ }
143
+ }
144
+ exports.default = StreamTransport;
145
+ module.exports = exports.default;
146
+ Object.defineProperty(module.exports, 'default', { value: exports.default, enumerable: false, writable: true, configurable: true });
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Connection settings of a well-known e-mail service
3
+ */
4
+ export interface WellKnownServiceDefinition {
5
+ /** Human readable description of the service */
6
+ description?: string | undefined;
7
+ /** Domains of e-mail addresses hosted by the service */
8
+ domains?: string[] | undefined;
9
+ /** Alternative names the service can be looked up by */
10
+ aliases?: string[] | undefined;
11
+ /** SMTP hostname */
12
+ host?: string | undefined;
13
+ /** SMTP port (a numeric string in a few entries) */
14
+ port?: number | string | undefined;
15
+ /** true for implicit TLS (usually port 465) */
16
+ secure?: boolean | undefined;
17
+ /** Preferred authentication method */
18
+ authMethod?: string | undefined;
19
+ /** Set to true to require STARTTLS on a plaintext connection */
20
+ requireTLS?: boolean | undefined;
21
+ /** Set to true to skip STARTTLS */
22
+ ignoreTLS?: boolean | undefined;
23
+ }
24
+ /**
25
+ * SMTP settings of a well-known service, without the lookup keys
26
+ */
27
+ export type WellKnownService = Omit<WellKnownServiceDefinition, 'domains' | 'aliases'>;
28
+ /**
29
+ * Resolves SMTP config for given key. Key can be a name (like 'Gmail'), alias (like 'Google Mail') or
30
+ * an email address (like 'test@googlemail.com').
31
+ *
32
+ * @param key Service name, alias or an email address
33
+ * @returns SMTP config or false if not found
34
+ */
35
+ export default function wellKnown(key: string): WellKnownService | false;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = wellKnown;
4
+ const services_js_1 = require("./services.js");
5
+ const normalized = {};
6
+ Object.keys(services_js_1.services).forEach(key => {
7
+ const service = services_js_1.services[key];
8
+ const normalizedService = normalizeService(service);
9
+ normalized[normalizeKey(key)] = normalizedService;
10
+ [].concat(service.aliases || []).forEach(alias => {
11
+ normalized[normalizeKey(alias)] = normalizedService;
12
+ });
13
+ [].concat(service.domains || []).forEach(domain => {
14
+ normalized[normalizeKey(domain)] = normalizedService;
15
+ });
16
+ });
17
+ function normalizeKey(key) {
18
+ return key.replace(/[^a-zA-Z0-9.-]/g, '').toLowerCase();
19
+ }
20
+ function normalizeService(service) {
21
+ const response = {};
22
+ Object.keys(service).forEach(key => {
23
+ if (!['domains', 'aliases'].includes(key)) {
24
+ response[key] = service[key];
25
+ }
26
+ });
27
+ return response;
28
+ }
29
+ /**
30
+ * Resolves SMTP config for given key. Key can be a name (like 'Gmail'), alias (like 'Google Mail') or
31
+ * an email address (like 'test@googlemail.com').
32
+ *
33
+ * @param key Service name, alias or an email address
34
+ * @returns SMTP config or false if not found
35
+ */
36
+ function wellKnown(key) {
37
+ key = normalizeKey(key.split('@').pop());
38
+ return normalized[key] || false;
39
+ }
40
+ module.exports = exports.default;
41
+ Object.defineProperty(module.exports, 'default', { value: exports.default, enumerable: false, writable: true, configurable: true });
@@ -0,0 +1,2 @@
1
+ import type { WellKnownServiceDefinition } from './index.js';
2
+ export declare const services: Record<string, WellKnownServiceDefinition>;