完全开源、本地 SQLite 管理一切:我写了一个桌面邮件客户端 OneMail

访问地址

海外访问点这里

国内访问点这里

特点

  • 完全开源!!!,可以自己看源码、改源码、自己打包。
  • 本地优先!!!,不需要把邮件先交给第三方云服务。
  • 用 SQLite轻量管理!!!!账号、邮件头、正文、附件元数据、搜索索引和设置。
  • 支持 SQL 导入导出!!!,换机器、备份、恢复都走同一套迁移逻辑。
  • 默认拦截 HTML 邮件里的远程图片和外部资源,先安全预览,需要时再加载完整内容。

它不准备做成大而全的办公套件。

OneMail 主要解决一个问题:多个邮箱分散在不同服务商里,网页端来回切很烦;传统客户端又经常把同步、缓存、远程图片和附件处理做成黑盒。我要的是开源、本地优先、多邮箱聚合、IMAP 同步、SQLite 管理。

多邮箱收进一个桌面窗口

现在很多人的邮箱不是一个。

工作可能在 Outlook,个人可能在 Gmail,国内服务还会挂 QQ 邮箱、163 邮箱,项目里再来几个自定义域名 IMAP。每个邮箱都有自己的网页入口、授权方式、未读状态和附件入口。

OneMail 目前内置支持 Gmail、Outlook、163 邮箱、QQ 邮箱和自定义 IMAP。添加账号之后,左侧是账号列表、未读数和同步状态,中间是邮件列表,右侧是阅读区。

统一收件箱也在里面。邮件先拉到同一个桌面视图,再按账号、未读、有附件、星标、今日这些条件过滤。

项目通知、账单、验证码、服务商告警混在一起的时候,先聚合,再筛选,比开一排浏览器标签页舒服得多。

SQLite 管理一切

OneMail 用 Electron + React + TypeScript 写界面和桌面壳,邮件通过 IMAP 同步到本地 SQLite。

账号、邮件头、正文、附件元数据、搜索索引和设置都落在本机数据库里。数据库文件在 Electron 的 userData/OneMail/onemail.sqlite 下面。

这跟很多"云端邮箱管理工具"的思路不一样。OneMail 不需要先把你的邮件搬到另一个第三方服务里再展示。它只是一个本地工作台:连接邮箱服务商,同步需要的数据,后续阅读和筛选尽量在本机完成。

本地优先不等于邮箱服务商不保存邮件,也不等于 IMAP 授权没有风险。它解决的是另一层问题:不要再额外引入一个中间云服务来接管邮件数据。

密码和授权码也不会明文塞进数据库。OneMail 会用本地数据库密钥派生 AES-256-GCM 密钥,加密后再保存凭据。附件默认只保存元数据,只有点击下载时才写入本地文件。

HTML 邮件默认安全预览

很多 HTML 邮件会塞远程图片,甚至是 1x1 的追踪像素。客户端只要自动加载图片,就会向对方服务器发一次 HTTP 请求。对方可以记录打开时间、IP、User-Agent,甚至把请求参数绑定到具体收件人。

所以 OneMail 的阅读区默认走安全预览。

HTML 邮件会先做基础净化,远程图片和外部资源默认拦截。需要看完整内容时,再手动点击加载完整内容。

营销邮件、通知邮件、活动邮件经常会用远程资源统计打开行为。很多时候用户只是想看正文,没必要在打开邮件的一瞬间就把访问请求打出去。

先看安全版本,需要图片再加载。

写信窗口

OneMail 现在已经有写信、回复、回复全部、转发、抄送、密送、富文本格式、附件和草稿保存。

写信窗口贴近 Gmail:浮层窗口,顶部可以展开或还原,收件人行可以按需展开抄送和密送,底部有发送、格式栏、附件、链接、保存草稿和丢弃草稿。

邮件写作大多数时候就几件事:选对发件账号,填收件人,补正文,必要时挂附件,然后发出去。窗口别挡路,草稿别丢,就够了。

SQL 导入导出

很多桌面工具用着还行,迁移的时候很痛苦。

