Skip to content

hzy9738/XYEmail

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

寻拟邮件工具

基于Python3和PyQt5的智能邮件自动化工具,支持163邮箱,提供可视化界面、定时任务和Python脚本动态生成邮件内容等强大功能。

功能特性

  • 可视化界面: 基于PyQt5的现代化GUI界面,支持Windows 10
  • 163邮箱支持: 完整支持163邮箱账号绑定和管理
  • 群发邮件: 支持批量发送邮件,可手动发送或定时发送
  • 批量数据: 🆕 支持读取Excel文件夹批量发送数据报告邮件
  • 定时任务: 可设置每天定时发送邮件
  • 自动回复: 自动监控收件箱并回复新邮件
  • Python脚本: 支持使用Python脚本动态生成邮件内容(读取Excel、CSV等文件)
  • 附件支持: 支持添加多个附件
  • HTML邮件: 支持HTML格式的邮件内容
  • 系统托盘: 支持最小化到系统托盘后台运行

系统要求

  • 操作系统: Windows 10 或更高版本
  • Python版本: Python 3.12 或更高版本(开发环境)
  • 网络: 需要联网访问邮件服务器
  • 可执行文件: 无需Python环境,直接运行

安装部署

方式一: 使用可执行文件(推荐)

  1. 下载最新的 寻拟邮件工具.exe 可执行文件
  2. 双击运行即可使用
  3. ✅ 无需安装Python环境
  4. ✅ 已内置所有依赖库(pandas、numpy、openpyxl等)
  5. ✅ 开箱即用

方式二: 从源码安装

步骤1: 安装Python

  1. 访问 Python官网 下载Python 3.7+
  2. 安装时勾选 "Add Python to PATH"
  3. 验证安装:
    python --version

步骤2: 下载项目

git clone <项目地址>
cd AIEmail

步骤3: 安装依赖

pip install -r requirements.txt

如果下载速度慢,可使用国内镜像:

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

步骤4: 运行程序

python main.py

方式三: 打包成可执行文件

使用 PyInstaller 打包:

# 清理旧的构建文件
python -m PyInstaller build.spec --clean

打包完成后,可执行文件位于 dist/寻拟邮件工具.exe

打包说明:

  • 使用了优化的 build.spec 配置
  • 已解决 numpy 2.x 的 CPU dispatcher 问题
  • 包含了完整的 Python 脚本执行环境
  • 支持用户脚本使用 pandas、numpy、openpyxl 等库

使用教程

1. 获取163邮箱授权码

使用本系统前,需要先获取163邮箱的授权码(不是登录密码):

  1. 登录163邮箱网页版
  2. 点击"设置" → "POP3/SMTP/IMAP"
  3. 开启 "IMAP/SMTP服务"
  4. 点击"生成授权码"或"客户端授权密码"
  5. 按提示完成手机验证
  6. 保存生成的授权码(16位字符)

2. 添加邮箱账号

  1. 启动程序后,点击"邮箱账号"标签
  2. 填写邮箱信息:
    • 邮箱地址: 你的163邮箱地址
    • 授权码: 上一步获取的授权码
    • SMTP服务器: smtp.163.com (默认)
    • 端口: 465 (默认)
  3. 点击"测试连接"验证配置
  4. 测试成功后点击"添加账号"

3. 发送邮件

单次发送

  1. 切换到"发送邮件"标签
  2. 选择发件账号
  3. 输入收件人(支持多个,每行一个或用逗号分隔)
  4. 选择内容模式:
    • 普通文本: 直接输入邮件正文
    • Python脚本: 使用Python脚本动态生成邮件内容
    • 批量数据: 🆕 从Excel文件夹批量发送数据报告
  5. 填写邮件主题和正文
  6. (可选)添加附件
  7. 点击"立即发送"

批量发送

  • 可以在收件人框直接粘贴多个邮箱地址
  • 也可以点击"从文件导入收件人"导入txt文件
  • 系统会自动分批发送,避免被限流

Python脚本模式(新功能)

支持使用Python脚本动态生成邮件内容,可以:

  • 📊 读取Excel、CSV文件数据生成报表
  • 📁 扫描目录批量处理文件
  • 🕐 生成包含动态日期时间的内容
  • 🔄 根据复杂逻辑动态生成个性化邮件

内置Python环境:

  • ✅ 打包版本已内置Python 3.12运行时
  • ✅ 已集成pandas、numpy、openpyxl、xlrd、xlwt等常用数据处理库
  • ✅ 无需本地Python环境,开箱即用
  • ✅ 脚本中可直接使用 numpynppandaspd 等模块(无需import)

