154 lines
2.9 KiB
Markdown
154 lines
2.9 KiB
Markdown
|
|
# 邮件发送功能指南
|
|||
|
|
|
|||
|
|
## 当前发送链路
|
|||
|
|
|
|||
|
|
项目中与邮件相关的入口有两个:
|
|||
|
|
|
|||
|
|
1. `auto_report_and_email.py`
|
|||
|
|
2. `email_web_app.py`
|
|||
|
|
|
|||
|
|
两者都依赖:
|
|||
|
|
|
|||
|
|
- `EMAIL_SENDER`
|
|||
|
|
- `EMAIL_PASSWORD`
|
|||
|
|
- `email_sender.py`
|
|||
|
|
|
|||
|
|
当前默认 SMTP 发送为 QQ 邮箱。
|
|||
|
|
|
|||
|
|
## 环境变量
|
|||
|
|
|
|||
|
|
```env
|
|||
|
|
EMAIL_SENDER=你的QQ邮箱@qq.com
|
|||
|
|
EMAIL_PASSWORD=你的QQ邮箱SMTP授权码
|
|||
|
|
EMAIL_RECIPIENTS=收件人1@qq.com,收件人2@qq.com
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
说明:
|
|||
|
|
|
|||
|
|
- `EMAIL_PASSWORD` 必须是 SMTP 授权码,不是 QQ 登录密码
|
|||
|
|
- `EMAIL_RECIPIENTS` 只对 `auto_report_and_email.py` 默认收件人有意义
|
|||
|
|
- Web 界面使用 `data/managed_recipients.json` 管理收件人
|
|||
|
|
|
|||
|
|
## 方式一:脚本发送
|
|||
|
|
|
|||
|
|
### 完整流程后发送
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
python auto_report_and_email.py --mode full --sources all
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 基于现有向量库生成报告并发送
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
python auto_report_and_email.py --mode report
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 只发送当前 `data/` 中最新报告
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
python auto_report_and_email.py --mode send
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 方式二:Web 界面发送
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
python email_web_app.py
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
默认访问:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
http://127.0.0.1:7860
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 当前页面功能
|
|||
|
|
|
|||
|
|
#### 发送对象管理
|
|||
|
|
|
|||
|
|
- 新增邮箱
|
|||
|
|
- 删除邮箱
|
|||
|
|
- 持久化到 `data/managed_recipients.json`
|
|||
|
|
|
|||
|
|
#### 单次发送
|
|||
|
|
|
|||
|
|
当前“单次发送”按钮执行的不是“发送已有报告文件”,而是:
|
|||
|
|
|
|||
|
|
1. 调用 `main.py --mode full --sources all`
|
|||
|
|
2. 全站抓取一次
|
|||
|
|
3. 更新本地向量库
|
|||
|
|
4. 生成最新报告
|
|||
|
|
5. 将最新报告发送给勾选的收件人
|
|||
|
|
|
|||
|
|
#### 每周定时发送配置
|
|||
|
|
|
|||
|
|
页面支持保存:
|
|||
|
|
|
|||
|
|
- 是否开启
|
|||
|
|
- 星期几
|
|||
|
|
- 发送时间
|
|||
|
|
- 使用全部已管理收件人
|
|||
|
|
|
|||
|
|
配置文件位置:
|
|||
|
|
|
|||
|
|
- `data/scheduled_send_config.json`
|
|||
|
|
|
|||
|
|
### 关于定时发送的当前限制
|
|||
|
|
|
|||
|
|
`email_web_app.py` 中保留了后台调度线程实现,但脚本直接运行时当前没有自动调用 `start_scheduler_thread()`。
|
|||
|
|
|
|||
|
|
因此当前可确认的状态是:
|
|||
|
|
|
|||
|
|
- 页面可以保存定时配置
|
|||
|
|
- “单次发送”可以正常工作
|
|||
|
|
- 如果要稳定执行真正的自动定时发送,建议优先使用操作系统定时任务调用 `auto_report_and_email.py`
|
|||
|
|
|
|||
|
|
推荐做法:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
python auto_report_and_email.py --mode full --sources all
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
由 Windows 任务计划程序或 Linux cron 定时执行。
|
|||
|
|
|
|||
|
|
## 邮件内容
|
|||
|
|
|
|||
|
|
默认会发送:
|
|||
|
|
|
|||
|
|
- 报告附件:`report_*.txt`
|
|||
|
|
- 默认主题:时间戳主题,或者前端自定义主题
|
|||
|
|
|
|||
|
|
## 常见问题
|
|||
|
|
|
|||
|
|
### SMTP 认证失败
|
|||
|
|
|
|||
|
|
检查:
|
|||
|
|
|
|||
|
|
1. 是否把 QQ 登录密码当成了授权码
|
|||
|
|
2. QQ 邮箱是否开启 SMTP
|
|||
|
|
3. 授权码是否重新生成后未同步到 `.env`
|
|||
|
|
|
|||
|
|
### Web 页面提示配置不完整
|
|||
|
|
|
|||
|
|
检查:
|
|||
|
|
|
|||
|
|
- `EMAIL_SENDER`
|
|||
|
|
- `EMAIL_PASSWORD`
|
|||
|
|
|
|||
|
|
### 单次发送失败
|
|||
|
|
|
|||
|
|
单次发送依赖完整流程,失败原因可能来自:
|
|||
|
|
|
|||
|
|
1. `main.py --mode full` 报错
|
|||
|
|
2. 某个数据源抓取异常
|
|||
|
|
3. 报告未生成
|
|||
|
|
4. SMTP 发送失败
|
|||
|
|
|
|||
|
|
### 发送不到收件箱
|
|||
|
|
|
|||
|
|
检查:
|
|||
|
|
|
|||
|
|
1. 垃圾邮件箱
|
|||
|
|
2. 发件箱是否有投递记录
|
|||
|
|
3. 收件地址拼写是否正确
|
|||
|
|
|