邮件服务

邮箱概览、邮件列表/搜索、收发邮件、文件夹、草稿与附件

模块类型:service | 基础路径:/api/v2/mail | 鉴权:设备 APIKey

应用须在后台启用 mail 服务(否则 403)。

设备 App 内的邮件功能。邮箱凭证(地址 / IMAP·SMTP 主机与授权码)由客户端每次请求携带,服务端不存储。

通用约定

  • 鉴权:除附件下载 URL(令牌)与头像(公开)外,均为设备 APIKey(请求体 Key 或 ?key=,路径含 :appname)。

  • 扣费:仅 /send 扣请求配额;其余端点均 noQuota。

  • 公共 IMAP 请求体字段:

    字段必填说明
    Key是设备 API Key
    email是邮箱地址
    imapPass是IMAP 密码 / 授权码
    imapHost是IMAP 服务器地址
    imapPort否IMAP 端口,默认 993
  • 响应信封:成功 { "status":200, "result":<数据>, "message"? };附件类返回二进制流。

  • SSRF:IMAP / SMTP 主机不允许指向内网地址(400)。


读取邮件

均为 POST、apikey、noQuota。

路径额外请求体字段说明 / result
/overview/:appname—邮箱概览(文件夹 / 未读等统计)
/list/:appnamestart?、end?、folder?、textOverflow?、UTCoffset?邮件摘要列表(分页)
/starred/:appname同 list星标邮件列表
/info/:appnameemailId、folder、Type?='json'、textOverflow?、UTCoffset?、markRead?=true单封邮件完整内容(正文 / 附件列表 / 时间);markRead:false 只预览不置已读
/folders/:appname—邮箱文件夹列表
/search/:appnamekeyword、start?、end?、folder?、textOverflow?、UTCoffset?关键词搜索结果

分页用 start / end(而非页码);folder 默认为 INBOX;textOverflow 控制正文截断长度。


邮件操作

均为 POST、apikey、noQuota。

路径请求体字段说明
/flag/:appnameemailId、action、folder?标记:seen / unseen / flagged / unflagged 等
/delete/:appnameemailId、folder?删除邮件
/move/:appnameemailId、targetFolder、folder?移动到文件夹
/batch-flag/:appnameemailIds[]、action、folder?批量标记
/batch-move/:appnameemailIds[]、targetFolder、folder?批量移动
/batch-delete/:appnameemailIds[]、folder?批量删除

文件夹管理

均为 POST、apikey、noQuota。

路径请求体字段说明
/folder-create/:appnamefolderName新建文件夹
/folder-rename/:appnameoldName、newName重命名文件夹
/folder-delete/:appnamefolderName删除文件夹

草稿

均为 POST、apikey、noQuota。

路径请求体字段说明
/draft-save/:appnamesendto、title、text 等(IMAP 凭证同公共字段)保存草稿
/draft-delete/:appnameemailId删除草稿

发送邮件

项目内容
APIPOST /api/v2/mail/send/:appname
鉴权设备 APIKey(扣配额)
说明经设备自带 SMTP 发送邮件

请求体:

字段必填说明
Key、email是设备 Key、发件邮箱
smtpHost是SMTP 服务器地址
smtpPass是SMTP 密码 / 授权码
smtpPort否SMTP 端口(465 隐式 TLS / 其余 STARTTLS)
sendto是收件人
title否邮件主题
text否正文
isHtml否正文是否为 HTML
cc、bcc否抄送 / 密送
senderName否发件人昵称
attachments否附件数组 [{ "filename": "...", "content": "<base64>" }]

成功: { "status": 200, "message": "邮件发送成功" }。HTML 正文会经白名单清洗。


验证邮箱配置

项目内容
APIPOST /api/v2/mail/verify/:appname
鉴权设备 APIKey(noQuota)
说明测试 IMAP / SMTP 连通性

请求体含 Key、email,及可选的 imap* / smtp* 配置。

返回:

{
  "status": 200,
  "result": {
    "imap": { "success": true, "message": "连接成功" },
    "smtp": { "success": true, "message": "连接成功" }
  }
}

附件

附件返回二进制流(非统一信封),提供两种方式:

方式API鉴权说明
POST/api/v2/mail/attachment/:appname设备 APIKey(noQuota)请求体 emailId、attachmentIndex、folder? + 公共 IMAP 字段,返回二进制流
GET/api/v2/mail/attachment/:appname/:emailId/:attachmentIndex?token=<令牌>公开(凭令牌)供前端 <img src> / <a href> 直接引用

GET 附件 URL 的 token 由 /info 返回的附件 URL 提供(AES-256-GCM 签名,绑定应用 / 邮箱 / 邮件 / 序号),过期或不匹配返回 401 / 403。这样无需在 URL 暴露 IMAP 凭证。


头像

项目内容
APIGET /api/v2/mail/avatar?email=<邮箱>
鉴权公开
说明302 跳转到 cravatar 头像(按邮箱 MD5)

大纲