使用方法:

  1. 在"发送邮件"页面选择"Python脚本"单选按钮
  2. 在脚本编辑器中编写Python代码(或点击标签页切换)
  3. 可以从脚本模板下拉框选择内置示例模板
  4. 点击"测试脚本"按钮验证脚本是否正常运行
  5. 确认无误后点击"立即发送"
  6. 💡 提示:单选按钮与标签页已双向同步,点击任一即可切换

脚本示例:

# 注意:打包版本中 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 获取完整使用指南

批量数据模式(🆕 v2.0.1新功能)

支持读取Excel文件夹,为每个文件生成个性化邮件并批量发送:

使用场景:

  • 📊 批量发送数据报告(每个Excel文件一封邮件)
  • 📈 发送个性化统计报表
  • 📑 发送自动生成的HTML表格邮件
  • 🔄 定期发送数据更新通知

使用方法:

  1. 在"发送邮件"页面选择"批量数据"单选按钮
  2. 输入收件人(上方的收件人输入框)
  3. 设置主题模板,支持变量:
    • {filename} - 文件名(不含扩展名)
    • {filename_full} - 文件名(含扩展名)
    • {index} - 当前序号
    • {total} - 总文件数
    • {date} - 当前日期
  4. 选择包含Excel文件的文件夹,点击"扫描"
  5. 从脚本模板下拉框选择内置模板,或编写自定义脚本
  6. 点击"测试脚本"验证脚本,或"预览第1封"查看效果
  7. 设置发送间隔(避免频繁发送)
  8. 点击"立即发送"

内置模板:

  • 基础示例: 展示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 获取更多信息

4. 定时任务

  1. 切换到"定时任务"标签
  2. 点击"添加定时任务"
  3. 填写任务信息:
    • 任务名称: 便于识别的任务名
    • 发件账号: 选择发件邮箱
    • 收件人: 多个收件人每行一个
    • 邮件主题: 邮件标题
    • 邮件内容: 邮件正文
    • 执行时间: 每天执行的时间(如 09:30)
  4. 点击"确定"添加任务
  5. 任务会在每天指定时间自动发送

注意:

  • 调度器必须保持运行状态
  • 程序关闭后定时任务会停止
  • 建议将程序最小化到系统托盘保持后台运行

5. 自动回复

准备工作 - 启用IMAP服务

