- 登录: QQ/163/126/189/搜狐/Gmail/Outlook/Yahoo/iCloud/企业邮/自定义, 自动识别+测试连接 - 收信: IMAP 多文件夹同步/未读/星标/搜索(本地+服务器) - 读信: HTML渲染/CID内嵌图/原文查看/附件下载 - 写信: 收件人/抄送/密送/附件/富文本/草稿/回复转发 - 存储: SQLite + 系统安全存储(DPAPI/Keychain/Keystore) - 测试: 单元测试 + Mock IMAP/SMTP 服务器集成测试(23项全过) - 可迁移: Windows/Android/iOS/macOS/Linux 一套代码
119 lines
4.1 KiB
Markdown
119 lines
4.1 KiB
Markdown
# MailHub 邮箱客户端 📧
|
||
|
||
跨平台邮箱客户端:**Windows / macOS / Linux / Android / iOS** 一套代码。
|
||
|
||
协议层(IMAP / SMTP / MIME)全部**纯 Dart 自研**,零平台依赖 —— 从 Windows 迁移到安卓/iOS/Mac 无需改动协议与业务代码,只需各平台构建即可。
|
||
|
||
## ✨ 功能
|
||
|
||
| 模块 | 功能 |
|
||
|------|------|
|
||
| 邮箱登录 | QQ邮箱、网易163/126、天翼189、搜狐、Gmail、Outlook/Hotmail、Yahoo、iCloud、腾讯企业邮、阿里企业邮、网易企业邮、自定义服务器;邮箱自动识别服务商;测试连接 |
|
||
| 收信 | IMAP (TLS 993 / STARTTLS 143)、多文件夹、增量同步、未读数、星标、已读/未读 |
|
||
| 读信 | HTML 富文本渲染、内嵌图片(CID)、纯文本视图、邮件原文查看、附件下载/打开 |
|
||
| 写信 | 收件人/抄送/密送、附件、富文本/纯文本切换、自动签名位、草稿保存 |
|
||
| 邮件操作 | 回复/回复全部/转发(带引用)、删除(进废纸篓)、移动文件夹、标记已读 |
|
||
| 搜索 | 本地缓存搜索 + IMAP 服务器搜索 |
|
||
| 编码支持 | UTF-8 / GBK / GB2312 / BIG5(降级) / Shift-JIS(降级) / 引号可打印 / Base64 |
|
||
| 账户管理 | 多账户、密码存系统安全存储(Windows DPAPI / Keychain / Keystore) |
|
||
| 外观 | 深色/浅色模式、账户主题色 |
|
||
|
||
## 🏗 架构
|
||
|
||
```
|
||
lib/
|
||
├── core/ # 纯 Dart 核心(与 UI/平台无关,可独立测试)
|
||
│ ├── models/ # 数据模型
|
||
│ ├── protocol/
|
||
│ │ ├── imap/ # IMAP 客户端(自研)
|
||
│ │ ├── smtp/ # SMTP 客户端(自研)
|
||
│ │ ├── mime/ # MIME 解析/构造(自研)
|
||
│ │ └── providers.dart # 邮箱服务商预设
|
||
│ ├── storage/ # SQLite + 安全存储
|
||
│ └── service/ # 业务编排(收发/同步/搜索)
|
||
├── ui/ # Flutter 界面
|
||
│ ├── pages/ # 登录/主页/详情/写信/设置
|
||
│ ├── widgets/
|
||
│ └── app_state.dart # 全局状态
|
||
└── main.dart
|
||
```
|
||
|
||
**迁移友好设计:**
|
||
- `core/protocol` 只依赖 `dart:io` / `dart:convert` —— 任何平台可用
|
||
- 存储层自动分流:桌面端 `sqflite_common_ffi`,移动端原生 `sqflite`
|
||
- UI 响应式:桌面三栏布局,窄屏自动切换单栏 + 全屏详情
|
||
- 密码安全存储按平台自动适配
|
||
|
||
## 🚀 构建
|
||
|
||
### 环境准备
|
||
|
||
1. 安装 [Flutter SDK](https://docs.flutter.dev/get-started/install)(≥3.24)
|
||
2. Windows 构建需 [Visual Studio 2022](https://visualstudio.microsoft.com/)(勾选"使用 C++ 的桌面开发")
|
||
3. 命令行执行:
|
||
|
||
```bash
|
||
flutter pub get
|
||
```
|
||
|
||
### Windows(打包 exe)
|
||
|
||
```bash
|
||
flutter build windows --release
|
||
# 产物: build/windows/x64/runner/Release/MailHub.exe
|
||
```
|
||
|
||
一键打包脚本(需已构建):
|
||
|
||
```bash
|
||
# PowerShell
|
||
.\scripts\package_windows.ps1
|
||
```
|
||
|
||
### Linux
|
||
|
||
```bash
|
||
flutter build linux --release
|
||
# 产物: build/linux/x64/release/bundle/
|
||
```
|
||
|
||
### Android
|
||
|
||
```bash
|
||
flutter build apk --release
|
||
```
|
||
|
||
### iOS / macOS(需 macOS 机器 + Xcode)
|
||
|
||
```bash
|
||
flutter build ipa --release # iOS
|
||
flutter build macos --release # macOS
|
||
```
|
||
|
||
## 🧪 测试
|
||
|
||
```bash
|
||
flutter test
|
||
```
|
||
|
||
覆盖:MIME 解析(RFC2047/GBK/附件/CID/RFC2231)、IMAP 响应解析(FETCH 字面量/SEARCH/LIST/STATUS)、MIME 构造往返。
|
||
|
||
## 🔑 各邮箱登录说明
|
||
|
||
- **QQ/163/126**:需在网页端开启 IMAP/SMTP 服务,使用**授权码**(非登录密码)
|
||
- **Gmail**:开启两步验证后生成"应用专用密码"
|
||
- **Outlook**:直接使用账户密码;开启双重验证后用应用密码
|
||
- **iCloud**:Apple ID 设置中生成"App 专用密码"
|
||
- **企业邮箱**:多数支持客户端专用密码
|
||
|
||
## 📝 版本
|
||
|
||
- v1.0.0 首版:全功能邮箱客户端(Windows 优先,全平台可构建)
|
||
|
||
## 已知限制(后续版本规划)
|
||
|
||
- OAuth2(Gmail/Outlook 免密登录)预留扩展点
|
||
- IDLE 实时推送(当前为手动/定时刷新,接口已预留)
|
||
- 会话(thread)聚合
|
||
- 转发时携带附件
|