@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
|
@@ -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 });
|