重要:自动回复功能需要启用163邮箱的IMAP服务。步骤如下:

  1. 登录163邮箱网页版 (https://mail.163.com)
  2. 点击右上角"设置""POP3/SMTP/IMAP"
  3. 开启IMAP/SMTP服务:
    • 找到"IMAP/SMTP服务"选项
    • 点击"开启"按钮
    • 按提示完成手机验证
  4. 获取IMAP授权码:
    • 在同一页面中,找到"客户端授权密码"
    • 点击"生成"或"生成授权码"
    • 按提示完成手机验证
    • 保存生成的授权码(16位)
  5. IMAP服务设置:
    • IMAP服务器: imap.163.com
    • IMAP端口: 993 (使用SSL/TLS)
    • SMTP服务器: smtp.163.com
    • SMTP端口: 465 (使用SSL)

常见问题排查

问题1: "IMAP服务在哪里开启?"

  • 登录163邮箱 → 设置 → POP3/SMTP/IMAP
  • 在该页面中找到"IMAP/SMTP"的开启选项
  • 点击"开启",完成验证即可

问题2: "IMAP和SMTP授权码有区别吗?"

  • 通常情况下,IMAP和SMTP使用同一个授权码
  • 某些情况下可能需要分别生成,程序支持分开配置
  • 在"邮箱账号"页面,可在"IMAP授权码"字段单独设置(可选)
  • 如果不填,会自动使用SMTP授权码

问题3: 465和993端口是什么?

  • 465端口: SMTP使用 (用于发送邮件)
  • 993端口: IMAP使用 (用于接收邮件)
  • 两个都需要开启才能正常使用自动回复

使用教程

  1. 添加邮箱账号(如果还未添加):

    • 点击"邮箱账号"标签
    • 填写邮箱地址和授权码
    • 点击"测试连接"验证
    • 点击"添加账号"
  2. 切换到"自动回复"标签

  3. 配置自动回复:

    • 选择邮箱: 从下拉列表选择要启用自动回复的邮箱
    • 编写回复内容: 在文本框中输入自动回复内容
      • 例如: "您好,我目前不在办公室,将在X月X日后回复您的邮件。"
    • 设置检查间隔: 推荐60秒(每隔60秒检查一次新邮件)
    • 点击"保存配置": 保存回复内容
  4. 启动自动回复前的验证:

    • 点击**"测试IMAP连接"**按钮验证IMAP连接
    • 如果出现"IMAP连接成功"提示,说明配置正确
    • 如果出现错误,请检查:
      • IMAP服务是否已开启
      • 授权码是否正确(非登录密码)
      • 网络连接是否正常
  5. 启动自动回复:

    • 点击"启动自动回复"按��
    • 系统会再次验证IMAP连接
    • 成功后,状态表中会显示"运行中"
    • 程序会定期检查邮件并自动回复
  6. 监控状态:

    • 状态表显示所有邮箱的自动回复状态
    • "运行中"表示正在工作
    • "已停止"表示未启动
  7. 停止自动回复:

    • 点击"停止自动回复"按钮即可停止

自动回复工作流程:

  • 定期检查收件箱的最近邮件(检查最近20封,间隔由检查间隔设置)
  • 对每封未回复的邮件自动发送回复
  • 记录已回复邮件的Message-ID,避免重复回复
  • 每次启动时清空回复记录,确保全新状态
  • 提供详细的调试日志,方便排查问题
  • 可随时停止自动回复

调试日志说明: 启动自动回复后,程序会在界面底部的"运行日志"区域实时显示详细的运行日志,包括:

  • INBOX中总共有多少封邮件
  • 搜索和检查了多少封邮件
  • 哪些邮件被过滤(已回复过)
  • 发现了多少封新邮件
  • 每封邮件的回复结果(成功✓/失败✗)
  • 每个检查循环的执行时间

日志显示区域特性:

  • 实时显示:日志会实时更新,无需刷新
  • 自动滚动:新日志自动滚到最底部
  • 清空按钮:可以随时清空日志,方便查看
  • 深色主题:使用深色背景和等宽字体,易于阅读

如果自动回复没有工作,请查看"运行日志"区域的日志信息,有助于快速定位问题。

注意事项:

  • 连接验���: 启动前建议先点击"测试IMAP连接"
  • 程序运行: 自动回复需要程序保持运行(可最小化到托盘)
  • 授权码: 使用IMAP授权码,而不是邮箱登录密码
  • 服务开启: 确保已开启IMAP和SMTP服务
  • 检查间隔: 建议60秒以上,避免频繁访问服务器
  • 网络要求: 需要稳定的网络连接
  • ⚠️ 频率限制: 163邮箱可能有限制,避免回复垃圾邮件
  • ⚠️ 关闭程序: 程序关闭后自动回复会停止
  • ⚠️ 防火墙: 确保防火墙允许程序访问网络(993端口)

6. 系统托盘

  • 点击窗口关闭按钮,程序会最小化到系统托盘
  • 双击托盘图标可恢复窗口
  • 右键托盘图标可选择"退出"完全关闭程序
  • 托盘运行时,定时任务和自动回复会继续工作

常见问题

Q1: 提示"认证失败,请检查邮箱和授权码"

  • 确认使用的是授权码,而不是邮箱登录密码
  • 确认授权码输入正确,没有多余空格
  • 确认已在163邮箱开启IMAP/SMTP服务

Q6: Python脚本执行失败

常见原因:

  1. 语法错误: 使用"测试脚本"功能检查语法
  2. 文件路径错误: 使用原始字符串 r"C:\path\file.xlsx" 或双反斜杠 "C:\\path\\file.xlsx"
  3. 文件不存在: 确认文件路径正确且文件存在
  4. 模块问题: 打包版本已预加载 numpy、pandas 等,可直接使用

调试技巧:

  • 先点击"测试脚本"查看输出和错误信息
  • 检查脚本中的文件路径是否正确
  • 确保使用了 generate_content() 函数或 result 变量或 print() 输出

Q2: 发送邮件失败

  • 检查网络连接是否正常
  • 163邮箱可能有发送频率限制,不要短时间内发送过多邮件
  • 检查收件人邮箱地址是否正确

Q3: 定时任务没有执行

  • 确认调度器处于"运行中"状态
  • 确认任务的执行时间设置正确
  • 检查系统时间是否准确
  • 程序需要保持运行状态

Q4: 自动回复不工作

  • 确认已启动自动回复
  • 检查IMAP服务是否开启
  • 确认授权码正确
  • 检查网络连接

Q5: Windows Defender报警

这是正常现象,PyInstaller打包的程序可能被误报:

  1. 点击"更多信息"
  2. 选择"仍要���行"
  3. 或添加到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          # 问题追踪文档

注意事项

  1. 安全性

    • 授权码会加密存储在本地
    • 不要将配置文件分享给他人
    • 定期更换授权码
  2. 邮件发送限制

    • 163邮箱有发送频率限制
    • 建议控制发送频率
    • 大量发送可能被视为垃圾邮件
  3. 网络要求

    • 需要稳定的网络连接
    • 确保防火墙允许程序访问网络
    • SMTP使用465端口,IMAP使用993端口
  4. 资源占用

    • 程序占用内存较少
    • 可长期后台运行
    • 建议最小化到托盘

许可证

MIT License

支持

如有问题或建议,请提交Issue。

版本历史

v2.0.4 (当前版本)

  • 🐛 修复自动回复功能: 彻底解决自动回复无法工作的问题
    • 改进IMAP搜索策略:从SINCE命令改为ALL命令,避免兼容性问题
    • 优化邮件检查逻辑:只处理最近20封邮件,提高效率
    • 修复replied_emails管理:启动时自动清空,确保全新状态
    • 添加详细调试日志:显示搜索、过滤、回复的完整过程
    • 优化性能:使用BODY.PEEK[HEADER]只获取邮件头
  • 新增实时日志显示: 在自动回复标签页添加运行日志区域
    • 实时显示自动回复的运行状态和详细日志
    • 支持清空日志功能,方便查看和调试
    • 深色主题UI设计,等宽字体显示,易于阅读
  • IMAP授权码独立配置: 支持为IMAP单独配置授权码(与SMTP授权码分开)
  • 改进账号管理UI: 账号添加页面新增IMAP授权码输入框
  • 🔍 增强错误提示: 改进IMAP连接失败时的错误提示信息
  • 🔧 优化凭证管理系统,自动处理IMAP和SMTP授权码

v2.0.3

  • 💾 页面状态保存: 发送邮件页面状态自动保存和恢复,包括选中的账号、收件人、主题、内容等
  • 改善用户体验: 重新打开程序时自动恢复上次编辑的内容和设置
  • 🔧 增强配置管理系统,支持发送页面状态持久化存储

v2.0.2

  • 🎨 重大UI优化: 重新设计发送邮件页面布局,大幅提升编辑器可用高度
  • 代码编辑器增强: Python脚本编辑器支持语法高亮和智能缩进
  • Tab键支持: 按Tab键插入4个空格,支持Shift+Tab反向缩进
  • 自动缩进: 行尾输入冒号后回车自动增加缩进级别
  • 格式保留: 从编辑器复制代码时完整保留缩进格式
  • 🎨 优化所有区域间距,为内容编辑区预留更多空间
  • 🎨 紧凑化控件布局,减小非关键区域高度
  • 🎨 内容编辑区使用弹性布局,自适应窗口大小
  • 🔧 Python脚本和批量数据编辑器统一使用CodeEditor组件
  • 🔧 语法高亮支持关键字、函数、字符串、注释等

v2.0.1

  • ✨ 新增批量数据发送功能,支持Excel文件夹批量处理
  • ✨ 新增4个批量数据脚本模板(基础示例/HTML表格/数据统计/自定义格式)
  • ✨ 支持主题模板变量: {filename}, {index}, {total}, {date}
  • ✨ 新增批量数据脚本实时测试和预览功能
  • 🎨 优化UI布局,批量数据模式下自动隐藏附件区域
  • 🔧 新增BatchDataEmailSender类用于批量数据处理
  • 🔧 添加发送间隔配置,避免频繁发送
  • 📝 新增批量数据功能说明文档
  • 🛠️ 新增测试Excel文件生成工具

v2.0.0

  • ✨ 新增 Python 脚本功能,支持动态生成邮件内容
  • ✨ 内置脚本模板库(Excel、CSV、文本文件读取等)
  • 🐛 修复 numpy 2.x CPU dispatcher 重复初始化问题
  • 🐛 修复脚本执行器的依赖加载问题
  • 🎨 优化 UI 布局(内容框和附件框大小调整)
  • 🎨 修复单选按钮与标签页的双向同步
  • 📦 优化 PyInstaller 打包配置
  • 🔧 添加 numpy runtime hook
  • 🔧 实现模块预加载机制

v1.0.0

  • 🎉 首次发布
  • ✅ 支持163邮箱账号管理
  • ✅ 支持群发邮件
  • ✅ 支持定时任务
  • ✅ 支持自动回复
  • ✅ 系统托盘支持

免责声明: 本软件仅供学习和个人使用,请遵守相关法律法规,不得用于发送垃圾邮件等违法行为。

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •