@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.
- package/dist/externalVersion.js +6 -6
- package/dist/node_modules/joi/package.json +1 -1
- package/dist/node_modules/nodemailer/dist/cjs/addressparser/index.d.ts +59 -0
- package/dist/node_modules/nodemailer/dist/cjs/addressparser/index.js +790 -0
- package/dist/node_modules/nodemailer/dist/cjs/base64/index.d.ts +36 -0
- package/dist/node_modules/nodemailer/dist/cjs/base64/index.js +119 -0
- package/dist/node_modules/nodemailer/dist/cjs/dkim/index.d.ts +52 -0
- package/dist/node_modules/nodemailer/dist/cjs/dkim/index.js +228 -0
- package/dist/node_modules/nodemailer/dist/cjs/dkim/message-parser.d.ts +48 -0
- package/dist/node_modules/nodemailer/dist/cjs/dkim/message-parser.js +180 -0
- package/dist/node_modules/nodemailer/dist/cjs/dkim/relaxed-body.d.ts +36 -0
- package/dist/node_modules/nodemailer/dist/cjs/dkim/relaxed-body.js +148 -0
- package/dist/node_modules/nodemailer/dist/cjs/dkim/sign.d.ts +52 -0
- package/dist/node_modules/nodemailer/dist/cjs/dkim/sign.js +165 -0
- package/dist/node_modules/nodemailer/dist/cjs/errors.d.ts +96 -0
- package/dist/node_modules/nodemailer/dist/cjs/errors.js +70 -0
- package/dist/node_modules/nodemailer/dist/cjs/fetch/cookies.d.ts +107 -0
- package/dist/node_modules/nodemailer/dist/cjs/fetch/cookies.js +282 -0
- package/dist/node_modules/nodemailer/dist/cjs/fetch/index.d.ts +65 -0
- package/dist/node_modules/nodemailer/dist/cjs/fetch/index.js +384 -0
- package/dist/node_modules/nodemailer/dist/cjs/json-transport/index.d.ts +64 -0
- package/dist/node_modules/nodemailer/dist/cjs/json-transport/index.js +99 -0
- package/dist/node_modules/nodemailer/dist/cjs/mail-composer/index.d.ts +174 -0
- package/dist/node_modules/nodemailer/dist/cjs/mail-composer/index.js +613 -0
- package/dist/node_modules/nodemailer/dist/cjs/mailer/index.d.ts +237 -0
- package/dist/node_modules/nodemailer/dist/cjs/mailer/index.js +415 -0
- package/dist/node_modules/nodemailer/dist/cjs/mailer/mail-message.d.ts +97 -0
- package/dist/node_modules/nodemailer/dist/cjs/mailer/mail-message.js +342 -0
- package/dist/node_modules/nodemailer/dist/cjs/mime-funcs/index.d.ts +161 -0
- package/dist/node_modules/nodemailer/dist/cjs/mime-funcs/index.js +787 -0
- package/dist/node_modules/nodemailer/dist/cjs/mime-funcs/mime-types.d.ts +2 -0
- package/dist/node_modules/nodemailer/dist/cjs/mime-funcs/mime-types.js +2103 -0
- package/dist/node_modules/nodemailer/dist/cjs/mime-node/index.d.ts +333 -0
- package/dist/node_modules/nodemailer/dist/cjs/mime-node/index.js +1493 -0
- package/dist/node_modules/nodemailer/dist/cjs/mime-node/last-newline.d.ts +5 -0
- package/dist/node_modules/nodemailer/dist/cjs/mime-node/last-newline.js +32 -0
- package/dist/node_modules/nodemailer/dist/cjs/mime-node/le-unix.d.ts +9 -0
- package/dist/node_modules/nodemailer/dist/cjs/mime-node/le-unix.js +40 -0
- package/dist/node_modules/nodemailer/dist/cjs/mime-node/le-windows.d.ts +10 -0
- package/dist/node_modules/nodemailer/dist/cjs/mime-node/le-windows.js +47 -0
- package/dist/node_modules/nodemailer/dist/cjs/nodemailer.d.ts +124 -0
- package/dist/node_modules/nodemailer/dist/cjs/nodemailer.js +1 -0
- package/dist/node_modules/nodemailer/dist/cjs/package-info.d.ts +3 -0
- package/dist/node_modules/nodemailer/dist/cjs/package-info.js +7 -0
- package/dist/node_modules/nodemailer/dist/cjs/package.json +3 -0
- package/dist/node_modules/nodemailer/dist/cjs/punycode/index.d.ts +73 -0
- package/dist/node_modules/nodemailer/{lib → dist/cjs}/punycode/index.js +62 -111
- package/dist/node_modules/nodemailer/dist/cjs/qp/index.d.ts +32 -0
- package/dist/node_modules/nodemailer/dist/cjs/qp/index.js +207 -0
- package/dist/node_modules/nodemailer/dist/cjs/sendmail-transport/index.d.ts +69 -0
- package/dist/node_modules/nodemailer/dist/cjs/sendmail-transport/index.js +210 -0
- package/dist/node_modules/nodemailer/dist/cjs/ses-transport/index.d.ts +112 -0
- package/dist/node_modules/nodemailer/dist/cjs/ses-transport/index.js +252 -0
- package/dist/node_modules/nodemailer/dist/cjs/shared/index.d.ts +260 -0
- package/dist/node_modules/nodemailer/dist/cjs/shared/index.js +680 -0
- package/dist/node_modules/nodemailer/dist/cjs/shared/objects.d.ts +23 -0
- package/dist/node_modules/nodemailer/dist/cjs/shared/objects.js +43 -0
- package/dist/node_modules/nodemailer/dist/cjs/shared/url.d.ts +21 -0
- package/dist/node_modules/nodemailer/dist/cjs/shared/url.js +255 -0
- package/dist/node_modules/nodemailer/dist/cjs/smtp-connection/data-stream.d.ts +15 -0
- package/dist/node_modules/nodemailer/dist/cjs/smtp-connection/data-stream.js +108 -0
- package/dist/node_modules/nodemailer/dist/cjs/smtp-connection/http-proxy-client.d.ts +47 -0
- package/dist/node_modules/nodemailer/dist/cjs/smtp-connection/http-proxy-client.js +189 -0
- package/dist/node_modules/nodemailer/dist/cjs/smtp-connection/index.d.ts +416 -0
- package/dist/node_modules/nodemailer/dist/cjs/smtp-connection/index.js +1837 -0
- package/dist/node_modules/nodemailer/dist/cjs/smtp-pool/index.d.ts +133 -0
- package/dist/node_modules/nodemailer/dist/cjs/smtp-pool/index.js +569 -0
- package/dist/node_modules/nodemailer/dist/cjs/smtp-pool/pool-resource.d.ts +62 -0
- package/dist/node_modules/nodemailer/dist/cjs/smtp-pool/pool-resource.js +257 -0
- package/dist/node_modules/nodemailer/dist/cjs/smtp-transport/index.d.ts +156 -0
- package/dist/node_modules/nodemailer/dist/cjs/smtp-transport/index.js +371 -0
- package/dist/node_modules/nodemailer/dist/cjs/stream-transport/index.d.ts +65 -0
- package/dist/node_modules/nodemailer/dist/cjs/stream-transport/index.js +146 -0
- package/dist/node_modules/nodemailer/dist/cjs/well-known/index.d.ts +35 -0
- package/dist/node_modules/nodemailer/dist/cjs/well-known/index.js +41 -0
- package/dist/node_modules/nodemailer/dist/cjs/well-known/services.d.ts +2 -0
- package/dist/node_modules/nodemailer/dist/cjs/well-known/services.js +674 -0
- package/dist/node_modules/nodemailer/dist/cjs/xoauth2/index.d.ts +201 -0
- package/dist/node_modules/nodemailer/dist/cjs/xoauth2/index.js +426 -0
- package/dist/node_modules/nodemailer/dist/esm/addressparser/index.d.ts +59 -0
- package/dist/node_modules/nodemailer/{lib → dist/esm}/addressparser/index.js +361 -131
- package/dist/node_modules/nodemailer/dist/esm/base64/index.d.ts +36 -0
- package/dist/node_modules/nodemailer/{lib → dist/esm}/base64/index.js +31 -56
- package/dist/node_modules/nodemailer/dist/esm/dkim/index.d.ts +52 -0
- package/dist/node_modules/nodemailer/{lib → dist/esm}/dkim/index.js +49 -78
- package/dist/node_modules/nodemailer/dist/esm/dkim/message-parser.d.ts +48 -0
- package/dist/node_modules/nodemailer/{lib → dist/esm}/dkim/message-parser.js +64 -42
- package/dist/node_modules/nodemailer/dist/esm/dkim/relaxed-body.d.ts +36 -0
- package/dist/node_modules/nodemailer/dist/esm/dkim/relaxed-body.js +141 -0
- package/dist/node_modules/nodemailer/dist/esm/dkim/sign.d.ts +52 -0
- package/dist/node_modules/nodemailer/{lib → dist/esm}/dkim/sign.js +50 -46
- package/dist/node_modules/nodemailer/dist/esm/errors.d.ts +96 -0
- package/dist/node_modules/nodemailer/{lib → dist/esm}/errors.js +26 -18
- package/dist/node_modules/nodemailer/dist/esm/fetch/cookies.d.ts +107 -0
- package/dist/node_modules/nodemailer/dist/esm/fetch/cookies.js +242 -0
- package/dist/node_modules/nodemailer/dist/esm/fetch/index.d.ts +65 -0
- package/dist/node_modules/nodemailer/{lib → dist/esm}/fetch/index.js +80 -147
- package/dist/node_modules/nodemailer/dist/esm/json-transport/index.d.ts +64 -0
- package/dist/node_modules/nodemailer/{lib → dist/esm}/json-transport/index.js +19 -39
- package/dist/node_modules/nodemailer/dist/esm/mail-composer/index.d.ts +174 -0
- package/dist/node_modules/nodemailer/{lib → dist/esm}/mail-composer/index.js +199 -265
- package/dist/node_modules/nodemailer/dist/esm/mailer/index.d.ts +237 -0
- package/dist/node_modules/nodemailer/{lib → dist/esm}/mailer/index.js +128 -234
- package/dist/node_modules/nodemailer/dist/esm/mailer/mail-message.d.ts +97 -0
- package/dist/node_modules/nodemailer/{lib → dist/esm}/mailer/mail-message.js +62 -114
- package/dist/node_modules/nodemailer/dist/esm/mime-funcs/index.d.ts +161 -0
- package/dist/node_modules/nodemailer/dist/esm/mime-funcs/index.js +738 -0
- package/dist/node_modules/nodemailer/dist/esm/mime-funcs/mime-types.d.ts +2 -0
- package/dist/node_modules/nodemailer/{lib → dist/esm}/mime-funcs/mime-types.js +29 -42
- package/dist/node_modules/nodemailer/dist/esm/mime-node/index.d.ts +333 -0
- package/dist/node_modules/nodemailer/{lib → dist/esm}/mime-node/index.js +259 -372
- package/dist/node_modules/nodemailer/dist/esm/mime-node/last-newline.d.ts +5 -0
- package/dist/node_modules/nodemailer/{lib → dist/esm}/mime-node/last-newline.js +4 -10
- package/dist/node_modules/nodemailer/dist/esm/mime-node/le-unix.d.ts +9 -0
- package/dist/node_modules/nodemailer/{lib → dist/esm}/mime-node/le-unix.js +6 -11
- package/dist/node_modules/nodemailer/dist/esm/mime-node/le-windows.d.ts +10 -0
- package/dist/node_modules/nodemailer/{lib → dist/esm}/mime-node/le-windows.js +6 -13
- package/dist/node_modules/nodemailer/dist/esm/nodemailer.d.ts +124 -0
- package/dist/node_modules/nodemailer/dist/esm/nodemailer.js +166 -0
- package/dist/node_modules/nodemailer/dist/esm/package-info.d.ts +3 -0
- package/dist/node_modules/nodemailer/dist/esm/package-info.js +4 -0
- package/dist/node_modules/nodemailer/dist/esm/package.json +3 -0
- package/dist/node_modules/nodemailer/dist/esm/punycode/index.d.ts +73 -0
- package/dist/node_modules/nodemailer/dist/esm/punycode/index.js +405 -0
- package/dist/node_modules/nodemailer/dist/esm/qp/index.d.ts +32 -0
- package/dist/node_modules/nodemailer/{lib → dist/esm}/qp/index.js +38 -67
- package/dist/node_modules/nodemailer/dist/esm/sendmail-transport/index.d.ts +69 -0
- package/dist/node_modules/nodemailer/{lib → dist/esm}/sendmail-transport/index.js +51 -101
- package/dist/node_modules/nodemailer/dist/esm/ses-transport/index.d.ts +112 -0
- package/dist/node_modules/nodemailer/dist/esm/ses-transport/index.js +212 -0
- package/dist/node_modules/nodemailer/dist/esm/shared/index.d.ts +260 -0
- package/dist/node_modules/nodemailer/{lib → dist/esm}/shared/index.js +156 -272
- package/dist/node_modules/nodemailer/dist/esm/shared/objects.d.ts +23 -0
- package/dist/node_modules/nodemailer/{lib → dist/esm}/shared/objects.js +13 -17
- package/dist/node_modules/nodemailer/dist/esm/shared/url.d.ts +21 -0
- package/dist/node_modules/nodemailer/dist/esm/shared/url.js +214 -0
- package/dist/node_modules/nodemailer/dist/esm/smtp-connection/data-stream.d.ts +15 -0
- package/dist/node_modules/nodemailer/dist/esm/smtp-connection/data-stream.js +103 -0
- package/dist/node_modules/nodemailer/dist/esm/smtp-connection/http-proxy-client.d.ts +47 -0
- package/dist/node_modules/nodemailer/{lib → dist/esm}/smtp-connection/http-proxy-client.js +49 -74
- package/dist/node_modules/nodemailer/dist/esm/smtp-connection/index.d.ts +416 -0
- package/dist/node_modules/nodemailer/{lib → dist/esm}/smtp-connection/index.js +574 -794
- package/dist/node_modules/nodemailer/dist/esm/smtp-pool/index.d.ts +133 -0
- package/dist/node_modules/nodemailer/{lib → dist/esm}/smtp-pool/index.js +172 -284
- package/dist/node_modules/nodemailer/dist/esm/smtp-pool/pool-resource.d.ts +62 -0
- package/dist/node_modules/nodemailer/{lib → dist/esm}/smtp-pool/pool-resource.js +57 -97
- package/dist/node_modules/nodemailer/dist/esm/smtp-transport/index.d.ts +156 -0
- package/dist/node_modules/nodemailer/{lib → dist/esm}/smtp-transport/index.js +81 -179
- package/dist/node_modules/nodemailer/dist/esm/stream-transport/index.d.ts +65 -0
- package/dist/node_modules/nodemailer/{lib → dist/esm}/stream-transport/index.js +36 -74
- package/dist/node_modules/nodemailer/dist/esm/well-known/index.d.ts +35 -0
- package/dist/node_modules/nodemailer/{lib → dist/esm}/well-known/index.js +5 -16
- package/dist/node_modules/nodemailer/dist/esm/well-known/services.d.ts +2 -0
- package/dist/node_modules/nodemailer/dist/esm/well-known/services.js +671 -0
- package/dist/node_modules/nodemailer/dist/esm/xoauth2/index.d.ts +201 -0
- package/dist/node_modules/nodemailer/{lib → dist/esm}/xoauth2/index.js +125 -187
- package/dist/node_modules/nodemailer/{lib → dist}/well-known/services.json +9 -2
- package/dist/node_modules/nodemailer/package.json +1 -1
- package/package.json +3 -3
- package/dist/node_modules/nodemailer/.gitattributes +0 -6
- package/dist/node_modules/nodemailer/.ncurc.js +0 -9
- package/dist/node_modules/nodemailer/.prettierignore +0 -8
- package/dist/node_modules/nodemailer/.prettierrc +0 -12
- package/dist/node_modules/nodemailer/.prettierrc.js +0 -10
- package/dist/node_modules/nodemailer/.release-please-config.json +0 -9
- package/dist/node_modules/nodemailer/eslint.config.js +0 -88
- package/dist/node_modules/nodemailer/lib/dkim/relaxed-body.js +0 -154
- package/dist/node_modules/nodemailer/lib/fetch/cookies.js +0 -276
- package/dist/node_modules/nodemailer/lib/mime-funcs/index.js +0 -671
- package/dist/node_modules/nodemailer/lib/nodemailer.js +0 -1
- package/dist/node_modules/nodemailer/lib/ses-transport/index.js +0 -266
- package/dist/node_modules/nodemailer/lib/shared/url.js +0 -151
- package/dist/node_modules/nodemailer/lib/smtp-connection/data-stream.js +0 -105
|
@@ -1,74 +1,59 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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
|
|
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
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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
|
|
65
|
-
* @param
|
|
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
|
-
|
|
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
|
|
127
|
-
* @param
|
|
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
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
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
|
-
|
|
224
|
-
|
|
225
|
-
|
|
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
|
-
|
|
241
|
-
|
|
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
|
-
}
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
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
|
-
}
|
|
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
|
|
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
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
301
|
+
return done(err);
|
|
396
302
|
}
|
|
397
|
-
|
|
398
303
|
finalize();
|
|
399
304
|
});
|
|
400
|
-
}
|
|
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
|
|
408
|
-
}
|
|
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;
|