从不接触你邮件的 Mac 版 Gmail 客户端
一款私密的邮件客户端,应该是一个你能够核实的承诺。本页介绍 Hark 这一承诺——你的邮件从不经过我们的服务器——背后的架构,细致到足以让你自行核实,包括少数确实会到达我们这里的内容、邮件可能接触的第三方,以及决定每一项的设置。
整体格局
只有两方:你的 Mac 和 Google。Hark 运行在前者上,从你的电脑通过 TLS,经由 Google 的 Gmail、Calendar、Tasks 和 People API 与后者通信。这条路径上没有第三方。我们不运营任何同步、中转、索引、备份或“加速”你邮件的服务器,因此我们的基础设施中不存在你邮件的副本,也就无从被入侵、被传唤调取或被泄露。
这不是一项可能在未来某个版本中被悄悄撤回的政策选择,而是应用本身的构建方式。同步引擎就在应用里;要在路径中插入一台服务器,就得围绕它把同步引擎重新构建一遍。
你的数据具体存放在哪里
- 你的 Google 令牌:在 macOS 钥匙串中。 让 Hark 能代表你操作账户的凭据,以钥匙串项目的形式存储,由 macOS 加密并控制访问。它们从不写入 Hark 自己的文件。
- 你的缓存:在 Application Support 中,仅你本人可读。 邮件、日程和任务保存在
~/Library/Application Support/Hark下的本地数据库中,每个账户一个文件夹,文件权限只允许你的用户读取。下载的附件缓存在~/Library/Caches/Hark下;缓存的远程图片、发件人头像和标志保存在~/Library/Caches/hark-url-cache、~/Library/Caches/hark-image-cache以及应用的 WebKit 存储中,全部位于你自己的“资源库”文件夹内。FileVault 会对这些静态数据全部加密。Hark 不在此之上另加自己的加密层——我们直白地说明这一点,好让你判断 FileVault 对你是否重要。 - 你的设置:在偏好设置文件中。 窗口位置、视图选择之类的内容,保存在应用的普通 macOS 偏好设置文件中,同时保存的还有你最近的搜索词(最近 25 条)和你已忽略的会话的 ID。其中不包含任何邮件内容。
- 退出登录时:撤销、删除、清除。 Hark 会在 Google 那边撤销其授权,删除钥匙串项目,并从磁盘上移除该账户的缓存。
哪些内容会到达我们这里,以及何时
在日常使用中——读信、写信、整理、查看一周安排——与你邮件有关的任何内容都不会到达我们这里。有五件事会涉及我们的服务器;其中四件只在你主动操作时才会发生:
- 统计活跃的 Mac 数量。 Hark 打开期间,每天一次,向
logs.harkmail.app发送一个专为此用途生成的随机使用 ID、日期、Hark 的版本号、构建号和更新渠道,以及 macOS 主版本号。它不与任何账户关联,不含任何邮件内容;服务器不保留 IP 地址,记录会在 13 个月后删除。 - 检查更新。 在你允许自动检查之后(Hark 会在第二次启动时询问),它会大约每天一次(公测版每小时一次)从
updates.harkmail.app获取一个很小的更新源文件,并在你接受新版本时从那里下载。另外,即使关闭了自动检查,Hark 也会在启动时和每天一次读取这份公开文件,无法访问时每 15 分钟重试一次,目的仅仅是确认你的版本是否仍受支持。不会发送任何标识符:服务器能看到你的 IP 地址和请求时间,请求的 User-Agent 包含应用和 macOS 的版本,请求中还带有你的 Accept-Language 偏好。不会发送任何与你账户有关的信息。 - 你发送的错误报告。 “Help › Report a Bug”会向
logs.harkmail.app发送:你输入的内容;你标记的是错误还是功能请求;你选择的区域;你自己附上的图片;姓名或电子邮件字段(默认填入你登录的地址,可以修改——清空即可匿名发送报告);以及关于应用和机器的信息——应用版本号、构建号和提交号、macOS 版本、硬件型号、CPU 核心数、内存大小、可用磁盘空间、区域设置、时区、散热状态、低电量模式、开机以来的小时数、发送时间、已连接的账户数量(仅数量)和一个每次安装随机生成的 ID。它绝不发送邮件内容、主题、其他人的地址、令牌或日志。需要留意的是图片:你收件箱的截图,就是你的收件箱。 - 崩溃报告,仅在你开启后发送。 默认关闭。在设置中开启后,应用崩溃时会发送堆栈跟踪、异常类型、信号和终止原因、崩溃的线程、崩溃时间和 macOS 为该次崩溃分配的 ID、应用的版本号、构建号和提交号,以及 macOS 版本和硬件型号。该报告中没有任何字段能够携带邮件内容。
- 附加 Google Drive 文件。 Google 的文件选择器是一个网页组件,所以选择 Drive 文件时,会在你的浏览器中打开
harkmail.app上的一个页面。我们的服务器看到的与任何网站看到的一样——你的 IP、时间、一个一次性 ID——看不到你的地址、你的文件,也不知道你选了哪个。选择器使用的 Google 凭据在你的浏览器中生成,只能授予对你自己选中的文件的访问权限。
以后还会多一项:如果你在公测结束后订阅,会有一个账单账户。它与你的 Google 账号是彼此独立的身份——可以是你自选的电子邮件地址,也可以通过一个无权访问 Gmail 的客户端使用 Google 登录——它存储的全部内容都列在隐私政策中。
邮件可能接触的第三方
电子邮件不是一个封闭系统;一个对 Google 以外的内容一概不显示的客户端,会让你看到大量显示不全的邮件。以下是邮件可能引发的对外连接,以及控制每一项的设置:
- 邮件中的远程图片。 新闻通讯和收据会从发件人的服务器加载图片。在默认设置“Always display external images”下,Hark 会直接加载这些图片,从而让该服务器得知你的 IP 地址,以及这封邮件已被打开。在“Settings › General”中选择“Ask before displaying external images”,则在你点击之前不会获取任何内容。
- 发件人标志和头像。 个人的头像来自 Google,走的是与你的邮件相同的连接。公司的标志可能来自该品牌自己公开发布的记录(先通过 Google 的 DNS 服务查询发件人的域名,再从品牌的服务器获取标志文件),也可能来自 Google 的网站图标服务。两者都遵循同一项“External images”设置:设为“Ask”,这两种查询都不会发生。
- Gravatar,仅在你开启后使用。 默认关闭。开启后,Hark 会把每个联系人地址的哈希值发送到 gravatar.com 查找头像,这会让该服务知道你在和谁通信。开关旁边的说明也写明了这一点。
如何自行核实
你不必只听本页的一面之词。在 Mac 上用出站防火墙,就能看到一个应用连接的每一个主机。正常使用 Hark 时,你应该会看到:登录期间的 accounts.google.com;邮件、日历、任务和联系人所用的 Google API 主机(googleapis.com 及其子域名);以及联系人头像所用的 Google 图片主机(实际上是 lh3.googleusercontent.com)。检查更新时会看到 updates.harkmail.app;每天一次匿名统计活跃 Mac 时会看到 logs.harkmail.app,除此之外只在你发送报告时(或者如果你开启了崩溃报告,在崩溃之后)才会看到它。把“External images”设为“Ask”后,在你要求显示图片之前,不应该看到任何发件人的服务器。如果你看到了其他任何连接,请告诉我们:support@souplin.com。
Hark 为每项功能只向 Google 申请最小必要的权限——例如,它不申请永久删除邮件的权限,所以应用最多只能把邮件移到“已删除邮件”——并且它对 Google 数据的使用受 Google“有限使用”政策的约束。各项权限及其用途,列在帮助页面上。
常见问题
Hark 会把我的邮件存储在它的服务器上吗?
不会。Hark 没有任何接收、中转或存储邮件、日历、联系人或任务的服务器。应用从你的 Mac 直接与 Google 通信,Google 之外唯一的副本,就是你自己磁盘上的缓存。
Hark 的开发者能读到我的邮件吗?
不能——我们这边根本没有可读的东西。你邮箱里的内容唯一可能到达我们这里的途径,是你自己在错误报告中附上截图。什么都不附,你的邮件就不会有任何内容离开你的 Mac。不过,错误报告确实会带上姓名或电子邮件字段,其中默认填入你登录的地址,除非你将其清空。
本地缓存是加密的吗?
由你的 Mac 加密,而不是由我们。缓存位于你的 Application Support 文件夹中,仅你的用户账户可读,FileVault 会将它与磁盘上的其他所有内容一起进行静态加密。Hark 不会另加一层自己的加密——如果 FileVault 处于关闭状态,打开它就能保护缓存。
退出登录时会发生什么?
三件事:Hark 通知 Google 撤销它对你账户的访问权限,从你的钥匙串中删除令牌,并移除该账户的本地缓存。退出登录不只是忘掉一个密码;Google 那边的授权也会一并撤销。
邮件里的图片会暴露我打开过邮件吗?
有可能,在任何客户端中都是如此。在默认设置下,Hark 会直接从发件人存放图片的地方加载邮件中的远程图片,这会让发件人的服务器看到你的 IP 地址和打开时间。在“Settings › General”中把“External images”设为“Ask before displaying”,在你同意之前,任何图片都不会加载。