Metadata-Version: 2.4
Name: Emlex
Version: 1.2.2
Summary: Download billing files from email with configurable providers
Author-email: Your Name <your.email@example.com>
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Requires-Python: >=3.10
Description-Content-Type: text/markdown
Requires-Dist: typer>=0.9.0
Requires-Dist: pydantic>=2.0.0
Requires-Dist: imap_tools>=1.11.1
Requires-Dist: python-dotenv>=1.0.0
Requires-Dist: requests>=2.31.0
Requires-Dist: beautifulsoup4>=4.12.0
Requires-Dist: lxml>=5.0.0
Requires-Dist: textual<9,>=8.2.8
Provides-Extra: dev
Requires-Dist: pytest>=7.0.0; extra == "dev"

# Emlex

Emlex 从任意 IMAP 邮箱中筛选目标邮件，并把附件或邮件中的下载链接保存到本地。

## 安装

项目要求 Python 3.10 及以上版本：

```bash
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -e ".[dev]"
```

安装后使用 `em` 命令，也可以在源码目录运行 `python -m cli.main`。

## 全屏 TUI

启动邮箱与下载任务管理界面：

```bash
em ui
```

`em ui` 会打开真正的全屏终端界面：左侧管理多个下载任务，右侧配置邮箱登录和下载规则，底部显示连接与保存状态。

支持的邮箱与认证方式：

- Gmail、Outlook / Microsoft 365、QQ、163、iCloud、Yahoo；
- 任意自定义 IMAP 服务；
- 密码或应用专用密码；
- OAuth2 Access Token；
- SSL/TLS、STARTTLS，以及仅供受信网络使用的明文 IMAP。

下载规则支持：

- 按主题关键字、发件人和回溯天数筛选邮件；
- 下载任意后缀的附件，如 ZIP、PDF、CSV、XLSX；
- 从 HTML 邮件中按链接文字查找并下载任意文件类型；
- 自定义保存目录、文件后缀和 HTTP 超时；
- 创建任意任务标识，不再局限于支付宝和微信。

常用按键：

| 按键 | 操作 |
| --- | --- |
| `Ctrl+N` | 新建任务 |
| `Ctrl+S` | 保存任务 |
| `Ctrl+T` | 测试邮箱连接 |
| `Ctrl+D` | 删除任务（需按两次确认） |
| `Ctrl+Q` | 退出 |

旧的提示式命令 `em config email add` 仍保留用于脚本兼容。

如果不希望把密码直接写入 JSON，可保存环境变量引用：

```bash
em config email add \
  --provider alipay \
  --email-type gmail \
  --username you@example.com \
  --password-env EMLEX_EMAIL_PASSWORD
```

然后在 `~/.flow/.env` 中设置密码：

```dotenv
EMLEX_EMAIL_PASSWORD=your-app-password
```

自定义 IMAP 示例：

```bash
em config email add \
  --provider wechat \
  --email-type imap \
  --username you@example.com \
  --host imap.example.com \
  --port 993
```

默认配置文件为 `~/.flow/config.json`。如果该文件不存在，Emlex 会自动识别旧版项目内的 `config/config.json`；每次覆盖保存前还会在同目录生成 `config.json.bak`。开发和测试时可通过 `--config` 指定其他路径。

## 下载账单

```bash
em download --provider alipay
em download --provider wechat
em download --provider bank_pdf
```

使用其他配置文件：

```bash
em download --provider alipay --config /path/to/config.json
```

TUI 保存后会自动生成完整任务配置。你也可以直接编辑 `profile`：

```json
{
  "alipay": {
    "email": "gmail",
    "auth_type": "pass",
    "auth": {
      "username": "you@example.com",
      "password": "${EMLEX_EMAIL_PASSWORD}"
    },
    "download": "attachment",
    "profile": {
      "name": "alipay",
      "search_subject": "支付宝",
      "sender_email": "service@example.com",
      "file_suffix": "zip",
      "encoding": "gbk"
    }
  }
}
```

`download` 可设为 `attachment`（兼容旧拼写 `attchment`）或 `link`。下载文件默认保存在 `~/.flow/data/<provider>/`。

## 测试

```bash
python -m pytest
```
