274 lines
5.8 KiB
Markdown
274 lines
5.8 KiB
Markdown
|
|
# TaskPing 邮件回复功能使用指南
|
|||
|
|
|
|||
|
|
## 概述
|
|||
|
|
|
|||
|
|
TaskPing 的邮件回复功能允许您通过回复邮件的方式向 Claude Code CLI 发送命令。当您在移动设备或其他电脑上收到 TaskPing 的任务提醒邮件时,可以直接回复邮件来控制 Claude Code 继续执行任务。
|
|||
|
|
|
|||
|
|
## 工作原理
|
|||
|
|
|
|||
|
|
1. **发送提醒**: Claude Code 在任务暂停时发送包含会话 Token 的提醒邮件
|
|||
|
|
2. **邮件监听**: PTY Relay 服务持续监听您的收件箱
|
|||
|
|
3. **命令提取**: 从回复邮件中提取命令内容
|
|||
|
|
4. **命令注入**: 通过 node-pty 将命令注入到对应的 Claude Code 会话
|
|||
|
|
|
|||
|
|
## 快速开始
|
|||
|
|
|
|||
|
|
### 1. 配置邮件账号
|
|||
|
|
|
|||
|
|
复制环境配置文件:
|
|||
|
|
```bash
|
|||
|
|
cp .env.example .env
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
编辑 `.env` 文件,填入您的邮件配置:
|
|||
|
|
```env
|
|||
|
|
# Gmail 示例
|
|||
|
|
IMAP_HOST=imap.gmail.com
|
|||
|
|
IMAP_PORT=993
|
|||
|
|
IMAP_SECURE=true
|
|||
|
|
IMAP_USER=your-email@gmail.com
|
|||
|
|
IMAP_PASS=your-app-password # 使用应用专用密码
|
|||
|
|
|
|||
|
|
# 安全设置
|
|||
|
|
ALLOWED_SENDERS=your-email@gmail.com,trusted@company.com
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 启动 PTY Relay 服务
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
npm run relay:pty
|
|||
|
|
# 或者
|
|||
|
|
./start-relay-pty.js
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 测试邮件解析
|
|||
|
|
|
|||
|
|
运行测试工具验证配置:
|
|||
|
|
```bash
|
|||
|
|
npm run relay:test
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 使用方法
|
|||
|
|
|
|||
|
|
### 邮件格式要求
|
|||
|
|
|
|||
|
|
#### 主题格式
|
|||
|
|
邮件主题必须包含 TaskPing Token,支持以下格式:
|
|||
|
|
- `[TaskPing #TOKEN]` - 推荐格式
|
|||
|
|
- `[TaskPing TOKEN]`
|
|||
|
|
- `TaskPing: TOKEN`
|
|||
|
|
|
|||
|
|
例如:
|
|||
|
|
- `Re: [TaskPing #ABC123] 任务等待您的指示`
|
|||
|
|
- `回复: TaskPing: XYZ789`
|
|||
|
|
|
|||
|
|
#### 命令格式
|
|||
|
|
支持三种命令输入方式:
|
|||
|
|
|
|||
|
|
1. **直接输入**(最简单)
|
|||
|
|
```
|
|||
|
|
继续执行
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **CMD 前缀**(明确标识)
|
|||
|
|
```
|
|||
|
|
CMD: npm run build
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **代码块**(复杂命令)
|
|||
|
|
````
|
|||
|
|
```
|
|||
|
|
git add .
|
|||
|
|
git commit -m "Update features"
|
|||
|
|
git push
|
|||
|
|
```
|
|||
|
|
````
|
|||
|
|
|
|||
|
|
### 示例场景
|
|||
|
|
|
|||
|
|
#### 场景 1: 简单确认
|
|||
|
|
收到邮件:
|
|||
|
|
```
|
|||
|
|
主题: [TaskPing #TASK001] 是否继续部署到生产环境?
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
回复:
|
|||
|
|
```
|
|||
|
|
yes
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 场景 2: 执行具体命令
|
|||
|
|
收到邮件:
|
|||
|
|
```
|
|||
|
|
主题: [TaskPing #BUILD123] 构建失败,请输入修复命令
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
回复:
|
|||
|
|
```
|
|||
|
|
CMD: npm install missing-package
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 场景 3: 多行命令
|
|||
|
|
收到邮件:
|
|||
|
|
```
|
|||
|
|
主题: [TaskPing #DEPLOY456] 准备部署,请确认步骤
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
回复:
|
|||
|
|
````
|
|||
|
|
执行以下命令:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
npm run test
|
|||
|
|
npm run build
|
|||
|
|
npm run deploy
|
|||
|
|
```
|
|||
|
|
````
|
|||
|
|
|
|||
|
|
## 高级配置
|
|||
|
|
|
|||
|
|
### 会话管理
|
|||
|
|
|
|||
|
|
会话映射文件 `session-map.json` 结构:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"TOKEN123": {
|
|||
|
|
"type": "pty",
|
|||
|
|
"createdAt": 1234567890,
|
|||
|
|
"expiresAt": 1234654290,
|
|||
|
|
"cwd": "/path/to/project",
|
|||
|
|
"description": "构建项目 X"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 环境变量说明
|
|||
|
|
|
|||
|
|
| 变量名 | 说明 | 默认值 |
|
|||
|
|
|--------|------|--------|
|
|||
|
|
| `IMAP_HOST` | IMAP 服务器地址 | 必需 |
|
|||
|
|
| `IMAP_PORT` | IMAP 端口 | 993 |
|
|||
|
|
| `IMAP_SECURE` | 使用 SSL/TLS | true |
|
|||
|
|
| `IMAP_USER` | 邮箱账号 | 必需 |
|
|||
|
|
| `IMAP_PASS` | 邮箱密码 | 必需 |
|
|||
|
|
| `ALLOWED_SENDERS` | 允许的发件人列表 | 空(接受所有) |
|
|||
|
|
| `SESSION_MAP_PATH` | 会话映射文件路径 | ./src/data/session-map.json |
|
|||
|
|
| `CLAUDE_CLI_PATH` | Claude CLI 路径 | claude |
|
|||
|
|
| `LOG_LEVEL` | 日志级别 | info |
|
|||
|
|
| `PTY_OUTPUT_LOG` | 记录 PTY 输出 | false |
|
|||
|
|
|
|||
|
|
### 邮件服务器配置示例
|
|||
|
|
|
|||
|
|
#### Gmail
|
|||
|
|
1. 启用 IMAP: 设置 → 转发和 POP/IMAP → 启用 IMAP
|
|||
|
|
2. 生成应用专用密码: 账号设置 → 安全 → 应用专用密码
|
|||
|
|
|
|||
|
|
```env
|
|||
|
|
IMAP_HOST=imap.gmail.com
|
|||
|
|
IMAP_PORT=993
|
|||
|
|
IMAP_SECURE=true
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### Outlook/Office 365
|
|||
|
|
```env
|
|||
|
|
IMAP_HOST=outlook.office365.com
|
|||
|
|
IMAP_PORT=993
|
|||
|
|
IMAP_SECURE=true
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### QQ 邮箱
|
|||
|
|
```env
|
|||
|
|
IMAP_HOST=imap.qq.com
|
|||
|
|
IMAP_PORT=993
|
|||
|
|
IMAP_SECURE=true
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 安全注意事项
|
|||
|
|
|
|||
|
|
1. **发件人验证**: 始终配置 `ALLOWED_SENDERS` 以限制谁可以发送命令
|
|||
|
|
2. **命令过滤**: 系统会自动过滤危险命令(如 `rm -rf`)
|
|||
|
|
3. **会话过期**: 会话有过期时间,过期后无法接受命令
|
|||
|
|
4. **邮件加密**: 使用 SSL/TLS 加密的 IMAP 连接
|
|||
|
|
5. **密码安全**: 使用应用专用密码而非主密码
|
|||
|
|
|
|||
|
|
## 故障排查
|
|||
|
|
|
|||
|
|
### 常见问题
|
|||
|
|
|
|||
|
|
1. **无法连接到邮件服务器**
|
|||
|
|
- 检查 IMAP 是否已启用
|
|||
|
|
- 验证服务器地址和端口
|
|||
|
|
- 确认防火墙设置
|
|||
|
|
|
|||
|
|
2. **邮件未被处理**
|
|||
|
|
- 检查发件人是否在白名单中
|
|||
|
|
- 验证邮件主题格式
|
|||
|
|
- 查看日志中的错误信息
|
|||
|
|
|
|||
|
|
3. **命令未执行**
|
|||
|
|
- 确认 Claude Code 进程正在运行
|
|||
|
|
- 检查会话是否已过期
|
|||
|
|
- 验证命令格式是否正确
|
|||
|
|
|
|||
|
|
### 查看日志
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 启动时查看详细日志
|
|||
|
|
LOG_LEVEL=debug npm run relay:pty
|
|||
|
|
|
|||
|
|
# 查看 PTY 输出
|
|||
|
|
PTY_OUTPUT_LOG=true npm run relay:pty
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 测试命令
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 测试邮件解析
|
|||
|
|
npm run relay:test
|
|||
|
|
|
|||
|
|
# 手动启动(调试模式)
|
|||
|
|
INJECTION_MODE=pty LOG_LEVEL=debug node src/relay/relay-pty.js
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 最佳实践
|
|||
|
|
|
|||
|
|
1. **使用专用邮箱**: 为 TaskPing 创建专用邮箱账号
|
|||
|
|
2. **定期清理**: 定期清理过期会话和已处理邮件
|
|||
|
|
3. **命令简洁**: 保持命令简短明确
|
|||
|
|
4. **及时回复**: 在会话过期前回复邮件
|
|||
|
|
5. **安全优先**: 不要在邮件中包含敏感信息
|
|||
|
|
|
|||
|
|
## 集成到现有项目
|
|||
|
|
|
|||
|
|
如果您想将邮件回复功能集成到现有的 Claude Code 工作流:
|
|||
|
|
|
|||
|
|
1. 在发送提醒时创建会话:
|
|||
|
|
```javascript
|
|||
|
|
const token = generateToken();
|
|||
|
|
const session = {
|
|||
|
|
type: 'pty',
|
|||
|
|
createdAt: Math.floor(Date.now() / 1000),
|
|||
|
|
expiresAt: Math.floor((Date.now() + 3600000) / 1000),
|
|||
|
|
cwd: process.cwd()
|
|||
|
|
};
|
|||
|
|
saveSession(token, session);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. 在邮件主题中包含 Token:
|
|||
|
|
```javascript
|
|||
|
|
const subject = `[TaskPing #${token}] ${taskDescription}`;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. 启动 PTY Relay 服务监听回复
|
|||
|
|
|
|||
|
|
## 相关文档
|
|||
|
|
|
|||
|
|
- [邮件配置指南](./EMAIL_GUIDE.md)
|
|||
|
|
- [快速邮件设置](./QUICK_EMAIL_SETUP.md)
|
|||
|
|
- [系统架构说明](./EMAIL_ARCHITECTURE.md)
|
|||
|
|
|
|||
|
|
## 支持
|
|||
|
|
|
|||
|
|
如有问题,请查看:
|
|||
|
|
- 项目 Issue: https://github.com/JessyTsui/TaskPing/issues
|
|||
|
|
- 详细日志: `LOG_LEVEL=debug npm run relay:pty`
|