跳到正文

隐私与安全 ​

Swanmail 的核心理念是:你的邮件属于你。本页说明哪些数据留在本机、哪些会离开本机,以及如何进一步加强保护。

无遥测 ​

Swanmail 不收集分析数据、崩溃报告、使用统计或任何遥测信息。没有追踪像素、没有第三方分析 SDK、也没有强制云服务。

本地优先的数据 ​

  • 所有邮件内容、元数据和附件都保存在本地 SQLite 数据库中。
  • 数据库位于 Swanmail 的数据目录:
    • macOS:~/Library/Application Support/swanmail/
    • Windows:%APPDATA%\swanmail\
    • Linux:~/.config/swanmail/(或 $XDG_CONFIG_HOME/swanmail/)
  • 搜索索引(SQLite FTS5)也是本地的。
  • 草稿本地保存,并可选同步到服务商的 IMAP 草稿箱。

加密凭证 ​

密码、OAuth token、API key 和私钥在保存前都会加密。在 macOS 上,密钥保存在数据目录的 safe-storage.key 文件中,只有你的用户账户能读取。它不在钥匙串里:Swanmail 没有用 Apple Developer ID 签名,放在钥匙串里的话,每次更新后 macOS 都会要你输入登录密码。以你的用户身份运行的任何程序都能读取这个文件,所以保护它的是 FileVault 和你的账户密码。在 Windows 上,密钥是一个随机密钥,保存在数据目录的 Local State 文件中,并用 Windows 数据保护 API(DPAPI)按你的 Windows 账户加以保护。在 Linux 上,密钥保存在 Secret Service(GNOME Keyring 或 KWallet)中;没有 Secret Service 时,密钥是数据目录中 safe-storage.key 文件里的随机密钥,只有你的用户账户能读取。旧版本在这种情况下用的是固定密钥,起不到保护作用;这些旧值仍然可以读取,你重新输入的密码会用新密钥保存。命令行工具从不读取钥匙串:能用时它使用应用的密钥文件(Windows 上是 Local State),否则使用由机器名、用户名和网络地址生成的密钥,这种密钥挡不住拿到数据库副本的人。

OAuth ​

发布版本自带 Google 和 Microsoft 的 OAuth client ID,在构建时填入;仓库中没有。这些凭证仅用于发起 OAuth 登录流程,该流程在浏览器中进行;最终获取的 refresh token 会加密后保存在你的设备上,access token 只保存在内存中。

如果你愿意,也可以用自己注册的 OAuth 应用替换默认凭证,方法是编辑应用的 config.json。详情请见 账号 页面。

AI 与 LLM 功能 ​

AI 功能完全可选,只有配置了智能体后才会出现:

  • 本地 CLI 智能体将所有邮件内容保留在本机。
  • LLM API 智能体会将 prompt 发送到你配置的端点(OpenAI、Groq、Ollama 等)。除非你显式添加并启用 LLM API 智能体,否则不会调用任何 LLM。

使用云端 LLM API 时,邮件内容会按照该服务商的条款被发送给他们。如果追求最高隐私,请使用本地 Ollama 服务器。

GPG 加密 ​

Swanmail 支持可选的 OpenPGP 签名和加密,HTML 和纯文本邮件都适用。加密后的邮件只能用你的私钥阅读,私钥与其他机密一样加密保存。

S/MIME ​

S/MIME 身份从 .p12 / .pfx 文件导入;私钥与其他机密一样加密保存。加密邮件只为你当前打开的视图解密,绝不会以明文写回。参见 S/MIME。

远程图片 ​

远程图片默认被阻止,以减少追踪像素泄露。你可以仅对当前邮件显示图片、打开全局阅读设置,或按账户保存该发件人地址/发件人域名的例外规则。例外规则保存在本地,不会在不同账户之间共享。

拦截由显示邮件的沙箱框架的 Content-Security-Policy 强制执行,因此同样会阻止 srcset 候选、CSS 背景图和网络字体——而不只是 <img> 标签。“仅本次显示”的选择只属于做出选择的那封邮件,绝不会带到你打开的下一封。

允许图片时,图片由应用后端获取后以数据形式交给邮件。该获取器只使用 http: 和 https:,拒绝回环、链路本地和内网地址(包括解析到这些地址的域名),逐跳检查重定向,一批图片超过 2.5 秒即放弃。

链接与钓鱼提示 ​

链接始终在系统浏览器中打开。如果链接的可见文字看起来是一个地址、实际却通向另一个主机,或目标是 punycode 或混合文字的域名,该链接会被标记,邮件上方会显示这类链接的数量。检查在本地对邮件 HTML 进行。

已读回执与退订 ​

Swanmail 绝不会自行答复已读回执请求;横幅会询问你,你的选择按邮件记住。退订 只在你确认后执行:一键退订是应用后端向发件方公布的地址发出的 HTTPS POST(内网地址会被拒绝);其他发件方则是一封你可以先查看再发送的邮件,或在浏览器中打开其页面。

标签、规则和其他本地状态 ​

规则、稍后提醒、免打扰和置顶的会话、模板以及定时邮件都只保存在本地数据库和设置中,不会同步到你的邮件服务商。标签也保存在本地,但 Microsoft 365(Graph)和 Exchange Server(EWS)账户除外:在这些账户上,标签就是邮件的 Outlook 类别,会与服务器同步。

网络连接 ​

Swanmail 直接连接你的邮件服务商的服务器(IMAP、SMTP、POP3、JMAP、Microsoft Graph 或 Exchange Web Services),以及你选择的 OAuth 身份提供商。中间不存在 Swanmail 后端或代理服务器。除此之外,它只会在以下情况访问网络:

  • Gmail API:用 Google 登录的 Gmail 账户,用于新邮件信号和服务器搜索。
  • 发件人头像:Swanmail 会在 DNS 中查询发件人域名的 BIMI 记录,并向 Google 的 favicon 服务(t1.gstatic.com)或该域名自己的网站获取图标。只发送域名。关闭 设置 → 常规 → 阅读 → 显示发件人头像 后只显示首字母,不再发出这些请求。
  • 服务器设置:添加账户时会查询域名的 MX 记录以填写服务器;Exchange 账户可能使用 Autodiscover。
  • 远程图片(在你允许之后)和一键退订(在你确认之后),见上文。
  • OpenPGP 密钥查找(WKD 和 keys.openpgp.org),仅在打开 加密 或你主动查找时进行。
  • 你为 AI 智能体配置的 LLM API。
  • 更新:Swanmail 每天从 swanmail.app/download/ 获取一次最新版本的签名清单,在 macOS 上还会从那里下载新版本;设置 → 关于 显示更新状态,可以手动检查,也可以用 自动检查更新 开关停止每天的检查。请求只带应用的版本号。开发版不会检查更新。

给极度谨慎用户的建议 ​

  • 使用 通用 IMAP/SMTP 配合应用专用密码,而非 OAuth。
  • 所有 AI 功能都通过本地 Ollama 服务器运行。
  • 对敏感 outgoing 邮件启用 GPG 加密。
  • 在服务商账号设置中审查并限制你授予 Swanmail 的 OAuth 权限范围。