118 lines
4.1 KiB
Markdown
118 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)聚合
|
|||
|
|
- 转发时携带附件
|