基于Python3和PyQt5的智能邮件自动化工具,支持163邮箱,提供可视化界面、定时任务和Python脚本动态生成邮件内容等强大功能。
- ✅ 可视化界面: 基于PyQt5的现代化GUI界面,支持Windows 10
- ✅ 163邮箱支持: 完整支持163邮箱账号绑定和管理
- ✅ 群发邮件: 支持批量发送邮件,可手动发送或定时发送
- ✅ 批量数据: 🆕 支持读取Excel文件夹批量发送数据报告邮件
- ✅ 定时任务: 可设置每天定时发送邮件
- ✅ 自动回复: 自动监控收件箱并回复新邮件
- ✅ Python脚本: 支持使用Python脚本动态生成邮件内容(读取Excel、CSV等文件)
- ✅ 附件支持: 支持添加多个附件
- ✅ HTML邮件: 支持HTML格式的邮件内容
- ✅ 系统托盘: 支持最小化到系统托盘后台运行
- 操作系统: Windows 10 或更高版本
- Python版本: Python 3.12 或更高版本(开发环境)
- 网络: 需要联网访问邮件服务器
- 可执行文件: 无需Python环境,直接运行
- 下载最新的
寻拟邮件工具.exe可执行文件 - 双击运行即可使用
- ✅ 无需安装Python环境
- ✅ 已内置所有依赖库(pandas、numpy、openpyxl等)
- ✅ 开箱即用
- 访问 Python官网 下载Python 3.7+
- 安装时勾选 "Add Python to PATH"
- 验证安装:
python --version
git clone <项目地址>
cd AIEmailpip install -r requirements.txt如果下载速度慢,可使用国内镜像:
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simplepython main.py使用 PyInstaller 打包:
# 清理旧的构建文件
python -m PyInstaller build.spec --clean打包完成后,可执行文件位于 dist/寻拟邮件工具.exe
打包说明:
- 使用了优化的 build.spec 配置
- 已解决 numpy 2.x 的 CPU dispatcher 问题
- 包含了完整的 Python 脚本执行环境
- 支持用户脚本使用 pandas、numpy、openpyxl 等库
使用本系统前,需要先获取163邮箱的授权码(不是登录密码):
- 登录163邮箱网页版
- 点击"设置" → "POP3/SMTP/IMAP"
- 开启 "IMAP/SMTP服务"
- 点击"生成授权码"或"客户端授权密码"
- 按提示完成手机验证
- 保存生成的授权码(16位字符)
- 启动程序后,点击"邮箱账号"标签
- 填写邮箱信息:
- 邮箱地址: 你的163邮箱地址
- 授权码: 上一步获取的授权码
- SMTP服务器: smtp.163.com (默认)
- 端口: 465 (默认)
- 点击"测试连接"验证配置
- 测试成功后点击"添加账号"
- 切换到"发送邮件"标签
- 选择发件账号
- 输入收件人(支持多个,每行一个或用逗号分隔)
- 选择内容模式:
- 普通文本: 直接输入邮件正文
- Python脚本: 使用Python脚本动态生成邮件内容
- 批量数据: 🆕 从Excel文件夹批量发送数据报告
- 填写邮件主题和正文
- (可选)添加附件
- 点击"立即发送"
- 可以在收件人框直接粘贴多个邮箱地址
- 也可以点击"从文件导入收件人"导入txt文件
- 系统会自动分批发送,避免被限流
支持使用Python脚本动态生成邮件内容,可以:
- 📊 读取Excel、CSV文件数据生成报表
- 📁 扫描目录批量处理文件
- 🕐 生成包含动态日期时间的内容
- 🔄 根据复杂逻辑动态生成个性化邮件
内置Python环境:
- ✅ 打包版本已内置Python 3.12运行时
- ✅ 已集成pandas、numpy、openpyxl、xlrd、xlwt等常用数据处理库
- ✅ 无需本地Python环境,开箱即用
- ✅ 脚本中可直接使用
numpy、np、pandas、pd等模块(无需import)
使用方法:
- 在"发送邮件"页面选择"Python脚本"单选按钮
- 在脚本编辑器中编写Python代码(或点击标签页切换)
- 可以从脚本模板下拉框选择内置示例模板
- 点击"测试脚本"按钮验证脚本是否正常运行
- 确认无误后点击"立即发送"
- 💡 提示:单选按钮与标签页已双向同步,点击任一即可切换
脚本示例:
# 注意:打包版本中 numpy、pandas 等模块已预加载,可直接使用无需 import
# 如果是源码运行,则需要 import
# 读取Excel文件生成报表
def generate_content():
# pd 和 datetime 已预加载,可直接使用
df = pd.read_excel(r"C:\data\sales.xlsx")
content = f"销售报表 {datetime.now()}\n\n"
content += df.head().to_string()
return content
# 或者使用 print 输出
# print("邮件内容")
# 或者定义 result 变量
# result = "邮件内容"详细文档: 查看 SCRIPT_GUIDE.md 获取完整使用指南
支持读取Excel文件夹,为每个文件生成个性化邮件并批量发送:
使用场景:
- 📊 批量发送数据报告(每个Excel文件一封邮件)
- 📈 发送个性化统计报表
- 📑 发送自动生成的HTML表格邮件
- 🔄 定期发送数据更新通知
使用方法:
- 在"发送邮件"页面选择"批量数据"单选按钮
- 输入收件人(上方的收件人输入框)
- 设置主题模板,支持变量:
{filename}- 文件名(不含扩展名){filename_full}- 文件名(含扩展名){index}- 当前序号{total}- 总文件数{date}- 当前日期
- 选择包含Excel文件的文件夹,点击"扫描"
- 从脚本模板下拉框选择内置模板,或编写自定义脚本
- 点击"测试脚本"验证脚本,或"预览第1封"查看效果
- 设置发送间隔(避免频繁发送)
- 点击"立即发送"
内置模板:
- 基础示例: 展示Excel文件基本信息和数据预览
- HTML表格: 将Excel转换为美观的HTML表格
- 数据统计: 生成包含统计分析的专业报告
- 自定义格式: 可根据实际需求自由定制
脚本可用变量:
context['file'] # Excel文件完整路径
context['filename'] # 文件名(不含扩展名)
context['filename_full'] # 文件名(含扩展名)
context['index'] # 当前序号(1开始)
context['total'] # 总文件数脚本示例:
def generate_content():
import pandas as pd
df = pd.read_excel(context['file'])
html = f"<h2>{context['filename']} 数据报告</h2>"
html += f"<p>序号: {context['index']}/{context['total']}</p>"
html += df.to_html(index=False)
return html注意事项:
- 每个收件人会收到所有Excel文件对应的邮件(N个收件人 × M个Excel = N×M封邮件)
- 支持 .xlsx、.xls、.xlsm 格式
- 建议设置合理的发送间隔,避免被限流
- 批量数据模式下不支持添加附件
详细文档: 查看 批量数据功能说明.md 获取更多信息
- 切换到"定时任务"标签
- 点击"添加定时任务"
- 填写任务信息:
- 任务名称: 便于识别的任务名
- 发件账号: 选择发件邮箱
- 收件人: 多个收件人每行一个
- 邮件主题: 邮件标题
- 邮件内容: 邮件正文
- 执行时间: 每天执行的时间(如 09:30)
- 点击"确定"添加任务
- 任务会在每天指定时间自动发送
注意:
- 调度器必须保持运行状态
- 程序关闭后定时任务会停止
- 建议将程序最小化到系统托盘保持后台运行
重要:自动回复功能需要启用163邮箱的IMAP服务。步骤如下:
- 登录163邮箱网页版 (https://mail.163.com)
- 点击右上角"设置" → "POP3/SMTP/IMAP"
- 开启IMAP/SMTP服务:
- 找到"IMAP/SMTP服务"选项
- 点击"开启"按钮
- 按提示完成手机验证
- 获取IMAP授权码:
- 在同一页面中,找到"客户端授权密码"
- 点击"生成"或"生成授权码"
- 按提示完成手机验证
- 保存生成的授权码(16位)
- IMAP服务设置:
- IMAP服务器:
imap.163.com - IMAP端口:
993(使用SSL/TLS) - SMTP服务器:
smtp.163.com - SMTP端口:
465(使用SSL)
- IMAP服务器:
问题1: "IMAP服务在哪里开启?"
- 登录163邮箱 → 设置 → POP3/SMTP/IMAP
- 在该页面中找到"IMAP/SMTP"的开启选项
- 点击"开启",完成验证即可
问题2: "IMAP和SMTP授权码有区别吗?"
- 通常情况下,IMAP和SMTP使用同一个授权码
- 某些情况下可能需要分别生成,程序支持分开配置
- 在"邮箱账号"页面,可在"IMAP授权码"字段单独设置(可选)
- 如果不填,会自动使用SMTP授权码
问题3: 465和993端口是什么?
- 465端口: SMTP使用 (用于发送邮件)
- 993端口: IMAP使用 (用于接收邮件)
- 两个都需要开启才能正常使用自动回复
-
添加邮箱账号(如果还未添加):
- 点击"邮箱账号"标签
- 填写邮箱地址和授权码
- 点击"测试连接"验证
- 点击"添加账号"
-
切换到"自动回复"标签
-
配置自动回复:
- 选择邮箱: 从下拉列表选择要启用自动回复的邮箱
- 编写回复内容: 在文本框中输入自动回复内容
- 例如: "您好,我目前不在办公室,将在X月X日后回复您的邮件。"
- 设置检查间隔: 推荐60秒(每隔60秒检查一次新邮件)
- 点击"保存配置": 保存回复内容
-
启动自动回复前的验证:
- 点击**"测试IMAP连接"**按钮验证IMAP连接
- 如果出现"IMAP连接成功"提示,说明配置正确
- 如果出现错误,请检查:
- IMAP服务是否已开启
- 授权码是否正确(非登录密码)
- 网络连接是否正常
-
启动自动回复:
- 点击"启动自动回复"按��
- 系统会再次验证IMAP连接
- 成功后,状态表中会显示"运行中"
- 程序会定期检查邮件并自动回复
-
监控状态:
- 状态表显示所有邮箱的自动回复状态
- "运行中"表示正在工作
- "已停止"表示未启动
-
停止自动回复:
- 点击"停止自动回复"按钮即可停止
自动回复工作流程:
- 定期检查收件箱的最近邮件(检查最近20封,间隔由检查间隔设置)
- 对每封未回复的邮件自动发送回复
- 记录已回复邮件的Message-ID,避免重复回复
- 每次启动时清空回复记录,确保全新状态
- 提供详细的调试日志,方便排查问题
- 可随时停止自动回复
调试日志说明: 启动自动回复后,程序会在界面底部的"运行日志"区域实时显示详细的运行日志,包括:
- INBOX中总共有多少封邮件
- 搜索和检查了多少封邮件
- 哪些邮件被过滤(已回复过)
- 发现了多少封新邮件
- 每封邮件的回复结果(成功✓/失败✗)
- 每个检查循环的执行时间
日志显示区域特性:
- 实时显示:日志会实时更新,无需刷新
- 自动滚动:新日志自动滚到最底部
- 清空按钮:可以随时清空日志,方便查看
- 深色主题:使用深色背景和等宽字体,易于阅读
如果自动回复没有工作,请查看"运行日志"区域的日志信息,有助于快速定位问题。
注意事项:
- ✅ 连接验���: 启动前建议先点击"测试IMAP连接"
- ✅ 程序运行: 自动回复需要程序保持运行(可最小化到托盘)
- ✅ 授权码: 使用IMAP授权码,而不是邮箱登录密码
- ✅ 服务开启: 确保已开启IMAP和SMTP服务
- ✅ 检查间隔: 建议60秒以上,避免频繁访问服务器
- ✅ 网络要求: 需要稳定的网络连接
⚠️ 频率限制: 163邮箱可能有限制,避免回复垃圾邮件⚠️ 关闭程序: 程序关闭后自动回复会停止⚠️ 防火墙: 确保防火墙允许程序访问网络(993端口)
- 点击窗口关闭按钮,程序会最小化到系统托盘
- 双击托盘图标可恢复窗口
- 右键托盘图标可选择"退出"完全关闭程序
- 托盘运行时,定时任务和自动回复会继续工作
- 确认使用的是授权码,而不是邮箱登录密码
- 确认授权码输入正确,没有多余空格
- 确认已在163邮箱开启IMAP/SMTP服务
常见原因:
- 语法错误: 使用"测试脚本"功能检查语法
- 文件路径错误: 使用原始字符串
r"C:\path\file.xlsx"或双反斜杠"C:\\path\\file.xlsx" - 文件不存在: 确认文件路径正确且文件存在
- 模块问题: 打包版本已预加载 numpy、pandas 等,可直接使用
调试技巧:
- 先点击"测试脚本"查看输出和错误信息
- 检查脚本中的文件路径是否正确
- 确保使用了
generate_content()函数或result变量或print()输出
- 检查网络连接是否正常
- 163邮箱可能有发送频率限制,不要短时间内发送过多邮件
- 检查收件人邮箱地址是否正确
- 确认调度器处于"运行中"状态
- 确认任务的执行时间设置正确
- 检查系统时间是否准确
- 程序需要保持运行状态
- 确认已启动自动回复
- 检查IMAP服务是否开启
- 确认授权码正确
- 检查网络连接
这是正常现象,PyInstaller打包的程序可能被误报:
- 点击"更多信息"
- 选择"仍要���行"
- 或添加到Windows Defender白名单
- 界面框架: PyQt5 5.15.x
- 邮件发送: smtplib (SMTP SSL on port 465)
- 邮件接收: imaplib (IMAP SSL on port 993)
- 任务调度: schedule
- 配置加密: cryptography (Fernet)
- 数据处理: pandas 2.x, numpy 2.3.x, openpyxl
- 脚本执行: 内置 Python 3.12 解释器
- 打包工具: PyInstaller 6.3.0
关键技术点:
- ✅ 解决了 numpy 2.x 的 CPU dispatcher 重复初始化问题
- ✅ 实现了脚本执行器的模块预加载机制
- ✅ 使用 PyInstaller 的 runtime hooks 优化依赖加载
- ✅ 双向同步的 UI 组件交互
AIEmail/
├── main.py # 程序入口
├── main_window.py # 主窗口
├── account_tab.py # 账号管理标签页
├── send_email_tab.py # 发送邮件标签页
├── schedule_tab.py # 定时任务标签页
├── auto_reply_tab.py # 自动回复标签页
├── config_manager.py # 配置管理(加密存储)
├── email_sender.py # 邮件发送模块(支持批量发送)
├── batch_data_sender.py # 批量数据发送模块(v2.0.1新增)
├── auto_reply.py # 自动回复模块
├── task_scheduler.py # 任务调度模块
├── script_executor.py # Python脚本执行器(模块预加载)
├── create_test_excel.py # 测试Excel生成工具(v2.0.1新增)
├── hook-numpy.py # PyInstaller numpy runtime hook
├── requirements.txt # 依赖包列表
├── build.spec # PyInstaller配置(优化)
├── icon.ico # 应用程序图标
├── README.md # 说明文档
├── SCRIPT_GUIDE.md # Python脚本使用指南
├── 批量数据功能说明.md # 批量数据功能说明(v2.0.1新增)
└── .claude/ # Claude Code配置目录
└── problem.md # 问题追踪文档
-
安全性
- 授权码会加密存储在本地
- 不要将配置文件分享给他人
- 定期更换授权码
-
邮件发送限制
- 163邮箱有发送频率限制
- 建议控制发送频率
- 大量发送可能被视为垃圾邮件
-
网络要求
- 需要稳定的网络连接
- 确保防火墙允许程序访问网络
- SMTP使用465端口,IMAP使用993端口
-
资源占用
- 程序占用内存较少
- 可长期后台运行
- 建议最小化到托盘
MIT License
如有问题或建议,请提交Issue。
- 🐛 修复自动回复功能: 彻底解决自动回复无法工作的问题
- 改进IMAP搜索策略:从SINCE命令改为ALL命令,避免兼容性问题
- 优化邮件检查逻辑:只处理最近20封邮件,提高效率
- 修复replied_emails管理:启动时自动清空,确保全新状态
- 添加详细调试日志:显示搜索、过滤、回复的完整过程
- 优化性能:使用BODY.PEEK[HEADER]只获取邮件头
- ✨ 新增实时日志显示: 在自动回复标签页添加运行日志区域
- 实时显示自动回复的运行状态和详细日志
- 支持清空日志功能,方便查看和调试
- 深色主题UI设计,等宽字体显示,易于阅读
- ✨ IMAP授权码独立配置: 支持为IMAP单独配置授权码(与SMTP授权码分开)
- ✨ 改进账号管理UI: 账号添加页面新增IMAP授权码输入框
- 🔍 增强错误提示: 改进IMAP连接失败时的错误提示信息
- 🔧 优化凭证管理系统,自动处理IMAP和SMTP授权码
- 💾 页面状态保存: 发送邮件页面状态自动保存和恢复,包括选中的账号、收件人、主题、内容等
- ✨ 改善用户体验: 重新打开程序时自动恢复上次编辑的内容和设置
- 🔧 增强配置管理系统,支持发送页面状态持久化存储
- 🎨 重大UI优化: 重新设计发送邮件页面布局,大幅提升编辑器可用高度
- ✨ 代码编辑器增强: Python脚本编辑器支持语法高亮和智能缩进
- ✨ Tab键支持: 按Tab键插入4个空格,支持Shift+Tab反向缩进
- ✨ 自动缩进: 行尾输入冒号后回车自动增加缩进级别
- ✨ 格式保留: 从编辑器复制代码时完整保留缩进格式
- 🎨 优化所有区域间距,为内容编辑区预留更多空间
- 🎨 紧凑化控件布局,减小非关键区域高度
- 🎨 内容编辑区使用弹性布局,自适应窗口大小
- 🔧 Python脚本和批量数据编辑器统一使用CodeEditor组件
- 🔧 语法高亮支持关键字、函数、字符串、注释等
- ✨ 新增批量数据发送功能,支持Excel文件夹批量处理
- ✨ 新增4个批量数据脚本模板(基础示例/HTML表格/数据统计/自定义格式)
- ✨ 支持主题模板变量: {filename}, {index}, {total}, {date}
- ✨ 新增批量数据脚本实时测试和预览功能
- 🎨 优化UI布局,批量数据模式下自动隐藏附件区域
- 🔧 新增BatchDataEmailSender类用于批量数据处理
- 🔧 添加发送间隔配置,避免频繁发送
- 📝 新增批量数据功能说明文档
- 🛠️ 新增测试Excel文件生成工具
- ✨ 新增 Python 脚本功能,支持动态生成邮件内容
- ✨ 内置脚本模板库(Excel、CSV、文本文件读取等)
- 🐛 修复 numpy 2.x CPU dispatcher 重复初始化问题
- 🐛 修复脚本执行器的依赖加载问题
- 🎨 优化 UI 布局(内容框和附件框大小调整)
- 🎨 修复单选按钮与标签页的双向同步
- 📦 优化 PyInstaller 打包配置
- 🔧 添加 numpy runtime hook
- 🔧 实现模块预加载机制
- 🎉 首次发布
- ✅ 支持163邮箱账号管理
- ✅ 支持群发邮件
- ✅ 支持定时任务
- ✅ 支持自动回复
- ✅ 系统托盘支持
免责声明: 本软件仅供学习和个人使用,请遵守相关法律法规,不得用于发送垃圾邮件等违法行为。