Skip to content

Feature Search zh

SkimMail docs edited this page Sep 15, 2026 · 3 revisions

English · Tiếng Việt · 中文

搜索

SkimMail 分两级搜索。缓存是本地全文索引,瞬时返回。服务器会再去问你的 邮件服务器,慢一些,但能找到 SkimMail 从未下载过的邮件。你通过搜索框下方的两个标 签在两者之间选择。

1.13.0 起,搜索只返回你自己的邮件;而在统一收件箱里选择服务器时,它会说 清楚自己需要什么,而不是悄悄回答另一个问题。1.14.0 才把这件事做完:1.13.0 限制 的是服务器层返回什么,而不是它什么——见下文。

缓存——默认项

SkimMail 同步过的每一封邮件都在一个本地全文索引里。在搜索框里输入即查询该索引,没 有任何东西离开这台机器。

它匹配什么:

  • 主题和发件人地址,仅此而已。邮件正文没有被索引——索引里为正文留了一列,而 SkimMail 有意把它写成空——因此搜索你记得的、出现在邮件正文里的短语是找不到的。
  • 词的前缀inv 匹配 invoice;输入更多词会缩小结果,因为所有词都必须命中。

结果列表上限为 200 封,最新在前。

tag: 操作符

自 1.16.0 起。 输入 tag: 后跟一个标签名即可按它筛选——tag:finance,或者 tag:finance invoice 表示在某个标签内部搜索,标签里有空格时用 tag:"to read"。孤零零一个 tag:、后面什么都没有时,会被当作普通文本保留,所以 不会在你打字打到一半时清空筛选。

它是在浏览器里被解析的,早于查询到达服务器——因为服务器自己的分词器会剥掉标 点符号,原样发送的话,tag:finance 到了索引那里会变成两个都匹配不上的普通词,而 不是一个错误。这也是为什么它是唯一的操作符:这里没有 from:、没有 has:、没 有 before:,加一个是产品尚未做出的决定,不是遗漏。

使用它做的事和点一下标签芯片一样:它设置的正是自 1.4.1 起就存在的那个标签筛选。 单独一个 tag:finance——没有其它文字——是一个筛选,不是一次搜索,返回的结果和点 那个芯片一样。在它旁边再输入其它文字,就是在这个已筛选的集合内部搜索,两个层级 都一样。搜索期间标签芯片会一直留在工具栏上,所以一个筛选条件不会再悄悄收窄你的结 果而你却看不出原因。标签是什么、又是怎么被贴上的,见标签

服务器——一次一个邮箱

按下服务器标签,SkimMail 会额外去问邮件服务器本身,它知道那些比你本地同步窗口 更旧、更多的邮件。

  • 它只搜索该账户的 INBOX
  • 命中的邮件头会被取回缓存,此后它们就和其它邮件一样;其中真正新增的行会在结 果列表里标上 来自服务器
  • 如果服务端搜索失败——账户离线、egress 中断、服务器不支持该查询——失败只会被记入日 志,你仍然会拿到缓存结果。它是降级,而不是报错。

它需要恰好一个账户。 在统一收件箱上做服务器搜索意味着每个邮箱一条连接,所以 SkimMail 不这么做。

在 1.13.0 之前,统一收件箱里这个标签看上去仍然是生效的,却悄悄只返回缓存结果。 现在它会显示一条提示——"服务器搜索一次只能查一个邮箱,所以统一收件箱用不了它。选 一个账户,这次搜索会在那里重跑:"——后面跟着每个账户一个按钮。点其中一个就会切换 到那个账户,并以服务器搜索重跑同一条查询。

搜索按用户隔离 —— 结果自 1.13.0,连接自 1.14.0

在 1.13.0 之前的多用户实例上,搜索框会返回服务器上每一个账户的匹配结果:主题、 发件人地址、预览行,以及任何已缓存的 AI 摘要。任何登录的人都能读到,包括最低的角 色 viewer——而且只要在请求里写上别人的账户 id,就能把查询瞄准某一个人的邮箱。

1.13.0 把查询的两半都限制在提问者拥有的账户上:索引可以返回哪些邮件,以及随后可以 装载哪些行。

那修好的是这条路由返回什么,而不是它什么。 服务器层不只是读索引:它会 用被指名账户保存的密码和网络出口打开那个账户的 IMAP 连接,把你的搜索词跑在真实邮箱 上,再把取回的邮件头写进数据库。直到 1.14.0,这条路径都是直接从请求里取账户 id 而 不做校验。结果并不会回到调用者手里——1.13.0 已经限制了索引查询——但连接照样被打开, 数据照样以别人的名义被写入。账户的 Test connection 按钮是同一个形状。两者都在 1.14.0 修好。

单用户实例从未受影响;根本没有别人的邮箱可开。如果你的实例上不止一个人登录, 请用 1.14.0。见用户与角色

限制

缓存层搜索范围 主题 + 发件人地址
服务器层搜索范围 该账户的 INBOX,经由 provider
结果上限 200
查询语法 词按前缀匹配并以 AND 相连;唯一的操作符是 tag:(1.16.0),标签带空格时需要引号
范围 仅你自己的账户 —— 结果自 1.13.0,与邮件服务商的连接本身自 1.14.0
  • 不搜索邮件正文,不搜索附件内容,也不搜索附件文件名。
  • tag: 外没有其它过滤器——没有 from:,没有日期范围,没有"仅未读",也没 有排序选项。
  • 被静音和稍后处理的邮件都包含在内。 收件箱会把两者藏起来;搜索回答的是你提出 的问题。见静音与 VIP 发件人
  • MySQL 上的全文搜索行为与 SQLite、Postgres 不同。 MySQL 在安装向导里被标为实 验性,这就是原因之一。见配置
  • 服务器搜索会写入你的缓存。 命中的邮件头会被保存下来,这正是它们此后会出现在 普通列表里的原因;代价是一次 provider 连接。

它不做什么

  • 在缓存标签下,它不搜索你从未同步过的东西。 那是服务器标签的职责,而且只针对 一个账户的 INBOX。
  • 在服务器层,它不搜索 INBOX 之外的文件夹,尽管缓存层会照常返回它拥有的任何文 件夹里的匹配结果。
  • 它不保存搜索,也没有搜索历史。
  • 它不按相关度排序。 结果永远是最新在前。

另见

  • 已加星标 —— 找回一封你记得标记过的邮件的另一种方式
  • 标签 —— 标签是什么,以及 tag: 操作符设置的是和点击芯片同一 个筛选
  • 用户与角色 —— 搜索现在遵守的按用户边界
  • 配置 —— SYNC_DEPTH_DAYS 与各数据库 dialect

SkimMail · skimmail@base101.app · 2026-09-15 · commit 767741a

Clone this wiki locally