Skip to content

zhihui-hu/one-mail

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

36 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OneMail

Electron 39 React 19 TypeScript 5.9 Tailwind CSS 4 shadcn/ui Lucide React SQLite pnpm Prettier

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 邮件阅读预览

OneMail 邮件列表预览

OneMail 账号管理预览


🖥️ 界面概览

OneMail 当前采用三栏桌面布局:

  1. 账号栏:管理邮箱账号,查看未读数,同步单个账号或全部账号。
  2. 邮件列表:展示当前账号或统一收件箱的邮件,顶部提供标签筛选。
  3. 阅读区:展示邮件主题、收发件人、正文、安全预览提示和附件表格。

写信窗口采用贴近 Gmail 的浮层交互:顶部可展开/还原或保存并关闭;收件人行可按需展开抄送、密送;底部提供发送、格式栏开关、附件、链接、保存草稿和丢弃草稿操作。

设置页提供同步策略、SQL 导入导出和关于信息;关于页会显示版本、作者、GitHub 项目入口,并可手动检查 GitHub Release 更新。

首次没有账号时,可以直接添加账号,也可以通过 导入 SQL 恢复已有备份。


🛠️ 本地开发

环境要求

  • Node.js 22 或更高版本
  • pnpm(推荐)或 npm
  • macOS / Windows / Linux 桌面环境

安装依赖

pnpm install
#
npm install

启动开发模式

pnpm dev
#
npm run dev

开发模式会启动 Electron + Vite,渲染层支持热更新。

类型检查

pnpm typecheck
#
npm run typecheck

代码检查

pnpm lint
#
npm run lint

构建生产版本

pnpm build
#
npm run build

打包桌面应用

# 生成未打包目录
pnpm build:unpack

# Windows 安装包
pnpm build:win

# macOS DMG
pnpm build:mac

# Linux AppImage / snap / deb
pnpm build:linux

🎯 使用说明

  1. 添加邮箱账号:点击右上角添加按钮,选择常见邮箱服务商或自定义 IMAP。
  2. 填写凭据:内置邮箱只需填写邮箱、密码/授权码和可选别名;自定义 IMAP 需要填写服务器、端口和安全模式。
  3. 同步邮件:新增账号后会自动同步收件箱,也可以在账号栏手动同步。
  4. 筛选邮件:使用未读、有附件、星标、今日标签快速缩小邮件范围。
  5. 自动标记已读:打开未读邮件后会自动标记已读,并同步到远端邮箱。
  6. 阅读正文:点击邮件后加载正文;HTML 邮件会先以安全预览方式显示。
  7. 加载完整内容:需要查看远程图片时,可在阅读区顶部点击加载完整内容。
  8. 下载附件:在正文底部附件表格中点击附件行或下载按钮,选择保存路径。
  9. 撰写和回复:点击写信、回复、回复全部或转发打开写信窗口;点击抄送/密送可展开更多收件人行,Aa 可切换格式工具栏。
  10. 保存或丢弃草稿:关闭有内容的写信窗口会保存草稿;底部垃圾桶可丢弃已保存草稿。
  11. 备份数据:在设置中导出 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、渲染进程共享类型

📦 技术栈


🤝 贡献

欢迎提交 Issue 和 Pull Request。建议在提交前运行:

pnpm typecheck
pnpm lint

📄 许可证

本项目采用 GNU Affero General Public License v3.0(AGPL-3.0-only)许可。

你可以在遵守 AGPL v3.0 条款的前提下使用、复制、修改和分发本项目;如果通过网络提供修改后的版本,也需要按 AGPL 要求向用户提供相应源代码。

🙏 致谢


注意:OneMail 目前以本地 IMAP 邮件同步和桌面阅读为核心能力。使用 Gmail、Outlook、QQ、网易、Yahoo、iCloud 等服务时,请先在邮箱后台开启 IMAP/SMTP,并按服务商要求使用应用专用密码、授权码或专用密码。

About

OneMail 是一个本地优先的桌面邮件客户端,使用 Electron + React + TypeScript 构建。它通过 IMAP 同步邮件到本地 SQLite,支持多邮箱聚合、邮件筛选、正文安全预览、附件下载和 SQL 备份导入导出。

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages