自动将指定文件夹内的PDF文件加密后,通过163邮箱发送给不同的收件人。
特色:使用Excel表格管理配置,直观易用!支持Windows和Linux!
- ✅ 批量加密PDF文件(AES-256加密)
- ✅ 支持每个文件夹使用不同密码
- ✅ 一次性发送多个加密PDF作为附件
- ✅ Excel表格配置(无需编辑JSON)
- ✅ 详细的进度显示和错误提示
- ✅ 支持中文文件名和路径
- ✅ 跨平台支持(Windows和Linux)
- ✅ 使用163邮箱发送
report-sending/
├── report/ # PDF源文件夹(放置PDF文件)
│ └── 配置表.xlsx # Excel配置文件(在这里修改!)
├── config.json # 邮箱配置文件
├── pdf_encrypt_send.py # 主程序
├── run.sh # Linux启动脚本
├── run.bat # Windows启动脚本
├── requirements.txt # Python依赖
└── README.md # 本说明文件
Linux/Mac:
cd /path/to/report-sending
pip3 install -r requirements.txtWindows:
cd C:\path\to\report-sending
py -m pip install -r requirements.txt等待安装完成(会安装 pikepdf、colorama、openpyxl)。
重要:163邮箱需要使用授权码,不是邮箱密码!
-
登录163邮箱
- 访问 https://mail.163.com
- 使用你的163邮箱登录
-
进入设置
- 点击顶部的「设置」
- 选择「POP3/SMTP/IMAP」
-
开启SMTP服务
- 找到「POP3/SMTP服务」或「IMAP/SMTP服务」
- 点击「开启」(如果已开启则跳过)
- 可能需要手机验证
-
设置授权密码(授权码)
- 在页面找到「客户端授权密码」或「授权密码」
- 点击「设置」或「重置授权密码」
- 按提示发送短信验证
- 复制显示的授权码(通常是字母+数字组合)
- 妥善保存授权码
ABCDEF123456 (示例格式,实际以163邮箱显示为准)
使用文本编辑器打开 config.json,修改以下内容:
Linux/Mac示例:
{
"smtp": {
"server": "smtp.163.com",
"port": 465,
"sender_email": "你的163邮箱@163.com",
"sender_password": "你的授权码",
"sender_name": "报告发送系统"
},
"pdf_source_path": "/home/username/report-sending/report",
"excel_config_file": "report/配置表.xlsx"
}Windows示例:
{
"smtp": {
"server": "smtp.163.com",
"port": 465,
"sender_email": "你的163邮箱@163.com",
"sender_password": "你的授权码",
"sender_name": "报告发送系统"
},
"pdf_source_path": "D:\\report-sending\\report",
"excel_config_file": "report\\配置表.xlsx"
}注意:
- Linux/Mac路径使用正斜杠
/ - Windows路径使用双反斜杠
\\
这是最重要的一步!
打开 report/配置表.xlsx,按照以下格式填写:
| 文件夹名称 | 加密密码 | 收件邮箱 | 收件人名称 |
|---|---|---|---|
| 铜梁公司 | TL2026Feb | tongliang@example.com | 铜梁公司 |
| 酉阳公司 | YY2026Feb | youyang@example.com | 酉阳公司 |
| 江津公司 | JJ2026Feb | jiangjin@example.com | 江津公司 |
- 文件夹名称:必须与
report/下的子文件夹名称完全一致 - 加密密码:用于加密PDF的密码(每个文件夹可以不同)
- 收件邮箱:接收加密PDF的邮箱地址
- 收件人名称:收件人的名称(用于邮件显示)
文件夹名称 加密密码 收件邮箱 收件人名称
铜梁公司 TL2026Feb tongliang@qq.com 铜梁公司
酉阳公司 YY2026Feb youyang@qq.com 酉阳公司
江津公司 JJ2026Feb jiangjin@qq.com 江津公司
垫江公司 DJ2026Feb dianjiang@qq.com 垫江公司
长寿公司 CS2026Feb changshou@qq.com 长寿公司
重要提示:
- 第一行是表头,不要修改
- 从第二行开始填写数据
- 所有列都必须填写(不能为空)
- 保存后关闭Excel文件
将PDF文件按以下结构存放在 report/ 文件夹下:
report-sending/
└── report/
├── 配置表.xlsx
├── 铜梁公司/
│ ├── 报告1.pdf
│ ├── 报告2.pdf
│ └── 数据.pdf
├── 酉阳公司/
│ ├── 月报.pdf
│ └── 统计.pdf
└── 江津公司/
└── 分析.pdf
注意:
- 文件夹名称必须与Excel配置表中的"文件夹名称"列完全一致
- 支持中文文件名
- 每个文件夹内可以有多个PDF文件
Linux/Mac:
cd /path/to/report-sending
./run.sh或者:
python3 pdf_encrypt_send.pyWindows:
方法一:双击 run.bat 文件
方法二:命令行运行
py pdf_encrypt_send.py程序运行时会显示:
============================================================
PDF加密邮件发送系统
Excel配置版
============================================================
✓ 配置文件加载成功: D:\project\config.json
✓ Excel配置加载成功: D:\project\配置表.xlsx
ℹ 共加载 3 个文件夹配置
✓ PDF源文件夹: D:\report
>>> 进度: 1/3 <<<
============================================================
ℹ 开始处理: 铜梁公司
============================================================
ℹ 找到 3 个PDF文件
ℹ 使用密码加密: TL2026Feb
ℹ [1/3] 正在加密: 报告1.pdf
✓ 加密成功: 报告1.pdf
ℹ [2/3] 正在加密: 报告2.pdf
✓ 加密成功: 报告2.pdf
ℹ [3/3] 正在加密: 数据.pdf
✓ 加密成功: 数据.pdf
ℹ 准备发送邮件到: tongliang@example.com
ℹ 正在连接163邮箱服务器...
✓ 邮件发送成功!(3 个附件)
ℹ 临时文件已清理
>>> 进度: 2/3 <<<
...
============================================================
处理完成
============================================================
ℹ 总共: 3 个文件夹
✓ 成功: 3 个
每月只需修改 配置表.xlsx 即可:
- 打开
配置表.xlsx - 修改"加密密码"列的密码
- 保存文件
- 重新运行程序
密码建议格式:
- 公司简称 + 年份 + 月份(如:TL2026Feb, TL2026Mar)
- 包含字母+数字,8位以上
- 每个公司可以使用不同密码
示例:
2月份:TL2026Feb, YY2026Feb, JJ2026Feb
3月份:TL2026Mar, YY2026Mar, JJ2026Mar
4月份:TL2026Apr, YY2026Apr, JJ2026Apr
原因: 授权码错误或未开启SMTP服务
解决:
- 确认使用的是授权码,不是163邮箱密码
- 检查授权码是否复制完整
- 重新生成授权码
- 确认已开启SMTP服务
原因: Excel配置表中的文件夹名称与实际不一致
解决:
- 检查
report/下是否有对应的文件夹 - 确保文件夹名称完全一致(包括空格、标点符号)
- 注意中文输入法的全角/半角问题
原因: 配置表.xlsx 文件不在 report/ 文件夹
解决:
- 确保
配置表.xlsx在report/文件夹下 - 检查文件名是否正确(包括扩展名)
原因: 文件夹内没有PDF文件
解决:
- 确认文件夹内有
.pdf文件 - 检查文件扩展名是否正确
- 确保PDF文件没有被隐藏
原因: Excel文件格式错误或被占用
解决:
- 关闭Excel文件后再运行程序
- 确保Excel文件没有损坏
- 检查是否有空行或格式错误
原因: 附件较大或网络慢
说明:
- 163邮箱单封邮件最大支持50MB附件
- 如果附件过大,建议分批发送或压缩
相比JSON配置,Excel配置有以下优势:
- 直观可视化:表格形式,一目了然
- 易于编辑:双击即可修改,无需担心格式错误
- 批量操作:可以批量复制、粘贴、填充
- 不易出错:不会因为少个逗号、括号导致程序崩溃
- 便于管理:可以添加、删除行,灵活管理配置
- 不要将配置文件分享给他人(包含邮箱授权码)
- 定期更换163邮箱授权码
- 每月更新PDF加密密码
- 通过其他方式告知收件人密码(不要在邮件正文中明文写密码)
- Excel配置表妥善保管(包含敏感信息)
如遇到问题,请检查:
Linux/Mac:
- Python版本是否 >= 3.8(运行
python3 --version查看) - 依赖包是否正确安装(运行
pip3 list) - run.sh是否有执行权限(运行
chmod +x run.sh)
Windows:
- Python版本是否 >= 3.8(运行
py --version查看) - 依赖包是否正确安装(运行
py -m pip list)
通用检查:
- Excel配置文件格式是否正确
- config.json 格式是否正确(JSON格式,注意逗号)
- 网络连接是否正常
- 163邮箱SMTP服务是否已开启
- 配置表.xlsx 是否在 report/ 文件夹下
- 新增Linux支持
- 新增run.sh启动脚本
- 优化文件结构(report文件夹)
- 更新README支持跨平台
- 新增Excel配置支持
- 切换到163邮箱
- 优化错误提示
- 改进用户体验
- 初始版本
- 支持批量PDF加密
- 支持QQ邮箱发送