@flun/mailer 2.1.4
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/CHANGELOG.md +4 -0
- package/LICENSE +15 -0
- package/Mail.js +47 -0
- package/README.md +475 -0
- package/copy-files.js +36 -0
- package/index.d.ts +816 -0
- package/index.js +109 -0
- package/lib/addressparser.js +230 -0
- package/lib/base64.js +103 -0
- package/lib/dkim/index.js +211 -0
- package/lib/dkim/message-parser.js +114 -0
- package/lib/dkim/relaxed-body.js +133 -0
- package/lib/dkim/sign.js +121 -0
- package/lib/fetch/cookies.js +224 -0
- package/lib/fetch/index.js +233 -0
- package/lib/http-proxy-client.js +98 -0
- package/lib/json-transport.js +38 -0
- package/lib/mail-composer.js +316 -0
- package/lib/mailer/index.js +301 -0
- package/lib/mailer/mail-message.js +226 -0
- package/lib/mime-funcs/index.js +493 -0
- package/lib/mime-funcs/mime-types.js +2061 -0
- package/lib/mime-node/index.js +811 -0
- package/lib/mime-node/last-newline.js +44 -0
- package/lib/mime-node/le-unix.js +37 -0
- package/lib/mime-node/le-windows.js +46 -0
- package/lib/punycode.js +283 -0
- package/lib/qp.js +171 -0
- package/lib/regexs.js +124 -0
- package/lib/sendmail-transport.js +91 -0
- package/lib/ses-transport.js +115 -0
- package/lib/shared.js +725 -0
- package/lib/smtp-connection/data-stream.js +68 -0
- package/lib/smtp-connection/index.js +1062 -0
- package/lib/smtp-pool/index.js +294 -0
- package/lib/smtp-pool/pool-resource.js +93 -0
- package/lib/smtp-transport.js +81 -0
- package/lib/stream-transport.js +59 -0
- package/lib/well-known/index.js +54 -0
- package/lib/well-known/services.json +802 -0
- package/lib/xoauth2.js +249 -0
- package/package.json +78 -0
package/index.d.ts
ADDED
|
@@ -0,0 +1,816 @@
|
|
|
1
|
+
import { DKIM } from './lib/dkim/index.js';
|
|
2
|
+
import { MessageParser } from './lib/dkim/message-parser.js';
|
|
3
|
+
import { RelaxedBody } from './lib/dkim/relaxed-body.js';
|
|
4
|
+
import { generateDKIMSignature } from './lib/dkim/sign.js';
|
|
5
|
+
import { Cookies } from './lib/fetch/cookies.js';
|
|
6
|
+
import { nmfetch } from './lib/fetch/index.js';
|
|
7
|
+
import { Mailer } from './lib/mailer/index.js';
|
|
8
|
+
import { MailMessage } from './lib/mailer/mail-message.js';
|
|
9
|
+
import {
|
|
10
|
+
isPlainText, hasLongerLines, encodeWord, encodeWords, buildHeaderValue, parseHeaderValue, detectExtension,
|
|
11
|
+
detectMimeType, foldLines
|
|
12
|
+
} from './lib/mime-funcs/index.js';
|
|
13
|
+
import { MIME_TYPES, EXTENSIONS } from './lib/mime-funcs/mime-types.js';
|
|
14
|
+
import { MimeNode } from './lib/mime-node/index.js';
|
|
15
|
+
import { LastNewline } from './lib/mime-node/last-newline.js';
|
|
16
|
+
import { LeUnix } from './lib/mime-node/le-unix.js';
|
|
17
|
+
import { LeWindows } from './lib/mime-node/le-windows.js';
|
|
18
|
+
import { DataStream } from './lib/smtp-connection/data-stream.js';
|
|
19
|
+
import { SmtpConnection } from './lib/smtp-connection/index.js';
|
|
20
|
+
import { SmtpPool } from './lib/smtp-pool/index.js';
|
|
21
|
+
import { PoolResource } from './lib/smtp-pool/pool-resource.js';
|
|
22
|
+
import { wellKnown } from './lib/well-known/index.js';
|
|
23
|
+
import { addressparser } from './lib/addressparser.js';
|
|
24
|
+
import { base64Encode, Base64Encoder } from './lib/base64.js';
|
|
25
|
+
import { httpProxyClient } from './lib/http-proxy-client.js';
|
|
26
|
+
import { JsonTransport } from './lib/json-transport.js';
|
|
27
|
+
import { MailComposer } from './lib/mail-composer.js';
|
|
28
|
+
import { toASCII } from './lib/punycode.js';
|
|
29
|
+
import { qpEncode, QpEncoder } from './lib/qp.js';
|
|
30
|
+
import { regexs, resetRegex } from './lib/regexs.js';
|
|
31
|
+
import { SendmailTransport } from './lib/sendmail-transport.js';
|
|
32
|
+
import { SesTransport } from './lib/ses-transport.js';
|
|
33
|
+
import {
|
|
34
|
+
PK, regexs, resetRegex, dnsLookup, dnsResolve, format, isIP, netConnect, fsReadStream, osHostname, nmfetch,
|
|
35
|
+
getLogger, resolveHostname, newURL, parseConnectionUrl, parseDataURI, callbackPromise, resolveStream, resolveContent,
|
|
36
|
+
assign, encodeXText, initSmtpConstructor, getSocket, cleanup, createSmtpConnection, setupConnectionHandlers,
|
|
37
|
+
performSmtpAuthentication, createAuthConfig, prepareMessageForSending, handleSendResult, verifySmtp
|
|
38
|
+
} from './lib/shared.js';
|
|
39
|
+
import { SmtpTransport } from './lib/smtp-transport.js';
|
|
40
|
+
import { StreamTransport } from './lib/stream-transport.js';
|
|
41
|
+
import { XOAuth2 } from './lib/xoauth2.js';
|
|
42
|
+
|
|
43
|
+
// =================================== lib/dkim/index.js ===================================
|
|
44
|
+
/**
|
|
45
|
+
* ```js
|
|
46
|
+
* // 文件导出内容
|
|
47
|
+
* class DKIM{}; // DomainKeys Identified Mail 签名处理类
|
|
48
|
+
* ```
|
|
49
|
+
* >查看定义:@see {@link DKIM}
|
|
50
|
+
*/
|
|
51
|
+
declare module './lib/dkim/index.js' {
|
|
52
|
+
export * from './lib/dkim/index.js';
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// =================================== lib/dkim/message-parser.js ===================================
|
|
56
|
+
/**
|
|
57
|
+
* ```js
|
|
58
|
+
* // 文件导出内容
|
|
59
|
+
* class MessageParser{}; // 该类实例是一个转换流,用于将消息头与消息体分离;
|
|
60
|
+
* ```
|
|
61
|
+
* >查看定义:@see {@link MessageParser}
|
|
62
|
+
*/
|
|
63
|
+
declare module './lib/dkim/message-parser.js' {
|
|
64
|
+
export * from './lib/dkim/message-parser.js';
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// =================================== lib/dkim/relaxed-body.js ===================================
|
|
68
|
+
/**
|
|
69
|
+
* ```js
|
|
70
|
+
* // 文件导出内容
|
|
71
|
+
* class RelaxedBody{}; // 宽松规范化邮件正文的转换流,实现DKIM签名中的relaxed body canonicalization
|
|
72
|
+
* ```
|
|
73
|
+
* >查看定义:@see {@link RelaxedBody}
|
|
74
|
+
*/
|
|
75
|
+
declare module './lib/dkim/relaxed-body.js' {
|
|
76
|
+
export * from './lib/dkim/relaxed-body.js';
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// =================================== lib/dkim/sign.js ===================================
|
|
80
|
+
/**
|
|
81
|
+
* ```js
|
|
82
|
+
* // 文件导出内容
|
|
83
|
+
* generateDKIMSignature(); // 生成DKIM签名头行
|
|
84
|
+
* ```
|
|
85
|
+
* >查看定义:@see {@link generateDKIMSignature}
|
|
86
|
+
*/
|
|
87
|
+
declare module './lib/dkim/sign.js' {
|
|
88
|
+
export * from './lib/dkim/sign.js';
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// =================================== lib/fetch/cookies.js ===================================
|
|
92
|
+
/**
|
|
93
|
+
* ```js
|
|
94
|
+
* // 文件导出内容
|
|
95
|
+
* class Cookies{}; // 创建一个Biskviit Cookie存储容器,用于内存中的Cookie管理
|
|
96
|
+
* ```
|
|
97
|
+
* >查看定义:@see {@link Cookies}
|
|
98
|
+
*/
|
|
99
|
+
declare module './lib/fetch/cookies.js' {
|
|
100
|
+
export * from './lib/fetch/cookies.js';
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// =================================== lib/fetch/index.js ===================================
|
|
104
|
+
/**
|
|
105
|
+
* ```js
|
|
106
|
+
* // 文件导出内容
|
|
107
|
+
* nmfetch(); // 执行 HTTP/HTTPS 请求,支持重定向、Cookie管理、请求体处理、响应解压等功能;
|
|
108
|
+
* ```
|
|
109
|
+
* >查看定义:@see {@link nmfetch}
|
|
110
|
+
*/
|
|
111
|
+
declare module './lib/fetch/index.js' {
|
|
112
|
+
export * from './lib/fetch/index.js';
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// =================================== lib/mailer/index.js ===================================
|
|
116
|
+
/**
|
|
117
|
+
* ```js
|
|
118
|
+
* // 文件导出内容
|
|
119
|
+
* class Mailer{}; // 创建 Mail API 对象
|
|
120
|
+
* ```
|
|
121
|
+
* >查看定义:@see {@link Mailer}
|
|
122
|
+
*/
|
|
123
|
+
declare module './lib/mailer/index.js' {
|
|
124
|
+
export * from './lib/mailer/index.js';
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// =================================== lib/mailer/mail-message.js ===================================
|
|
128
|
+
/**
|
|
129
|
+
* ```js
|
|
130
|
+
* // 文件导出内容
|
|
131
|
+
* class MailMessage{}; // 负责构建和处理邮件消息对象
|
|
132
|
+
* ```
|
|
133
|
+
* >查看定义:@see {@link MailMessage}
|
|
134
|
+
*/
|
|
135
|
+
declare module './lib/mailer/mail-message.js' {
|
|
136
|
+
export * from './lib/mailer/mail-message.js';
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// =================================== lib/mime-funcs/index.js ===================================
|
|
140
|
+
/**
|
|
141
|
+
* ```js
|
|
142
|
+
* // 文件导出内容
|
|
143
|
+
* isPlainText(); // 检查值是否为纯文本字符串;
|
|
144
|
+
* hasLongerLines(); // 检查多行字符串是否包含超过指定长度的行;
|
|
145
|
+
* encodeWord(); // 将字符串或Buffer编码为UTF-8 MIME字(rfc2047);
|
|
146
|
+
* encodeWords(); // 查找包含非ASCII文本的单词序列并将其转换为MIME字;
|
|
147
|
+
* buildHeaderValue(); // 将解析后的头值连接为 'value; param1=value1; param2=value2';
|
|
148
|
+
* parseHeaderValue(); // 将带有key=value参数的头值解析为结构化对;
|
|
149
|
+
* detectExtension(); // 根据MIME类型检测文件扩展名;
|
|
150
|
+
* detectMimeType(); // 根据文件名检测MIME类型;
|
|
151
|
+
* foldLines(); // 折叠长行,适用于折叠头行(afterSpace=false)和流文本(afterSpace=true);
|
|
152
|
+
* ```
|
|
153
|
+
* >查看定义:@see {@link isPlainText}、{@link hasLongerLines}、{@link encodeWord}、{@link encodeWords}、{@link buildHeaderValue}、
|
|
154
|
+
* {@link parseHeaderValue}、{@link detectExtension}、{@link detectMimeType}、{@link foldLines}
|
|
155
|
+
*/
|
|
156
|
+
declare module './lib/mime-funcs/index.js' {
|
|
157
|
+
export * from './lib/mime-funcs/index.js';
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// =================================== lib/mime-funcs/mime-types.js ===================================
|
|
161
|
+
/**
|
|
162
|
+
* ```js
|
|
163
|
+
* // 文件导出内容(MIME类型和文件扩展名的互转映射表)
|
|
164
|
+
* const MIME_TYPES = new Map([]), EXTENSIONS = new Map([]);
|
|
165
|
+
* ```
|
|
166
|
+
* >查看定义:@see {@link MIME_TYPES}、{@link EXTENSIONS}
|
|
167
|
+
*/
|
|
168
|
+
declare module './lib/mime-funcs/mime-types.js' {
|
|
169
|
+
export * from './lib/mime-funcs/mime-types.js';
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// =================================== lib/mime-node/index.js ===================================
|
|
173
|
+
/**
|
|
174
|
+
* ```js
|
|
175
|
+
* // 文件导出内容
|
|
176
|
+
* class MimeNode{}; // 创建一个新的MIME树节点;
|
|
177
|
+
* ```
|
|
178
|
+
* >查看定义:@see {@link MimeNode}
|
|
179
|
+
*/
|
|
180
|
+
declare module './lib/mime-node/index.js' {
|
|
181
|
+
export * from './lib/mime-node/index.js';
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// =================================== lib/mime-node/last-newline.js ===================================
|
|
185
|
+
/**
|
|
186
|
+
* ```js
|
|
187
|
+
* // 文件导出内容
|
|
188
|
+
* class LastNewline{}; // 一个转换流,用于确保数据以正确的换行符结束;
|
|
189
|
+
* ```
|
|
190
|
+
* >查看定义:@see {@link LastNewline}
|
|
191
|
+
*/
|
|
192
|
+
declare module './lib/mime-node/last-newline.js' {
|
|
193
|
+
export * from './lib/mime-node/last-newline.js';
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// =================================== lib/mime-node/le-unix.js ===================================
|
|
197
|
+
/**
|
|
198
|
+
* ```js
|
|
199
|
+
* // 文件导出内容
|
|
200
|
+
* class LeUnix{}; // 确保仅使用 `<LF>` 作为换行符(Windows风格处理);
|
|
201
|
+
* ```
|
|
202
|
+
* >查看定义:@see {@link LeUnix}
|
|
203
|
+
*/
|
|
204
|
+
declare module './lib/mime-node/le-unix.js' {
|
|
205
|
+
export * from './lib/mime-node/le-unix.js';
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
// =================================== lib/mime-node/le-windows.js ===================================
|
|
209
|
+
/**
|
|
210
|
+
* ```js
|
|
211
|
+
* // 文件导出内容
|
|
212
|
+
* class LeWindows(); // 确保只使用 `<CR><LF>` 序列作为换行符(Windows风格处理)
|
|
213
|
+
* ```
|
|
214
|
+
* >查看定义:@see {@link LeWindows}
|
|
215
|
+
*/
|
|
216
|
+
declare module './lib/mime-node/le-windows.js' {
|
|
217
|
+
export * from './lib/mime-node/le-windows.js';
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// =================================== lib/smtp-connection/data-stream.js ===================================
|
|
221
|
+
/**
|
|
222
|
+
* ```js
|
|
223
|
+
* // 文件导出内容
|
|
224
|
+
* class DataStream(); // 转义行首的点,以`<CR><LF>.<CR><LF>`结束流;
|
|
225
|
+
* ```
|
|
226
|
+
* >查看定义:@see {@link DataStream}
|
|
227
|
+
*/
|
|
228
|
+
declare module './lib/smtp-connection/data-stream.js' {
|
|
229
|
+
export * from './lib/smtp-connection/data-stream.js';
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
// =================================== lib/smtp-connection/index.js ===================================
|
|
233
|
+
/**
|
|
234
|
+
* ```js
|
|
235
|
+
* // 文件导出内容
|
|
236
|
+
* class SmtpConnection{}; // 生成SMTP连接对象;
|
|
237
|
+
* ```
|
|
238
|
+
* >查看定义:@see {@link SmtpConnection}
|
|
239
|
+
*/
|
|
240
|
+
declare module './lib/smtp-connection/index.js' {
|
|
241
|
+
export * from './lib/smtp-connection/index.js';
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
// =================================== lib/smtp-pool/index.js ===================================
|
|
245
|
+
/**
|
|
246
|
+
* ```js
|
|
247
|
+
* // 文件导出内容
|
|
248
|
+
* class SmtpPool{}; // 为 @flun/mailer 创建 SMTP 连接池传输对象;
|
|
249
|
+
* ```
|
|
250
|
+
* >查看定义:@see {@link SmtpPool}
|
|
251
|
+
*/
|
|
252
|
+
declare module './lib/smtp-pool/index.js' {
|
|
253
|
+
export * from './lib/smtp-pool/index.js';
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// =================================== lib/smtp-pool/pool-resource.js ===================================
|
|
257
|
+
/**
|
|
258
|
+
* ```js
|
|
259
|
+
* // 文件导出内容
|
|
260
|
+
* class PoolResource{}; // 为连接池创建资源元素;
|
|
261
|
+
* ```
|
|
262
|
+
* >查看定义:@see {@link PoolResource}
|
|
263
|
+
*/
|
|
264
|
+
declare module './lib/smtp-pool/pool-resource.js' {
|
|
265
|
+
export * from './lib/smtp-pool/pool-resource.js';
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
// =================================== lib/well-known/index.js ===================================
|
|
269
|
+
/**
|
|
270
|
+
* ```js
|
|
271
|
+
* // 文件导出内容
|
|
272
|
+
* wellKnown(); // 根据提供的键名解析 SMTP 配置;
|
|
273
|
+
* ```
|
|
274
|
+
* >查看定义:@see {@link wellKnown}
|
|
275
|
+
*/
|
|
276
|
+
declare module './lib/well-known/index.js' {
|
|
277
|
+
export * from './lib/well-known/index.js';
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
// =================================== lib/addressparser.js ===================================
|
|
281
|
+
/**
|
|
282
|
+
* ```js
|
|
283
|
+
* // 文件导出内容
|
|
284
|
+
* addressparser(); // 解析地址字段字符串为结构化的电子邮件地址对象数组
|
|
285
|
+
* ```
|
|
286
|
+
* >查看定义:@see {@link addressparser}
|
|
287
|
+
*/
|
|
288
|
+
declare module './lib/addressparser.js' {
|
|
289
|
+
export * from './lib/addressparser.js';
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
// =================================== lib/base64.js ===================================
|
|
293
|
+
/**
|
|
294
|
+
* ```js
|
|
295
|
+
* // 文件导出内容
|
|
296
|
+
* base64Encode(); // 将Buffer编码为base64字符串
|
|
297
|
+
* class Base64Encoder{}; // 创建用于将数据编码为base64的转换流
|
|
298
|
+
* ```
|
|
299
|
+
* >查看定义:@see {@link base64Encode}、{@link Base64Encoder}
|
|
300
|
+
*/
|
|
301
|
+
declare module './lib/base64.js' {
|
|
302
|
+
export * from './lib/base64.js';
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
// =================================== lib/http-proxy-client.js ===================================
|
|
306
|
+
/**
|
|
307
|
+
* ```js
|
|
308
|
+
* // 文件导出内容
|
|
309
|
+
* httpProxyClient(); // 建立到目标端口的代理连接
|
|
310
|
+
* ```
|
|
311
|
+
* >查看定义:@see {@link httpProxyClient}
|
|
312
|
+
*/
|
|
313
|
+
declare module './lib/http-proxy-client.js' {
|
|
314
|
+
export * from './lib/http-proxy-client.js';
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
// =================================== lib/json-transport.js ===================================
|
|
318
|
+
/**
|
|
319
|
+
* ```js
|
|
320
|
+
* // 文件导出内容
|
|
321
|
+
* class JsonTransport{}; // 生成用于输出JSON的传输对象
|
|
322
|
+
* ```
|
|
323
|
+
* >查看定义:@see {@link JsonTransport}
|
|
324
|
+
*/
|
|
325
|
+
declare module './lib/json-transport.js' {
|
|
326
|
+
export * from './lib/json-transport.js';
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
// =================================== lib/mail-composer.js ===================================
|
|
330
|
+
/**
|
|
331
|
+
* ```js
|
|
332
|
+
* // 文件导出内容
|
|
333
|
+
* class MailComposer{}; // 邮件编译器类,用于从邮件选项组合MimeNode实例;
|
|
334
|
+
* ```
|
|
335
|
+
* >查看定义:@see {@link MailComposer}
|
|
336
|
+
*/
|
|
337
|
+
declare module './lib/mail-composer.js' {
|
|
338
|
+
export * from './lib/mail-composer.js';
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
// =================================== lib/punycode.js ===================================
|
|
342
|
+
/**
|
|
343
|
+
* ```js
|
|
344
|
+
* // 文件导出内容
|
|
345
|
+
* toASCII(); // 将表示域名或电子邮件地址的Unicode字符串转换为Punycode
|
|
346
|
+
* ```
|
|
347
|
+
* >查看定义:@see {@link toASCII}
|
|
348
|
+
*/
|
|
349
|
+
declare module './lib/punycode.js' {
|
|
350
|
+
export * from './lib/punycode.js';
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
// =================================== lib/qp.js ===================================
|
|
354
|
+
/**
|
|
355
|
+
* ```js
|
|
356
|
+
* // 文件导出内容
|
|
357
|
+
* qpEncode(); // 将Buffer编码为Quoted-Printable格式的字符串
|
|
358
|
+
* class QpEncoder{}; // 创建用于将数据编码为Quoted-Printable格式的转换流
|
|
359
|
+
* ```
|
|
360
|
+
* >查看定义:@see {@link qpEncode}、{@link QpEncoder}
|
|
361
|
+
*/
|
|
362
|
+
declare module './lib/qp.js' {
|
|
363
|
+
export * from './lib/qp.js';
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
// =================================== lib/regexs.js ===================================
|
|
367
|
+
/**
|
|
368
|
+
* ```js
|
|
369
|
+
* // 文件导出内容
|
|
370
|
+
* const regexs = {} // 正则表达式常量对象
|
|
371
|
+
* resetRegex(); // 重置正则表达式的lastIndex属性
|
|
372
|
+
* ```
|
|
373
|
+
* >查看定义:@see {@link regexs}、{@link resetRegex}
|
|
374
|
+
*/
|
|
375
|
+
declare module './lib/regexs.js' {
|
|
376
|
+
export * from './lib/regexs.js';
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
// =================================== lib/sendmail-transport.js ===================================
|
|
380
|
+
/**
|
|
381
|
+
* ```js
|
|
382
|
+
* // 文件导出内容
|
|
383
|
+
* class SendmailTransport{}; // 生成Sendmail传输对象
|
|
384
|
+
* ```
|
|
385
|
+
* >查看定义:@see {@link SendmailTransport}
|
|
386
|
+
*/
|
|
387
|
+
declare module './lib/sendmail-transport.js' {
|
|
388
|
+
export * from './lib/sendmail-transport.js';
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
// =================================== lib/ses-transport.js ===================================
|
|
392
|
+
/**
|
|
393
|
+
* ```js
|
|
394
|
+
* // 文件导出内容
|
|
395
|
+
* class SesTransport{}; // 生成用于 AWS SES 的传输对象
|
|
396
|
+
* ```
|
|
397
|
+
* >查看定义:@see {@link SesTransport}
|
|
398
|
+
*/
|
|
399
|
+
declare module './lib/ses-transport.js' {
|
|
400
|
+
export * from './lib/ses-transport.js';
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
// =================================== lib/shared.js ===================================
|
|
404
|
+
/**
|
|
405
|
+
* ```js
|
|
406
|
+
* // 文件导出内容
|
|
407
|
+
* const PK={}; // package.json 包对象(含 name,,version,,homepage);
|
|
408
|
+
* const regexs={}; // 常用正则表达式集合;
|
|
409
|
+
* resetRegex(); // 重置正则表达式(清除 lastIndex);
|
|
410
|
+
* dnsLookup(); // dns.lookup 的引用;
|
|
411
|
+
* dnsResolve(); // dns.resolve 的引用;
|
|
412
|
+
* format(); // util.format 的引用;
|
|
413
|
+
* isIP(); // 检查字符串是否为 IP 地址(v4 或 v6);
|
|
414
|
+
* netConnect(); // net.connect 的引用;
|
|
415
|
+
* fsReadStream(); // fs.createReadStream 的引用;
|
|
416
|
+
* osHostname(); // os.hostname 的引用;
|
|
417
|
+
* nmfetch(); // 自定义 fetch 实现;
|
|
418
|
+
* getLogger(); // 创建 bunyan 兼容的日志记录器;
|
|
419
|
+
* resolveHostname(); // 解析主机名,支持 DNS 缓存与 IPv4/IPv6;
|
|
420
|
+
* newURL(); // 安全地创建 URL 对象;
|
|
421
|
+
* parseConnectionUrl(); // 解析连接 URL 为配置对象;
|
|
422
|
+
* parseDataURI(); // 解析 Data URI 字符串;
|
|
423
|
+
* callbackPromise(); // 创建 Promise 回调包装器(resolve, reject);
|
|
424
|
+
* resolveStream(); // 将可读流完整读取到 Buffer 中;
|
|
425
|
+
* resolveContent(); // 解析字符串或 Buffer 值的内容;
|
|
426
|
+
* assign(); // 合并对象属性(深度合并 tls 与 auth);
|
|
427
|
+
* encodeXText(); // XText 编码(SMTP 扩展);
|
|
428
|
+
* initSmtpConstructor(); // 初始化 SMTP 传输对象的公共构造函数逻辑;
|
|
429
|
+
* getSocket(); // 获取代理套接字的占位函数;
|
|
430
|
+
* cleanup(); // 用于清理状态对象;
|
|
431
|
+
* createSmtpConnection(); // 创建并配置 SMTP 连接;
|
|
432
|
+
* setupConnectionHandlers(); // 处理连接错误与结束事件通用函数;
|
|
433
|
+
* performSmtpAuthentication(); // 执行 SMTP 认证的通用逻辑;
|
|
434
|
+
* createAuthConfig(); // 创建认证配置对象;
|
|
435
|
+
* prepareMessageForSending(); // 发送邮件前的通用预处理;
|
|
436
|
+
* handleSendResult(); // 处理发送结果的通用逻辑;
|
|
437
|
+
* verifySmtp(); // 验证 SMTP 配置的通用函数;
|
|
438
|
+
* ```
|
|
439
|
+
* >查看定义:@see {@link PK}、{@link regexs}、{@link resetRegex}、{@link dnsLookup}、{@link dnsResolve}、{@link format}、
|
|
440
|
+
* {@link isIP}、{@link netConnect}、{@link fsReadStream}、{@link osHostname}、{@link nmfetch}、{@link getLogger}、
|
|
441
|
+
* {@link resolveHostname}、{@link newURL}、{@link parseConnectionUrl}、{@link parseDataURI}、{@link callbackPromise}、
|
|
442
|
+
* {@link resolveStream}、{@link resolveContent}、{@link assign}、{@link encodeXText}、{@link initSmtpConstructor}、
|
|
443
|
+
* {@link getSocket}、{@link cleanup}、{@link createSmtpConnection}、{@link setupConnectionHandlers}、
|
|
444
|
+
* {@link performSmtpAuthentication}、{@link createAuthConfig}、 {@link prepareMessageForSending}、{@link handleSendResult}、
|
|
445
|
+
* {@link verifySmtp}
|
|
446
|
+
*/
|
|
447
|
+
declare module './lib/shared.js' {
|
|
448
|
+
export * from './lib/shared.js';
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
// =================================== lib/smtp-transport.js ===================================
|
|
452
|
+
/**
|
|
453
|
+
* ```js
|
|
454
|
+
* // 文件导出内容
|
|
455
|
+
* class SmtpTransport{}; // 生成SMTP传输对象,用于标准SMTP邮件发送,适用于大多数邮件服务商;
|
|
456
|
+
* ```
|
|
457
|
+
* >查看定义:@see {@link SmtpTransport}
|
|
458
|
+
*/
|
|
459
|
+
declare module './lib/smtp-transport.js' {
|
|
460
|
+
export * from './lib/smtp-transport.js';
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
// =================================== lib/stream-transport.js ===================================
|
|
464
|
+
/**
|
|
465
|
+
* ```js
|
|
466
|
+
* // 文件导出内容
|
|
467
|
+
* class StreamTransport{}; // 生成流传输对象,用于将邮件发送到标准输入/输出流;
|
|
468
|
+
* ```
|
|
469
|
+
* >查看定义:@see {@link StreamTransport}
|
|
470
|
+
*/
|
|
471
|
+
declare module './lib/stream-transport.js' {
|
|
472
|
+
export * from './lib/stream-transport.js';
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
// =================================== lib/xoauth2.js ===================================
|
|
476
|
+
/**
|
|
477
|
+
* ```js
|
|
478
|
+
* // 文件导出内容
|
|
479
|
+
* class XOAuth2{}; // Gmail 的 XOAUTH2 access_token 生成器,用于生成基于 OAuth2 的访问令牌,支持自动刷新功能;
|
|
480
|
+
* ```
|
|
481
|
+
* >查看定义:@see {@link XOAuth2}
|
|
482
|
+
*/
|
|
483
|
+
declare module './lib/xoauth2.js' {
|
|
484
|
+
export * from './lib/xoauth2.js';
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
/**
|
|
488
|
+
* 邮件发送模块 主要功能:
|
|
489
|
+
* ```js
|
|
490
|
+
* createTransport(); // 创建邮件传输器
|
|
491
|
+
* validateConfig(); // 验证配置
|
|
492
|
+
* ```
|
|
493
|
+
* ---
|
|
494
|
+
* >
|
|
495
|
+
* ```js
|
|
496
|
+
* // 发送邮件示例
|
|
497
|
+
* import { createTransport } from '@flun/mailer';
|
|
498
|
+
* import { env } from '@flun/env'; // 注意:@flun/env需自行安装
|
|
499
|
+
*
|
|
500
|
+
* // 请根据您的邮箱服务商修改以下配置
|
|
501
|
+
* transporter = createTransport({
|
|
502
|
+
* host: 'smtp.189.cn', // 邮箱服务商SMTP服务器地址
|
|
503
|
+
* port: 465, // 端口号
|
|
504
|
+
* secure: true, // 是否使用SSL/TLS
|
|
505
|
+
* // 认证信息
|
|
506
|
+
* auth: {
|
|
507
|
+
* user: 'abc@189.cn', // 你的邮箱地址
|
|
508
|
+
* pass: env.MAIL_PWD // 邮箱密码
|
|
509
|
+
* }
|
|
510
|
+
* });
|
|
511
|
+
*
|
|
512
|
+
* // 发送
|
|
513
|
+
* transporter.sendMail({
|
|
514
|
+
* from: 'abc@189.cn', // 发件人
|
|
515
|
+
* to: 'xyz@189.cn', // 收件人
|
|
516
|
+
* subject: '测试邮件', // 邮件主题
|
|
517
|
+
* text: '纯文本测试', // 纯文本内容
|
|
518
|
+
* html: '<b>html格式测试</b>' // HTML内容(可选;注:html内容优先级高于纯文本内容)
|
|
519
|
+
* }, (error, info) => {
|
|
520
|
+
* if (error) console.error('发送失败:', error);
|
|
521
|
+
* else console.log('发送成功:', info.response);
|
|
522
|
+
* });
|
|
523
|
+
* ```
|
|
524
|
+
* ---
|
|
525
|
+
* >查看定义:@see {@link createTransport}、{@link validateConfig}
|
|
526
|
+
*/
|
|
527
|
+
declare module './index.js' {
|
|
528
|
+
// ==================== 模块依赖 ====================
|
|
529
|
+
import { EventEmitter } from 'events';
|
|
530
|
+
|
|
531
|
+
// ==================== 核心导出函数 ====================
|
|
532
|
+
|
|
533
|
+
/**
|
|
534
|
+
* 创建邮件传输器
|
|
535
|
+
*
|
|
536
|
+
* 根据配置自动选择合适的传输器类型:
|
|
537
|
+
* - 启用连接池: pool=true -> SmtpPool
|
|
538
|
+
* - 启用sendmail: sendmail=true或字符串 -> SendmailTransport
|
|
539
|
+
* - 启用流传输: streamTransport=true -> StreamTransport
|
|
540
|
+
* - 启用JSON传输: jsonTransport=true -> JsonTransport
|
|
541
|
+
* - 配置SES: SES对象存在 -> SesTransport
|
|
542
|
+
* - 默认: 标准SMTP传输器
|
|
543
|
+
*
|
|
544
|
+
* @param transporter 传输器配置对象、连接URL字符串或已创建的传输器实例
|
|
545
|
+
* @param defaults 默认邮件选项
|
|
546
|
+
* @returns Mailer实例
|
|
547
|
+
*
|
|
548
|
+
* @example
|
|
549
|
+
* ```javascript
|
|
550
|
+
* // SMTP传输器
|
|
551
|
+
* const smtpTransporter = createTransport({
|
|
552
|
+
* host: 'smtp.example.com',
|
|
553
|
+
* port: 465,
|
|
554
|
+
* secure: true,
|
|
555
|
+
* auth: {
|
|
556
|
+
* user: 'user@example.com',
|
|
557
|
+
* pass: 'password'
|
|
558
|
+
* }
|
|
559
|
+
* });
|
|
560
|
+
*
|
|
561
|
+
* // 连接URL方式
|
|
562
|
+
* const urlTransporter = createTransport('smtps://user:pass@smtp.example.com:465');
|
|
563
|
+
* ```
|
|
564
|
+
*/
|
|
565
|
+
export function createTransport(transporter: TransportConfig, defaults?: MailData): Mailer;
|
|
566
|
+
|
|
567
|
+
/**
|
|
568
|
+
* 验证邮件配置
|
|
569
|
+
*
|
|
570
|
+
* 验证传入的配置对象是否有效,返回包含验证状态、错误和警告信息的对象
|
|
571
|
+
*
|
|
572
|
+
* @param config 要验证的配置对象或URL字符串
|
|
573
|
+
* @returns 验证结果对象
|
|
574
|
+
*
|
|
575
|
+
* @example
|
|
576
|
+
* ```javascript
|
|
577
|
+
* const result = validateConfig({
|
|
578
|
+
* host: 'smtp.example.com',
|
|
579
|
+
* port: 465,
|
|
580
|
+
* auth: { user: 'test@example.com' }
|
|
581
|
+
* });
|
|
582
|
+
*
|
|
583
|
+
* if (result.valid) {
|
|
584
|
+
* console.log('配置有效');
|
|
585
|
+
* } else {
|
|
586
|
+
* console.error('配置错误:', result.errors);
|
|
587
|
+
* }
|
|
588
|
+
* ```
|
|
589
|
+
*/
|
|
590
|
+
export function validateConfig(config: any): ValidationResult;
|
|
591
|
+
|
|
592
|
+
// ==================== 通用类型定义 ====================
|
|
593
|
+
|
|
594
|
+
/**
|
|
595
|
+
* 传输器配置类型
|
|
596
|
+
* 可以是:连接URL字符串、已封装好的传输器实例、或具体的传输器配置对象
|
|
597
|
+
*/
|
|
598
|
+
export type TransportConfig = string | Transporter | SpecificTransportConfig;
|
|
599
|
+
|
|
600
|
+
/**
|
|
601
|
+
* 传输器接口
|
|
602
|
+
*/
|
|
603
|
+
export interface Transporter {
|
|
604
|
+
/** 发送邮件方法 */
|
|
605
|
+
send(mail: MailMessage, callback: (err: Error | null, info: SentMessageInfo) => void): void;
|
|
606
|
+
/** 事件监听方法 */
|
|
607
|
+
on(event: string, listener: (...args: any[]) => void): this;
|
|
608
|
+
/** 关闭连接方法 */
|
|
609
|
+
close?(): void | Promise<void>;
|
|
610
|
+
/** 检查是否空闲 */
|
|
611
|
+
isIdle?(): boolean;
|
|
612
|
+
/** 验证连接 */
|
|
613
|
+
verify?(callback?: (error: Error | null, success?: boolean) => void): void | Promise<boolean>;
|
|
614
|
+
/** 传输器名称 */
|
|
615
|
+
name?: string;
|
|
616
|
+
/** 传输器版本 */
|
|
617
|
+
version?: string;
|
|
618
|
+
/** 关联的Mail实例 */
|
|
619
|
+
mailer?: Mailer;
|
|
620
|
+
/** 配置选项 */
|
|
621
|
+
options?: SpecificTransportConfig;
|
|
622
|
+
/** 日志记录器 */
|
|
623
|
+
logger?: Logger;
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
/**
|
|
627
|
+
* 邮件发送器实例
|
|
628
|
+
* 由 createTransport 返回,提供 sendMail、close 等核心方法
|
|
629
|
+
*/
|
|
630
|
+
export interface Mailer extends EventEmitter {
|
|
631
|
+
/**
|
|
632
|
+
* 发送邮件
|
|
633
|
+
* @param mail 邮件内容
|
|
634
|
+
* @param callback 完成回调
|
|
635
|
+
*/
|
|
636
|
+
sendMail(mail: MailData, callback: (err: Error | null, info: SentMessageInfo) => void): void;
|
|
637
|
+
/**
|
|
638
|
+
* 发送邮件(Promise 形式)
|
|
639
|
+
* @param mail 邮件内容
|
|
640
|
+
*/
|
|
641
|
+
sendMail(mail: MailData): Promise<SentMessageInfo>;
|
|
642
|
+
|
|
643
|
+
/** 关闭传输器及连接池 */
|
|
644
|
+
close(): void;
|
|
645
|
+
|
|
646
|
+
/**
|
|
647
|
+
* 验证传输器连接是否可用
|
|
648
|
+
* @param callback 可选回调
|
|
649
|
+
*/
|
|
650
|
+
verify(callback?: (err: Error | null, success: boolean) => void): void | Promise<boolean>;
|
|
651
|
+
|
|
652
|
+
/** 传输器实例 */
|
|
653
|
+
transporter: Transporter;
|
|
654
|
+
/** 当前传输器使用的选项 */
|
|
655
|
+
options: SpecificTransportConfig;
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
/**
|
|
659
|
+
* 具体的传输器配置对象
|
|
660
|
+
*/
|
|
661
|
+
export interface SpecificTransportConfig {
|
|
662
|
+
/** 连接URL(优先级高于其他配置) */
|
|
663
|
+
url?: string;
|
|
664
|
+
/** SMTP服务器地址 */
|
|
665
|
+
host?: string;
|
|
666
|
+
/** SMTP服务端口 */
|
|
667
|
+
port?: number;
|
|
668
|
+
/** 是否使用SSL/TLS */
|
|
669
|
+
secure?: boolean;
|
|
670
|
+
/** 认证信息 */
|
|
671
|
+
auth?: {
|
|
672
|
+
/** 用户名 */
|
|
673
|
+
user: string;
|
|
674
|
+
/** 密码 */
|
|
675
|
+
pass?: string;
|
|
676
|
+
/** XOAUTH2令牌 */
|
|
677
|
+
xoauth2?: string;
|
|
678
|
+
/** OAuth2配置 */
|
|
679
|
+
oauth2?: any;
|
|
680
|
+
};
|
|
681
|
+
/** 预定义服务名 */
|
|
682
|
+
service?: string;
|
|
683
|
+
/** TLS额外配置 */
|
|
684
|
+
tls?: object | boolean;
|
|
685
|
+
/** 是否启用连接池 */
|
|
686
|
+
pool?: boolean;
|
|
687
|
+
/** 连接池最大连接数 */
|
|
688
|
+
maxConnections?: number;
|
|
689
|
+
/** 单个连接最大消息数 */
|
|
690
|
+
maxMessages?: number;
|
|
691
|
+
/** 使用 sendmail 发送(布尔值或sendmail路径) */
|
|
692
|
+
sendmail?: boolean | string;
|
|
693
|
+
/** 使用流传输器输出 */
|
|
694
|
+
streamTransport?: boolean;
|
|
695
|
+
/** 使用 JSON 传输器输出 */
|
|
696
|
+
jsonTransport?: boolean;
|
|
697
|
+
/** Amazon SES 配置 */
|
|
698
|
+
SES?: {
|
|
699
|
+
[key: string]: any;
|
|
700
|
+
};
|
|
701
|
+
/** 自定义传输器发送方法(若直接提供传输器实例则无需配置) */
|
|
702
|
+
send?: (mail: MailMessage, callback: (err: Error | null, info: SentMessageInfo) => void) => void;
|
|
703
|
+
/** 其他扩展字段 */
|
|
704
|
+
[key: string]: any;
|
|
705
|
+
}
|
|
706
|
+
|
|
707
|
+
/**
|
|
708
|
+
* 邮件数据对象,描述邮件内容及收件人信息
|
|
709
|
+
*/
|
|
710
|
+
export interface MailData {
|
|
711
|
+
/** 发件人地址(格式:"名称 <地址>" 或纯地址) */
|
|
712
|
+
from?: string;
|
|
713
|
+
/** 收件人地址(字符串或数组) */
|
|
714
|
+
to?: string | string[];
|
|
715
|
+
/** 抄送 */
|
|
716
|
+
cc?: string | string[];
|
|
717
|
+
/** 密送 */
|
|
718
|
+
bcc?: string | string[];
|
|
719
|
+
/** 邮件主题 */
|
|
720
|
+
subject?: string;
|
|
721
|
+
/** 纯文本内容 */
|
|
722
|
+
text?: string;
|
|
723
|
+
/** HTML内容(优先级高于纯文本) */
|
|
724
|
+
html?: string;
|
|
725
|
+
/** 附件列表 */
|
|
726
|
+
attachments?: Attachment[];
|
|
727
|
+
/** 邮件头部 */
|
|
728
|
+
headers?: { [key: string]: string };
|
|
729
|
+
/** 消息ID */
|
|
730
|
+
messageId?: string;
|
|
731
|
+
/** 优先级 */
|
|
732
|
+
priority?: 'high' | 'normal' | 'low';
|
|
733
|
+
/** 其他自定义字段 */
|
|
734
|
+
[key: string]: any;
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
/**
|
|
738
|
+
* 内部使用的邮件消息对象(传递给底层传输器)
|
|
739
|
+
*/
|
|
740
|
+
export interface MailMessage {
|
|
741
|
+
/** 信封信息 */
|
|
742
|
+
envelope?: {
|
|
743
|
+
from: string;
|
|
744
|
+
to: string[];
|
|
745
|
+
};
|
|
746
|
+
/** 原始邮件数据 */
|
|
747
|
+
data?: string | Buffer | object;
|
|
748
|
+
/** 消息内容(可能为字符串或Buffer) */
|
|
749
|
+
message?: string | Buffer;
|
|
750
|
+
/** 其他传输器需要的元数据 */
|
|
751
|
+
[key: string]: any;
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
/**
|
|
755
|
+
* 邮件附件描述
|
|
756
|
+
*/
|
|
757
|
+
export interface Attachment {
|
|
758
|
+
/** 文件名 */
|
|
759
|
+
filename?: string;
|
|
760
|
+
/** 内容(支持字符串、Buffer、流) */
|
|
761
|
+
content?: string | Buffer | NodeJS.ReadableStream;
|
|
762
|
+
/** 文件路径 */
|
|
763
|
+
path?: string;
|
|
764
|
+
/** MIME类型 */
|
|
765
|
+
contentType?: string;
|
|
766
|
+
/** 内嵌ID(用于html内嵌图片) */
|
|
767
|
+
cid?: string;
|
|
768
|
+
/** 编码 */
|
|
769
|
+
encoding?: string;
|
|
770
|
+
}
|
|
771
|
+
|
|
772
|
+
/**
|
|
773
|
+
* 邮件发送结果
|
|
774
|
+
*/
|
|
775
|
+
export interface SentMessageInfo {
|
|
776
|
+
/** 消息ID */
|
|
777
|
+
messageId: string;
|
|
778
|
+
/** 响应消息 */
|
|
779
|
+
message?: string | object;
|
|
780
|
+
/** 原始响应 */
|
|
781
|
+
response?: string;
|
|
782
|
+
/** 实际接受的收件人列表 */
|
|
783
|
+
accepted?: string[];
|
|
784
|
+
/** 被拒绝的收件人列表 */
|
|
785
|
+
rejected?: string[];
|
|
786
|
+
/** 等待处理的收件人列表 */
|
|
787
|
+
pending?: string[];
|
|
788
|
+
/** 信封信息 */
|
|
789
|
+
envelope?: {
|
|
790
|
+
from: string;
|
|
791
|
+
to: string[];
|
|
792
|
+
};
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
/**
|
|
796
|
+
* 配置验证结果
|
|
797
|
+
*/
|
|
798
|
+
export interface ValidationResult {
|
|
799
|
+
/** 验证是否通过 */
|
|
800
|
+
valid: boolean;
|
|
801
|
+
/** 错误信息列表 */
|
|
802
|
+
errors: string[];
|
|
803
|
+
/** 警告信息列表 */
|
|
804
|
+
warnings?: string[];
|
|
805
|
+
}
|
|
806
|
+
|
|
807
|
+
/**
|
|
808
|
+
* 日志记录器接口(传输器内部使用)
|
|
809
|
+
*/
|
|
810
|
+
export interface Logger {
|
|
811
|
+
info(...args: any[]): void;
|
|
812
|
+
debug(...args: any[]): void;
|
|
813
|
+
error(...args: any[]): void;
|
|
814
|
+
warn(...args: any[]): void;
|
|
815
|
+
}
|
|
816
|
+
}
|