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/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
  }