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