OneMail 是一个本地优先的桌面邮件客户端,使用 Electron + React + TypeScript 构建。它通过 IMAP 同步邮件到本地 SQLite,支持多邮箱聚合、邮件筛选、正文安全预览、附件下载和 SQL 备份导入导出。
语言:中文 | English
项目主页 / 下载页:https://zhihui-hu.github.io/one-mail/
- 📬 多邮箱账号:支持 Gmail、Yahoo、阿里邮箱、阿里企业邮箱、189、搜狐、QQ/Foxmail、网易、Outlook/Hotmail、新浪、139、21CN、完美邮箱、iCloud、AOL、Yandex、Mail.ru 和自定义 IMAP。
- 🧩 统一收件箱体验:多账号聚合查看,账号列表展示未读数、同步状态和账号操作。
- 🔎 邮件快速筛选:支持未读、有附件、星标、今日等组合筛选。
- ✅ 已读状态同步:打开未读邮件后自动标记已读,并通过 IMAP 同步到远端邮箱。
- 📨 正文按需加载:点击邮件后再拉取正文,减少启动和同步成本。
- 🛡️ HTML 安全预览:净化邮件 HTML,默认阻止远程图片和外部资源。
- 📎 附件表格与下载:正文区域以表格展示附件元数据,点击即可选择路径下载。
- ✍️ Gmail 风格写信窗口:支持新邮件、回复、回复全部、转发、抄送/密送按需展开、富文本格式、附件和草稿保存。
- 🔐 本地凭据加密:邮箱密码或授权码使用 AES-256-GCM 加密后保存到本地数据库。
- 💾 SQLite 本地缓存:账号、邮件头、正文、附件元数据、搜索索引和设置均保存在本机。
- ♻️ 安全备份导入导出:支持导出当前数据库为 SQL 文件,也可在首次启动时直接导入 SQL 备份。
- ⚙️ 可配置同步策略:可设置同步间隔、缓存窗口和外部图片策略。
OneMail 当前采用三栏桌面布局:
- 账号栏:管理邮箱账号,查看未读数,同步单个账号或全部账号。
- 邮件列表:展示当前账号或统一收件箱的邮件,顶部提供标签筛选。
- 阅读区:展示邮件主题、收发件人、正文、安全预览提示和附件表格。
写信窗口采用贴近 Gmail 的浮层交互:顶部可展开/还原或保存并关闭;收件人行可按需展开抄送、密送;底部提供发送、格式栏开关、附件、链接、保存草稿和丢弃草稿操作。
设置页提供同步策略、SQL 导入导出和关于信息;关于页会显示版本、作者、GitHub 项目入口,并可手动检查 GitHub Release 更新。
首次没有账号时,可以直接添加账号,也可以通过 导入 SQL 恢复已有备份。
- Node.js 22 或更高版本
- pnpm(推荐)或 npm
- macOS / Windows / Linux 桌面环境
pnpm install
# 或
npm installpnpm dev
# 或
npm run dev开发模式会启动 Electron + Vite,渲染层支持热更新。
pnpm typecheck
# 或
npm run typecheckpnpm lint
# 或
npm run lintpnpm build
# 或
npm run build# 生成未打包目录
pnpm build:unpack
# Windows 安装包
pnpm build:win
# macOS DMG
pnpm build:mac
# Linux AppImage / snap / deb
pnpm build:linux- 添加邮箱账号:点击右上角添加按钮,选择常见邮箱服务商或自定义 IMAP。
- 填写凭据:内置邮箱只需填写邮箱、密码/授权码和可选别名;自定义 IMAP 需要填写服务器、端口和安全模式。
- 同步邮件:新增账号后会自动同步收件箱,也可以在账号栏手动同步。
- 筛选邮件:使用未读、有附件、星标、今日标签快速缩小邮件范围。
- 自动标记已读:打开未读邮件后会自动标记已读,并同步到远端邮箱。
- 阅读正文:点击邮件后加载正文;HTML 邮件会先以安全预览方式显示。
- 加载完整内容:需要查看远程图片时,可在阅读区顶部点击加载完整内容。
- 下载附件:在正文底部附件表格中点击附件行或下载按钮,选择保存路径。
- 撰写和回复:点击写信、回复、回复全部或转发打开写信窗口;点击抄送/密送可展开更多收件人行,
Aa可切换格式工具栏。 - 保存或丢弃草稿:关闭有内容的写信窗口会保存草稿;底部垃圾桶可丢弃已保存草稿。
- 备份数据:在设置中导出 SQL 备份;无账号空状态也可以直接导入 SQL 备份。
- OneMail 的数据库文件位于 Electron
userData/OneMail/onemail.sqlite。 - 邮箱密码或授权码不会明文写入数据库,会使用本地数据库密钥派生的 AES-256-GCM 密钥加密。
- SQL 备份文件会校验文件名中的密钥、Linux 时间戳和 SQL 头部信息。
- HTML 邮件会经过基础净化,默认阻止远程图片和外部资源,降低隐私泄露风险。
- 附件默认只保存元数据,只有用户点击下载时才写入本地文件。
src/
├── main/ # Electron 主进程、IPC、SQLite、IMAP 同步
│ ├── db/ # 数据库连接、schema、repositories
│ ├── ipc/ # accounts/messages/sync/settings/system IPC
│ ├── mail/ # IMAP 同步、正文解析、附件下载
│ └── services/ # 凭据加密、SQL 备份等服务
├── preload/ # contextBridge 暴露给渲染进程的安全 API
├── renderer/src/ # React UI
│ ├── components/ # 邮件、账号、设置和 shadcn/ui 组件
│ ├── lib/ # 渲染层 API 适配和工具函数
│ └── assets/ # 图标和样式资源
└── shared/ # 主进程、preload、渲染进程共享类型
- Electron - 跨平台桌面应用框架
- electron-vite - Electron + Vite 开发构建工具
- React - 渲染层 UI
- TypeScript - 类型系统
- Tailwind CSS - 原子化样式
- shadcn/ui - UI 组件
- Lucide React - 图标库
- SQLite - 本地数据存储
欢迎提交 Issue 和 Pull Request。建议在提交前运行:
pnpm typecheck
pnpm lint本项目采用 GNU Affero General Public License v3.0(AGPL-3.0-only)许可。
你可以在遵守 AGPL v3.0 条款的前提下使用、复制、修改和分发本项目;如果通过网络提供修改后的版本,也需要按 AGPL 要求向用户提供相应源代码。
- Electron - 桌面应用运行时
- electron-vite - 开发构建工具
- shadcn/ui - UI 组件库
- Lucide - 图标库
- SQLite - 本地数据库
注意:OneMail 目前以本地 IMAP 邮件同步和桌面阅读为核心能力。使用 Gmail、Outlook、QQ、网易、Yahoo、iCloud 等服务时,请先在邮箱后台开启 IMAP/SMTP,并按服务商要求使用应用专用密码、授权码或专用密码。


