react-native-email-imap-smtp 0.3.20 → 0.3.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/lib/typescript/src/EmailImapSmtp.nitro.d.ts +304 -1
- package/lib/typescript/src/EmailImapSmtp.nitro.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +234 -0
- package/lib/typescript/src/types.d.ts +342 -3
- package/lib/typescript/src/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/EmailImapSmtp.nitro.ts +339 -2
- package/src/types.ts +332 -7
package/src/types.ts
CHANGED
|
@@ -1,328 +1,653 @@
|
|
|
1
1
|
// ============================================================
|
|
2
2
|
// react-native-email-imap-smtp — Shared Type Definitions
|
|
3
|
+
//
|
|
4
|
+
// 这里是库对外暴露的全部公共类型。bob build 会把本文件编译成
|
|
5
|
+
// lib/typescript/src/types.d.ts,供使用方的 TypeScript 直接消费,
|
|
6
|
+
// 因此每个字段都带有 JSDoc 说明,悬停即可查看用途。
|
|
3
7
|
// ============================================================
|
|
4
8
|
|
|
5
9
|
// ─── Auth & Connection ───────────────────────────────────────
|
|
6
10
|
|
|
11
|
+
/**
|
|
12
|
+
* 认证方式。
|
|
13
|
+
*
|
|
14
|
+
* - `'password'`:用户名 + 密码认证(默认)
|
|
15
|
+
* - `'oauth2'`:OAuth2 令牌认证,需配合 `accessToken` 使用
|
|
16
|
+
* - `'none'`:无需认证(匿名服务器 / 本地测试环境)
|
|
17
|
+
*/
|
|
7
18
|
export type AuthType = 'password' | 'oauth2' | 'none';
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* 连接加密方式。
|
|
22
|
+
*
|
|
23
|
+
* - `'tls'`:直连 TLS(隐式加密,如 IMAP 993 / SMTP 465)
|
|
24
|
+
* - `'starttls'`:先明文后升级为 TLS(显式加密)
|
|
25
|
+
* - `'plain'`:不加密
|
|
26
|
+
*/
|
|
8
27
|
export type ConnectionType = 'tls' | 'starttls' | 'plain';
|
|
9
28
|
|
|
29
|
+
/**
|
|
30
|
+
* IMAP 服务器连接配置。
|
|
31
|
+
* 传给 `imapConnect()` 建立 IMAP 会话。
|
|
32
|
+
*/
|
|
10
33
|
export interface IMAPConfig {
|
|
34
|
+
/** 邮件服务器主机名或 IP,例如 `imap.gmail.com` */
|
|
11
35
|
host: string;
|
|
36
|
+
/** 服务器端口。TLS 通常 993,明文通常 143 */
|
|
12
37
|
port: number;
|
|
38
|
+
/** 登录用户名(通常是完整邮箱地址) */
|
|
13
39
|
username: string;
|
|
40
|
+
/** 登录密码 */
|
|
14
41
|
password: string;
|
|
42
|
+
/** 是否使用 SSL/TLS 加密连接,默认 `true` */
|
|
15
43
|
tls?: boolean;
|
|
44
|
+
/** 认证方式,默认 `'password'` */
|
|
16
45
|
authType?: AuthType;
|
|
46
|
+
/** OAuth2 访问令牌;当 `authType === 'oauth2'` 时必填 */
|
|
17
47
|
accessToken?: string;
|
|
48
|
+
/** 连接超时(毫秒),默认由平台决定(通常 10000) */
|
|
18
49
|
timeout?: number;
|
|
50
|
+
/** 是否校验服务器证书;自签名证书环境可设为 `false` */
|
|
19
51
|
checkCertificate?: boolean;
|
|
52
|
+
/** 是否在控制台输出调试日志 */
|
|
20
53
|
debug?: boolean;
|
|
21
54
|
}
|
|
22
55
|
|
|
56
|
+
/**
|
|
57
|
+
* SMTP 服务器连接配置。
|
|
58
|
+
* 传给 `smtpConnect()` 建立 SMTP 会话。
|
|
59
|
+
*/
|
|
23
60
|
export interface SMTPConfig {
|
|
61
|
+
/** 邮件服务器主机名或 IP,例如 `smtp.gmail.com` */
|
|
24
62
|
host: string;
|
|
63
|
+
/** 服务器端口。TLS 通常 465,明文通常 587 */
|
|
25
64
|
port: number;
|
|
65
|
+
/** 登录用户名(通常是完整邮箱地址) */
|
|
26
66
|
username: string;
|
|
67
|
+
/** 登录密码 */
|
|
27
68
|
password: string;
|
|
69
|
+
/** 是否使用 SSL/TLS 加密连接,默认 `true` */
|
|
28
70
|
tls?: boolean;
|
|
71
|
+
/** 认证方式,默认 `'password'` */
|
|
29
72
|
authType?: AuthType;
|
|
73
|
+
/** OAuth2 访问令牌;当 `authType === 'oauth2'` 时必填 */
|
|
30
74
|
accessToken?: string;
|
|
75
|
+
/** 连接超时(毫秒),默认由平台决定(通常 10000) */
|
|
31
76
|
timeout?: number;
|
|
77
|
+
/** 是否校验服务器证书;自签名证书环境可设为 `false` */
|
|
32
78
|
checkCertificate?: boolean;
|
|
79
|
+
/** EHLO 问候中的主机名;某些服务器要求与反向 DNS 一致 */
|
|
33
80
|
helloName?: string;
|
|
81
|
+
/** 是否在控制台输出调试日志 */
|
|
34
82
|
debug?: boolean;
|
|
35
83
|
}
|
|
36
84
|
|
|
85
|
+
/**
|
|
86
|
+
* `imapConnect()` 的返回结果。
|
|
87
|
+
*/
|
|
37
88
|
export interface IMAPConnectionResult {
|
|
89
|
+
/** 连接是否成功 */
|
|
38
90
|
success: boolean;
|
|
91
|
+
/** 连接成功后服务器返回的信息(失败时为 undefined) */
|
|
39
92
|
serverInfo?: {
|
|
93
|
+
/** 服务器标识名 */
|
|
40
94
|
serverName: string;
|
|
95
|
+
/** 服务器支持的 IMAP 能力列表,如 `IMAP4rev1`、`IDLE`、`AUTH=PLAIN` */
|
|
41
96
|
capabilities: string[];
|
|
97
|
+
/** 连接是否启用了压缩(COMPRESS=DEFLATE) */
|
|
42
98
|
isCompressed: boolean;
|
|
43
99
|
};
|
|
100
|
+
/** 连接失败时的错误信息(成功时为空) */
|
|
44
101
|
error?: string;
|
|
45
102
|
}
|
|
46
103
|
|
|
104
|
+
/**
|
|
105
|
+
* `smtpConnect()` 的返回结果。
|
|
106
|
+
*/
|
|
47
107
|
export interface SMTPConnectionResult {
|
|
108
|
+
/** 连接是否成功 */
|
|
48
109
|
success: boolean;
|
|
110
|
+
/** 连接成功后服务器返回的信息(失败时为 undefined) */
|
|
49
111
|
serverInfo?: {
|
|
112
|
+
/** 服务器标识名 */
|
|
50
113
|
serverName: string;
|
|
114
|
+
/** 服务器支持的 SMTP 扩展能力列表,如 `STARTTLS`、`SIZE` */
|
|
51
115
|
capabilities: string[];
|
|
116
|
+
/** 服务器支持的认证方法,如 `PLAIN`、`LOGIN`、`XOAUTH2` */
|
|
52
117
|
supportedAuthMethods: string[];
|
|
53
118
|
};
|
|
119
|
+
/** 连接失败时的错误信息(成功时为空) */
|
|
54
120
|
error?: string;
|
|
55
121
|
}
|
|
56
122
|
|
|
57
123
|
// ─── Mailbox / Folder ───────────────────────────────────────
|
|
58
124
|
|
|
125
|
+
/**
|
|
126
|
+
* 邮箱/文件夹的标记(flag)名称。
|
|
127
|
+
* 常见值:`\\Seen`、`\\Answered`、`\\Flagged`、`\\Draft`、`\\Deleted`、`\\Junk` 等。
|
|
128
|
+
*/
|
|
59
129
|
export type MailboxFlag = string;
|
|
60
130
|
|
|
131
|
+
/**
|
|
132
|
+
* 邮箱列表中的一个邮箱(IMAP mailbox)。
|
|
133
|
+
* 由 `imapListMailboxes()` 返回。
|
|
134
|
+
*/
|
|
61
135
|
export interface Mailbox {
|
|
136
|
+
/** 邮箱名称(不含路径分隔符) */
|
|
62
137
|
name: string;
|
|
138
|
+
/** 邮箱完整路径,例如 `INBOX`、`Work/Project A` */
|
|
63
139
|
path: string;
|
|
140
|
+
/** 路径分隔符(通常 `/` 或 `.`) */
|
|
64
141
|
delimiter: string;
|
|
142
|
+
/** 邮箱属性标记,如 `\\Noselect`、`\\HasNoChildren` */
|
|
65
143
|
flags: MailboxFlag[];
|
|
144
|
+
/** 是否已被订阅 */
|
|
66
145
|
subscribed: boolean;
|
|
67
146
|
}
|
|
68
147
|
|
|
148
|
+
/**
|
|
149
|
+
* 文件夹树中的一个文件夹。
|
|
150
|
+
* 由 `imapFetchFolders()` 返回。
|
|
151
|
+
*/
|
|
69
152
|
export interface Folder {
|
|
153
|
+
/** 文件夹名称(不含路径分隔符) */
|
|
70
154
|
name: string;
|
|
155
|
+
/** 文件夹完整路径 */
|
|
71
156
|
path: string;
|
|
157
|
+
/** 路径分隔符(通常 `/` 或 `.`) */
|
|
72
158
|
delimiter: string;
|
|
159
|
+
/** 父文件夹路径;顶层文件夹为 `''` */
|
|
73
160
|
parent: string;
|
|
161
|
+
/** 直接子文件夹路径列表 */
|
|
74
162
|
children: string[];
|
|
163
|
+
/** 文件夹属性标记,如 `\\Noselect` */
|
|
75
164
|
flags: MailboxFlag[];
|
|
165
|
+
/** 是否已被订阅 */
|
|
76
166
|
subscribed: boolean;
|
|
167
|
+
/** 文件夹内邮件总数 */
|
|
77
168
|
messageCount: number;
|
|
169
|
+
/** 文件夹内未读邮件数 */
|
|
78
170
|
unseenCount: number;
|
|
79
171
|
}
|
|
80
172
|
|
|
81
173
|
// ─── Mailbox Status ─────────────────────────────────────────
|
|
82
174
|
|
|
175
|
+
/**
|
|
176
|
+
* 邮箱状态信息。
|
|
177
|
+
* 由 `imapSelectMailbox()` / `imapRefreshMailbox()` 返回。
|
|
178
|
+
*/
|
|
83
179
|
export interface MailboxStatus {
|
|
180
|
+
/** 邮箱名称 */
|
|
84
181
|
name: string;
|
|
182
|
+
/** 邮箱完整路径 */
|
|
85
183
|
path: string;
|
|
184
|
+
/** 下一个可用的 UID(新邮件会获得此 UID) */
|
|
86
185
|
uidNext: number;
|
|
186
|
+
/** UID 有效性标识;该值变化说明邮箱的 UID 已重置 */
|
|
87
187
|
uidValidity: number;
|
|
188
|
+
/** 邮箱内邮件总数 */
|
|
88
189
|
messageCount: number;
|
|
190
|
+
/** 标记为 `\\Recent` 的邮件数(仅在本次会话内有效) */
|
|
89
191
|
recentCount: number;
|
|
192
|
+
/** 未读邮件数 */
|
|
90
193
|
unseenCount: number;
|
|
194
|
+
/** 第一封未读邮件的 UID;没有未读时为 0 */
|
|
91
195
|
firstUnseenUid: number;
|
|
196
|
+
/** 最新修改序号(MODSEQ),用于增量同步;服务器不支持时为 undefined */
|
|
92
197
|
highestModSeq?: number;
|
|
198
|
+
/** 邮箱支持的标记列表 */
|
|
93
199
|
flags: string[];
|
|
200
|
+
/** 可持久化保存的标记列表 */
|
|
94
201
|
permanentFlags: string[];
|
|
95
202
|
}
|
|
96
203
|
|
|
97
204
|
// ─── Email ──────────────────────────────────────────────────
|
|
98
205
|
|
|
206
|
+
/**
|
|
207
|
+
* 邮件标记(flag)。
|
|
208
|
+
* 对应 IMAP 系统标记,映射到 `\\Seen` 等。
|
|
209
|
+
*/
|
|
99
210
|
export type EmailFlag =
|
|
211
|
+
/** 已读 */
|
|
100
212
|
| 'seen'
|
|
213
|
+
/** 已回复 */
|
|
101
214
|
| 'answered'
|
|
215
|
+
/** 已标记(星标) */
|
|
102
216
|
| 'flagged'
|
|
217
|
+
/** 已删除(标记删除,需 expunge 才真正删除) */
|
|
103
218
|
| 'deleted'
|
|
219
|
+
/** 草稿 */
|
|
104
220
|
| 'draft'
|
|
221
|
+
/** 新邮件 */
|
|
105
222
|
| 'recent'
|
|
223
|
+
/** 垃圾邮件 */
|
|
106
224
|
| 'junk'
|
|
225
|
+
/** 已转发 */
|
|
107
226
|
| 'forwarded';
|
|
108
227
|
|
|
228
|
+
/**
|
|
229
|
+
* 邮件优先级。
|
|
230
|
+
*/
|
|
109
231
|
export type EmailPriority = 'low' | 'normal' | 'high';
|
|
110
232
|
|
|
233
|
+
/**
|
|
234
|
+
* 邮件地址(发件人 / 收件人等)。
|
|
235
|
+
*/
|
|
111
236
|
export interface EmailAddress {
|
|
237
|
+
/** 显示名称,例如 `张三`;无名称时为 `''` */
|
|
112
238
|
name: string;
|
|
239
|
+
/** 邮箱地址,例如 `zhangsan@example.com` */
|
|
113
240
|
email: string;
|
|
114
241
|
}
|
|
115
242
|
|
|
243
|
+
/**
|
|
244
|
+
* 邮件附件。
|
|
245
|
+
*/
|
|
116
246
|
export interface Attachment {
|
|
247
|
+
/** 附件文件名 */
|
|
117
248
|
filename: string;
|
|
249
|
+
/** MIME 类型,例如 `image/png`、`application/pdf` */
|
|
118
250
|
mimeType: string;
|
|
251
|
+
/** 附件在邮件体中的部分 ID,可用于 `imapFetchAttachments()` 重新获取 */
|
|
119
252
|
partId: string;
|
|
253
|
+
/** 附件大小(字节) */
|
|
120
254
|
size: number;
|
|
255
|
+
/** 附件二进制内容 */
|
|
121
256
|
data: ArrayBuffer;
|
|
257
|
+
/** 内嵌资源(CID)的 content-id;非内嵌时为 undefined */
|
|
122
258
|
contentId?: string;
|
|
259
|
+
/** 是否内嵌在邮件正文中显示(如邮件内的图片) */
|
|
123
260
|
isInline: boolean;
|
|
261
|
+
/** 附件字符集(文本类附件) */
|
|
124
262
|
charset?: string;
|
|
263
|
+
/** MIME 内容处置,通常为 `attachment` 或 `inline` */
|
|
125
264
|
contentDisposition: string;
|
|
126
|
-
/**
|
|
265
|
+
/** 附件在本地缓存的文件路径(大附件避免全部加载到内存) */
|
|
127
266
|
localPath?: string;
|
|
128
267
|
}
|
|
129
268
|
|
|
269
|
+
/**
|
|
270
|
+
* 邮件正文。
|
|
271
|
+
*/
|
|
130
272
|
export interface EmailBody {
|
|
273
|
+
/** 纯文本正文;无时为 undefined */
|
|
131
274
|
text?: string;
|
|
275
|
+
/** HTML 正文;无时为 undefined */
|
|
132
276
|
html?: string;
|
|
277
|
+
/** 内嵌在正文中的资源(图片等) */
|
|
133
278
|
embeddedAttachments: Attachment[];
|
|
134
279
|
}
|
|
135
280
|
|
|
281
|
+
/**
|
|
282
|
+
* 邮件线程(会话)信息。
|
|
283
|
+
*/
|
|
136
284
|
export interface ThreadInfo {
|
|
285
|
+
/** 线程唯一 ID */
|
|
137
286
|
threadId: string;
|
|
287
|
+
/** 父邮件的 Message-ID;根邮件为 `null` */
|
|
138
288
|
parentMessageId: string | null;
|
|
289
|
+
/** 在线程树中的深度(根为 0) */
|
|
139
290
|
depth: number;
|
|
291
|
+
/** 子线程列表 */
|
|
140
292
|
children: ThreadInfo[];
|
|
141
293
|
}
|
|
142
294
|
|
|
295
|
+
/**
|
|
296
|
+
* 一封完整的邮件。
|
|
297
|
+
*/
|
|
143
298
|
export interface Email {
|
|
299
|
+
/** 邮件的唯一 UID(在同一邮箱内稳定) */
|
|
144
300
|
uid: number;
|
|
301
|
+
/** 邮件在当前邮箱中的序号(会随删除邮件变化,仅当次会话有效) */
|
|
145
302
|
sequenceNumber: number;
|
|
303
|
+
/** 邮件主题 */
|
|
146
304
|
subject: string;
|
|
305
|
+
/** 发件人 */
|
|
147
306
|
from: EmailAddress;
|
|
307
|
+
/** 收件人列表 */
|
|
148
308
|
to: EmailAddress[];
|
|
309
|
+
/** 抄送列表 */
|
|
149
310
|
cc: EmailAddress[];
|
|
311
|
+
/** 密送列表(通常为空,因服务器不返回) */
|
|
150
312
|
bcc: EmailAddress[];
|
|
313
|
+
/** 回复地址列表 */
|
|
151
314
|
replyTo: EmailAddress[];
|
|
315
|
+
/** 发送时间(ISO 8601 字符串) */
|
|
152
316
|
date: string;
|
|
317
|
+
/** 服务器接收时间(ISO 8601 字符串) */
|
|
153
318
|
receivedDate: string;
|
|
319
|
+
/** 邮件正文 */
|
|
154
320
|
body: EmailBody;
|
|
321
|
+
/** 附件列表 */
|
|
155
322
|
attachments: Attachment[];
|
|
323
|
+
/** 邮件标记列表 */
|
|
156
324
|
flags: EmailFlag[];
|
|
325
|
+
/** 全部原始头字段(key 为头名小写) */
|
|
157
326
|
headers: Record<string, string>;
|
|
327
|
+
/** 邮件大小(字节) */
|
|
158
328
|
size: number;
|
|
329
|
+
/** Message-ID 头 */
|
|
159
330
|
messageId: string;
|
|
331
|
+
/** 回复的父邮件 Message-ID;无时为 undefined */
|
|
160
332
|
inReplyTo?: string;
|
|
333
|
+
/** 引用链(空格分隔的 Message-ID 列表) */
|
|
161
334
|
references?: string;
|
|
335
|
+
/** 优先级 */
|
|
162
336
|
priority: EmailPriority;
|
|
337
|
+
/** 是否加密(如 S/MIME、PGP 标记) */
|
|
163
338
|
isEncrypted: boolean;
|
|
339
|
+
/** 邮件 MIME 类型,如 `text/plain`、`multipart/mixed` */
|
|
164
340
|
mimeType: string;
|
|
341
|
+
/** 邮件字符集,如 `UTF-8` */
|
|
165
342
|
charset: string;
|
|
166
343
|
}
|
|
167
344
|
|
|
168
345
|
// ─── Fetch Options ──────────────────────────────────────────
|
|
169
346
|
|
|
347
|
+
/**
|
|
348
|
+
* 控制获取邮件时加载哪些部分。
|
|
349
|
+
*/
|
|
170
350
|
export interface FetchOptions {
|
|
351
|
+
/** 是否下载正文(纯文本/HTML),默认 `true` */
|
|
171
352
|
fetchBody?: boolean;
|
|
353
|
+
/** 是否下载附件,默认 `true` */
|
|
172
354
|
fetchAttachments?: boolean;
|
|
355
|
+
/** 是否返回标记,默认 `true` */
|
|
173
356
|
fetchFlags?: boolean;
|
|
357
|
+
/** 是否返回完整头字段,默认 `true` */
|
|
174
358
|
fetchHeaders?: boolean;
|
|
359
|
+
/** 是否返回完整原始邮件内容,默认 `false` */
|
|
175
360
|
fetchFullContent?: boolean;
|
|
361
|
+
/** 正文大小上限(字节),超过则截断/不下载 */
|
|
176
362
|
maxBodySize?: number;
|
|
177
363
|
}
|
|
178
364
|
|
|
365
|
+
/**
|
|
366
|
+
* `imapFetchEmails()` 的查询选项。
|
|
367
|
+
*
|
|
368
|
+
* 支持三种「范围模式」,按以下优先级生效:
|
|
369
|
+
* 1. `from` + `to`(指定 UID / 序号区间)
|
|
370
|
+
* 2. `page` + `pageSize`(分页,从最新邮件往前翻)
|
|
371
|
+
* 3. 默认:最近的 `pageSize ?? 20` 封
|
|
372
|
+
*/
|
|
179
373
|
export interface FetchEmailsOptions {
|
|
180
|
-
|
|
374
|
+
/** 范围起始(UID 或序号) */
|
|
181
375
|
from?: number;
|
|
376
|
+
/** 范围结束(UID 或序号) */
|
|
182
377
|
to?: number;
|
|
378
|
+
/**
|
|
379
|
+
* 范围按 UID 还是按序号解释:
|
|
380
|
+
* - `'uid'`:按 UID(推荐,稳定不随删除变化)
|
|
381
|
+
* - `'sequence'`:按邮箱内序号(会随删除变化)
|
|
382
|
+
*/
|
|
183
383
|
rangeType?: 'uid' | 'sequence';
|
|
184
|
-
|
|
384
|
+
/** 页码(从 1 开始,第 1 页为最新邮件) */
|
|
185
385
|
page?: number;
|
|
386
|
+
/** 每页数量 */
|
|
186
387
|
pageSize?: number;
|
|
187
|
-
|
|
388
|
+
/** 只取晚于该时间的邮件(ISO 8601 字符串) */
|
|
188
389
|
since?: string;
|
|
390
|
+
/** 只取早于该时间的邮件(ISO 8601 字符串) */
|
|
189
391
|
before?: string;
|
|
190
|
-
|
|
392
|
+
/** 目标邮箱路径,默认 `'INBOX'` */
|
|
191
393
|
mailbox?: string;
|
|
192
|
-
|
|
394
|
+
/** 是否下载正文,默认 `true` */
|
|
193
395
|
fetchBody?: boolean;
|
|
396
|
+
/** 是否下载附件,默认 `true` */
|
|
194
397
|
fetchAttachments?: boolean;
|
|
398
|
+
/** 是否返回标记,默认 `true` */
|
|
195
399
|
fetchFlags?: boolean;
|
|
400
|
+
/** 是否返回完整头字段,默认 `true` */
|
|
196
401
|
fetchHeaders?: boolean;
|
|
402
|
+
/** 是否返回完整原始邮件内容,默认 `false` */
|
|
197
403
|
fetchFullContent?: boolean;
|
|
404
|
+
/** 正文大小上限(字节) */
|
|
198
405
|
maxBodySize?: number;
|
|
199
406
|
}
|
|
200
407
|
|
|
201
408
|
// ─── Search ─────────────────────────────────────────────────
|
|
202
409
|
|
|
410
|
+
/**
|
|
411
|
+
* `imapSearchEmails()` 的搜索条件。
|
|
412
|
+
* 多个条件之间为「且」的关系。
|
|
413
|
+
*/
|
|
203
414
|
export interface SearchCriteria {
|
|
415
|
+
/** 全文搜索关键字 */
|
|
204
416
|
text?: string;
|
|
417
|
+
/** 按主题搜索 */
|
|
205
418
|
subject?: string;
|
|
419
|
+
/** 按发件人搜索 */
|
|
206
420
|
from?: string;
|
|
421
|
+
/** 按收件人搜索 */
|
|
207
422
|
to?: string;
|
|
423
|
+
/** 按正文搜索 */
|
|
208
424
|
body?: string;
|
|
425
|
+
/** 只搜内部日期晚于该时间的邮件(ISO 8601) */
|
|
209
426
|
since?: string;
|
|
427
|
+
/** 只搜内部日期早于该时间的邮件(ISO 8601) */
|
|
210
428
|
before?: string;
|
|
429
|
+
/** 只搜内部日期等于该日的邮件(ISO 8601) */
|
|
211
430
|
on?: string;
|
|
431
|
+
/** 只搜发送日期晚于该时间的邮件(ISO 8601) */
|
|
212
432
|
sentSince?: string;
|
|
433
|
+
/** 只搜发送日期早于该时间的邮件(ISO 8601) */
|
|
213
434
|
sentBefore?: string;
|
|
435
|
+
/** 是否只搜已加星标的邮件 */
|
|
214
436
|
flagged?: boolean;
|
|
437
|
+
/** 是否只搜已读邮件 */
|
|
215
438
|
seen?: boolean;
|
|
439
|
+
/** 是否只搜已回复邮件 */
|
|
216
440
|
answered?: boolean;
|
|
441
|
+
/** 是否只搜草稿 */
|
|
217
442
|
draft?: boolean;
|
|
443
|
+
/** 是否只搜已标记删除的邮件 */
|
|
218
444
|
deleted?: boolean;
|
|
445
|
+
/** 是否只搜垃圾邮件 */
|
|
219
446
|
junk?: boolean;
|
|
447
|
+
/** 是否只搜带附件的邮件 */
|
|
220
448
|
hasAttachment?: boolean;
|
|
449
|
+
/** 只搜指定 UID 列表中的邮件 */
|
|
221
450
|
uids?: number[];
|
|
451
|
+
/** 按自定义头字段搜索,如 `{ key: 'X-Tag', value: 'vip' }` */
|
|
222
452
|
header?: { key: string; value: string };
|
|
453
|
+
/** 只搜大于该字节数的邮件 */
|
|
223
454
|
larger?: number;
|
|
455
|
+
/** 只搜小于该字节数的邮件 */
|
|
224
456
|
smaller?: number;
|
|
457
|
+
/** 目标邮箱路径,默认 `'INBOX'` */
|
|
225
458
|
mailbox?: string;
|
|
459
|
+
/** 结果排序,默认 `'desc'`(新邮件在前) */
|
|
226
460
|
sortOrder?: 'asc' | 'desc';
|
|
461
|
+
/** 最多返回的邮件数 */
|
|
227
462
|
limit?: number;
|
|
228
|
-
|
|
463
|
+
/** 是否下载正文,默认 `true` */
|
|
229
464
|
fetchBody?: boolean;
|
|
465
|
+
/** 是否下载附件,默认 `true` */
|
|
230
466
|
fetchAttachments?: boolean;
|
|
467
|
+
/** 是否返回标记,默认 `true` */
|
|
231
468
|
fetchFlags?: boolean;
|
|
469
|
+
/** 是否返回完整头字段,默认 `true` */
|
|
232
470
|
fetchHeaders?: boolean;
|
|
471
|
+
/** 是否返回完整原始邮件内容,默认 `false` */
|
|
233
472
|
fetchFullContent?: boolean;
|
|
473
|
+
/** 正文大小上限(字节) */
|
|
234
474
|
maxBodySize?: number;
|
|
235
475
|
}
|
|
236
476
|
|
|
237
477
|
// ─── Send Mail ──────────────────────────────────────────────
|
|
238
478
|
|
|
479
|
+
/**
|
|
480
|
+
* 发送邮件时的附件描述。
|
|
481
|
+
*/
|
|
239
482
|
export interface SendAttachment {
|
|
483
|
+
/** 附件文件名 */
|
|
240
484
|
filename: string;
|
|
485
|
+
/** MIME 类型,例如 `image/png` */
|
|
241
486
|
mimeType: string;
|
|
487
|
+
/** 附件内容(二进制) */
|
|
242
488
|
data: ArrayBuffer;
|
|
489
|
+
/** 是否内嵌在正文显示(如邮件内图片) */
|
|
243
490
|
isInline?: boolean;
|
|
491
|
+
/** 内嵌资源的 content-id */
|
|
244
492
|
contentId?: string;
|
|
493
|
+
/** 内容处置,默认根据 `isInline` 推断为 `inline` 或 `attachment` */
|
|
245
494
|
disposition?: 'attachment' | 'inline';
|
|
246
495
|
}
|
|
247
496
|
|
|
497
|
+
/**
|
|
498
|
+
* `smtpSendMail()` 的发信选项。
|
|
499
|
+
*/
|
|
248
500
|
export interface SendMailOptions {
|
|
501
|
+
/** 发件人 */
|
|
249
502
|
from: EmailAddress;
|
|
503
|
+
/** 收件人列表 */
|
|
250
504
|
to: EmailAddress[];
|
|
505
|
+
/** 抄送列表 */
|
|
251
506
|
cc?: EmailAddress[];
|
|
507
|
+
/** 密送列表(收件人不可见) */
|
|
252
508
|
bcc?: EmailAddress[];
|
|
509
|
+
/** 回复地址列表(默认取 `from`) */
|
|
253
510
|
replyTo?: EmailAddress[];
|
|
511
|
+
/** 邮件主题 */
|
|
254
512
|
subject: string;
|
|
513
|
+
/** 纯文本正文 */
|
|
255
514
|
textBody?: string;
|
|
515
|
+
/** HTML 正文 */
|
|
256
516
|
htmlBody?: string;
|
|
517
|
+
/** 附件列表 */
|
|
257
518
|
attachments?: SendAttachment[];
|
|
519
|
+
/** 优先级,会写入 `X-Priority` 头 */
|
|
258
520
|
priority?: EmailPriority;
|
|
521
|
+
/** 自定义头字段 */
|
|
259
522
|
headers?: Record<string, string>;
|
|
523
|
+
/** 回复的父邮件 Message-ID */
|
|
260
524
|
inReplyTo?: string;
|
|
525
|
+
/** 引用链 */
|
|
261
526
|
references?: string;
|
|
527
|
+
/** 阅读回执收件人(写入 `Disposition-Notification-To` 头) */
|
|
262
528
|
readReceiptTo?: EmailAddress;
|
|
529
|
+
/** 邮件字符集,默认 `UTF-8` */
|
|
263
530
|
charset?: string;
|
|
531
|
+
/** 正文传输编码 */
|
|
264
532
|
encoding?: '7bit' | '8bit' | 'base64' | 'quoted-printable';
|
|
265
533
|
}
|
|
266
534
|
|
|
535
|
+
/**
|
|
536
|
+
* `smtpSendMail()` 的返回结果。
|
|
537
|
+
*/
|
|
267
538
|
export interface SendMailResult {
|
|
539
|
+
/** 发送是否成功 */
|
|
268
540
|
success: boolean;
|
|
541
|
+
/** 服务器生成的 Message-ID */
|
|
269
542
|
messageId?: string;
|
|
543
|
+
/** 发送时间(ISO 8601) */
|
|
270
544
|
date?: string;
|
|
545
|
+
/** 服务器响应码(通常 250) */
|
|
271
546
|
serverResponseCode?: number;
|
|
547
|
+
/** 发送的原始 MIME 数据 */
|
|
272
548
|
rawMimeData?: ArrayBuffer;
|
|
549
|
+
/** 队列 ID(与 `messageId` 相同,供排队服务使用) */
|
|
273
550
|
queueId?: string;
|
|
551
|
+
/** 失败时的错误信息 */
|
|
274
552
|
error?: string;
|
|
553
|
+
/** 该错误是否可重试(网络 / 超时类错误为 true) */
|
|
275
554
|
retryable?: boolean;
|
|
276
555
|
}
|
|
277
556
|
|
|
278
557
|
// ─── IDLE ───────────────────────────────────────────────────
|
|
279
558
|
|
|
559
|
+
/**
|
|
560
|
+
* IMAP IDLE 实时通知。
|
|
561
|
+
* 由 `imapIdle()` 的回调接收,表示邮箱发生了某种变化。
|
|
562
|
+
*/
|
|
280
563
|
export interface IMAPNotification {
|
|
564
|
+
/** 通知类型 */
|
|
281
565
|
type:
|
|
566
|
+
/** 新邮件到达 */
|
|
282
567
|
| 'newMessage'
|
|
568
|
+
/** 有邮件被删除 */
|
|
283
569
|
| 'messageDeleted'
|
|
570
|
+
/** 有邮件被标记(如加星标) */
|
|
284
571
|
| 'messageFlagged'
|
|
572
|
+
/** 邮箱整体发生变化(如 uidValidity 重置) */
|
|
285
573
|
| 'mailboxChanged'
|
|
574
|
+
/** 连接意外断开 */
|
|
286
575
|
| 'connectionLost';
|
|
576
|
+
/** 发生变化的邮箱路径 */
|
|
287
577
|
mailbox: string;
|
|
578
|
+
/** 涉及邮件的 UID(`mailboxChanged` 时可能为空) */
|
|
288
579
|
uid?: number;
|
|
580
|
+
/** 涉及的新标记名(`messageFlagged` 时) */
|
|
289
581
|
flag?: string;
|
|
582
|
+
/** 变化后的邮件总数 */
|
|
290
583
|
messageCount?: number;
|
|
584
|
+
/** 通知时间戳(毫秒) */
|
|
291
585
|
timestamp: number;
|
|
292
586
|
}
|
|
293
587
|
|
|
294
588
|
// ─── Quota ──────────────────────────────────────────────────
|
|
295
589
|
|
|
590
|
+
/**
|
|
591
|
+
* 邮箱配额信息。
|
|
592
|
+
* 由 `imapGetQuota()` 返回。
|
|
593
|
+
*/
|
|
296
594
|
export interface QuotaInfo {
|
|
595
|
+
/** 已用存储(字节) */
|
|
297
596
|
storageUsed: number;
|
|
597
|
+
/** 存储上限(字节) */
|
|
298
598
|
storageLimit: number;
|
|
599
|
+
/** 存储单位,通常为字节 `B` */
|
|
299
600
|
storageUnit: string;
|
|
601
|
+
/** 已用邮件数(服务器支持时) */
|
|
300
602
|
messagesUsed?: number;
|
|
603
|
+
/** 邮件数上限(服务器支持时) */
|
|
301
604
|
messagesLimit?: number;
|
|
605
|
+
/** 配额根名称 */
|
|
302
606
|
root: string;
|
|
303
607
|
}
|
|
304
608
|
|
|
305
609
|
// ─── Batch & Append Results ─────────────────────────────────
|
|
306
610
|
|
|
611
|
+
/**
|
|
612
|
+
* 批量操作(如 `imapDeleteEmails`)的结果,按传入顺序逐封统计。
|
|
613
|
+
*/
|
|
307
614
|
export interface BatchResult {
|
|
615
|
+
/** 操作成功的 UID 列表 */
|
|
308
616
|
success: number[];
|
|
617
|
+
/** 操作失败的 UID 列表 */
|
|
309
618
|
failed: number[];
|
|
619
|
+
/** 失败时的错误信息 */
|
|
310
620
|
error?: string;
|
|
311
621
|
}
|
|
312
622
|
|
|
623
|
+
/**
|
|
624
|
+
* `imapAppendMessage()` 的返回结果(追加成功后服务器分配的元数据)。
|
|
625
|
+
*/
|
|
313
626
|
export interface AppendResult {
|
|
627
|
+
/** 新邮件被分配的 UID */
|
|
314
628
|
uid: number;
|
|
629
|
+
/** 追加时的 uidValidity */
|
|
315
630
|
uidValidity: number;
|
|
631
|
+
/** 服务器记录的追加时间(ISO 8601) */
|
|
316
632
|
date: string;
|
|
317
633
|
}
|
|
318
634
|
|
|
319
635
|
// ─── Error ──────────────────────────────────────────────────
|
|
320
636
|
|
|
637
|
+
/**
|
|
638
|
+
* 邮件操作失败时抛出的错误对象。
|
|
639
|
+
*/
|
|
321
640
|
export interface EmailError {
|
|
641
|
+
/** 机器可读的错误码,如 `ECONNECTION`、`AUTH_FAILED` */
|
|
322
642
|
code: string;
|
|
643
|
+
/** 人类可读的错误信息 */
|
|
323
644
|
message: string;
|
|
645
|
+
/** 是否可重试(网络 / 超时类错误为 true) */
|
|
324
646
|
retryable: boolean;
|
|
647
|
+
/** 服务器返回的响应原文 */
|
|
325
648
|
serverResponse?: string;
|
|
649
|
+
/** 原始响应内容(与 `serverResponse` 可能相同) */
|
|
326
650
|
originalResponse?: string;
|
|
651
|
+
/** 附加的详细错误数据(取决于具体实现) */
|
|
327
652
|
details?: any;
|
|
328
653
|
}
|