OneMail 直接支持 SQL 备份导入导出。设置里可以把当前数据库导出成 SQL 文件。首次启动没有账号时,也可以直接导入已有备份。

备份文件会校验文件名里的密钥、Linux 时间戳和 SQL 头部信息,避免随便拿一个不明 SQL 就往库里灌。

不用额外维护同步服务,也不需要为了迁移上云账号。数据库就是一个本地 SQLite,导出、保存、换机器导入,路径清楚,边界也清楚。

现在能做什么

这一版 OneMail 已经能覆盖我自己日常使用里的核心链路:

  • 添加 Gmail、Outlook、QQ、163 和自定义 IMAP 邮箱。
  • 多账号聚合查看,账号栏展示未读数和同步状态。
  • 支持未读、有附件、星标、今日等快速筛选。
  • 点击未读邮件后自动标记已读,并同步到远端邮箱。
  • 邮件正文按需加载,减少启动和同步成本。
  • HTML 邮件安全预览,默认阻止远程图片和外部资源。
  • 附件以表格展示元数据,点击后选择路径下载。
  • 支持写信、回复、回复全部、转发、抄送、密送、附件和草稿。
  • 邮箱凭据使用 AES-256-GCM 加密后保存到本地数据库。
  • 支持 SQL 备份导出和首次启动导入。
  • 支持同步间隔、缓存窗口和外部图片策略配置。

如果你要的是团队协作、日历、会议、企业通讯录,那 OneMail 现在不是这个方向。

它更适合这种场景:你有多个邮箱,想在桌面上统一收一下;你在意远程图片和邮件隐私;你希望邮件缓存和备份都在自己机器上;你不想为了一个邮箱客户端再引入一个云端中转服务。

怎么添加邮箱

OneMail 走的是 IMAP / SMTP 这套传统邮件协议。

添加 Gmail、Outlook、QQ、163 这类邮箱时,通常需要先在服务商后台打开 IMAP,再按服务商要求生成应用密码或授权码。不要把所有邮箱都理解成"直接填登录密码就行",现在很多邮箱已经不允许第三方客户端这么登录。

如果你不确定怎么填,可以先看这篇:常见个人邮箱添加指南:Gmail、QQ、网易、Outlook 等邮箱怎么配置

填好账号后,OneMail 会测试连接,保存成功后开始同步收件箱。后面可以在账号栏手动同步单个账号,也可以同步全部账号。

项目地址

项目地址:zhihui-hu/one-mail

技术栈是 Electron 39、React 19、TypeScript 5.9、Tailwind CSS 4、shadcn/ui 和 SQLite。开发模式跑 Electron + Vite,桌面打包走 electron-builder,Windows、macOS、Linux 都留了构建脚本。

如果你刚好也在多个邮箱之间来回切,或者想要一个更偏本地优先的桌面邮件客户端,可以试一下 OneMail。

这个项目后面我会继续按自己的使用场景补。能保持本地、清楚、可迁移的部分,我尽量不加重。

相关推荐
IT策士1 小时前
Django 从 0 到 1 打造完整电商平台:Django 模型进阶与数据迁移
python·django·sqlite
沪漂阿龙1 小时前
Java JVM 面试题详解:JVM运行原理、内存模型、堆栈方法区、GC垃圾回收、JIT编译、类加载机制与线上调优全攻略
java·开发语言·jvm
小碗羊肉1 小时前
Maven高级
java·开发语言·maven
星秀日1 小时前
Spring Boot + Sa-Token 实时聊天系统:用户注册流程源码深度剖析
java·人工智能·spring·状态模式
YOU OU2 小时前
SpringBoot 配置文件
java·spring boot·后端
c++之路2 小时前
观察者模式(Observer Pattern)
java·网络·观察者模式
Dicky-_-zhang2 小时前
云原生存储与数据库选型实战:从传统数据库到云原生数据库的演进
java·jvm
凝小飞2 小时前
cucumber JAVA 一键部署指南
java·集成测试·模块测试
java修仙传2 小时前
Java 实习日记:断面状态筛选 Bug 修复与对比案例日期过滤优化
java·bug·实习