使用Python构建带GUI的邮件自动发送工具

 更新时间:2025年03月09日 13:46:40   作者:winfredzhang  
在本篇博客中,我们将深入解析一个使用 wxPython 构建的邮件发送器 GUI 程序,这个工具能够自动查找指定目录中的文件作为附件,并提供邮件发送功能,本文将从功能、代码结构、关键技术等方面进行详细分析,需要的朋友可以参考下

1. 项目概述

该程序是一个基于 wxPython 的 GUI 工具,允许用户通过直观的界面输入邮件内容、添加收件人、抄送、正文,并自动从指定文件夹中提取附件,最后使用 SMTP 发送邮件。

核心功能:

  • 用户界面:基于 wxPython 构建,包含邮件标题、正文、附件列表等组件。
  • 配置管理:自动加载并保存用户的邮件配置,如 SMTP 服务器、发件人邮箱等。
  • 附件自动匹配:程序可以自动查找当前周五的文件夹,并将其中的文件作为邮件附件。
  • 邮件发送:使用 Python 的 smtplib 发送邮件,并支持 SSL 加密。

2. 代码结构分析

该程序的主逻辑封装在 EmailSenderFrame 类中,继承自 wx.Frame,负责 GUI 组件的创建和事件绑定。

(1)构造函数:初始化窗口与加载配置

class EmailSenderFrame(wx.Frame):
    def __init__(self, parent, title):
        super(EmailSenderFrame, self).__init__(parent, title=title, size=(800, 600))
        
        # 默认附件文件夹路径
        self.attachment_base_dir = r"c:\mydocs\每周工作"
        
        # 创建配置文件路径
        self.config_file = os.path.join(os.path.expanduser("~"), "email_sender_config.json")
        
        # 默认邮箱设置
        self.smtp_server = "smtp.exmail.qq.com"
        self.smtp_port = 465
        self.from_email = ""
        self.password = ""
        self.use_ssl = True
        
        # 创建界面
        self.create_ui()
        
        # 加载之前保存的配置
        self.load_config()
        
        # 自动查找当前周五的附件
        self.update_attachments()
        
        # 显示窗口
        self.Centre()
        self.Show()

关键点解析

  • self.attachment_base_dir 指定了附件存储的默认路径。
  • self.config_file 定义了配置文件路径,方便持久化用户设置。
  • self.smtp_serverself.smtp_port 以及 self.from_email 等变量存储邮件服务器信息,默认使用腾讯企业邮箱。
  • create_ui() 方法负责界面布局。
  • load_config() 读取本地保存的用户配置,避免每次运行都重新输入信息。
  • update_attachments() 自动查找当前周五的附件文件。

(2)创建 UI 界面

def create_ui(self):
    panel = wx.Panel(self)
    vbox = wx.BoxSizer(wx.VERTICAL)
    
    # 邮件标题
    subject_box = wx.BoxSizer(wx.HORIZONTAL)
    subject_label = wx.StaticText(panel, label="标题:")
    self.subject_ctrl = wx.TextCtrl(panel)
    subject_box.Add(subject_label, flag=wx.RIGHT, border=8)
    subject_box.Add(self.subject_ctrl, proportion=1)
    vbox.Add(subject_box, flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.TOP, border=10)
    
    # 省略部分代码...
    
    # 设置布局
    panel.SetSizer(vbox)

关键点解析

  • 采用 wx.BoxSizer(wx.VERTICAL) 创建垂直布局,保持界面整洁。
  • 使用 wx.TextCtrl 作为输入框,并绑定 wx.StaticText 作为标签。
  • 采用 proportion=1 使输入框占据界面的大部分空间,方便用户输入邮件信息。

(3)加载和保存用户配置

def load_config(self):
    """加载之前保存的配置"""
    if os.path.exists(self.config_file):
        try:
            with open(self.config_file, 'r', encoding='utf-8') as f:
                config = json.load(f)
                
            self.subject_ctrl.SetValue(config.get('subject', ''))
            self.to_ctrl.SetValue(config.get('to', ''))
            self.cc_ctrl.SetValue(config.get('cc', ''))
            self.body_ctrl.SetValue(config.get('body', ''))
            
            saved_dir = config.get('attachment_base_dir', '')
            if saved_dir and os.path.exists(saved_dir):
                self.attachment_base_dir = saved_dir
                self.folder_ctrl.SetValue(self.attachment_base_dir)
                
            self.smtp_server = config.get('smtp_server', 'smtp.exmail.qq.com')
            self.smtp_port = config.get('smtp_port', 465)
            self.from_email = config.get('from_email', '')
            self.password = config.get('password', '')
            self.use_ssl = config.get('use_ssl', True)
        except Exception as e:
            wx.MessageBox(f"加载配置时出错: {str(e)}", "错误", wx.OK | wx.ICON_ERROR)

关键点解析

  • 读取 email_sender_config.json 文件,恢复上次保存的邮件设置。
  • 采用 json.load(f) 解析 JSON 数据并填充界面组件。
  • 如果 attachment_base_dir 存在,则恢复该目录,确保附件路径有效。

(4)获取当前周五的文件夹路径

def get_this_friday_folder(self):
    """获取当前选择的文件夹路径"""
    selected_folder = self.attachment_base_dir

    # 检查文件夹是否存在
    if not os.path.exists(selected_folder):
        wx.MessageBox(f"选择的文件夹不存在: {selected_folder}", "错误", wx.OK | wx.ICON_ERROR)
        return ""

    return selected_folder

关键点解析

  • self.attachment_base_dir 设定默认的工作文件夹,该路径可以通过 UI 进行调整。
  • 使用 os.path.exists() 确保路径有效,否则弹出错误提示框。

(5)自动查找附件文件

def update_attachments(self):
    """在选定的文件夹中查找所有文件"""
    folder = self.get_this_friday_folder()
    if folder:
        files = glob.glob(os.path.join(folder, "*"))  # 获取所有文件
        self.attach_list.Set(files)  # 更新 UI 列表

关键点解析

  • glob.glob(os.path.join(folder, "*")) 获取所有文件路径。
  • self.attach_list.Set(files) 直接将文件路径添加到 wx.ListBox 组件中,方便用户查看附件。

3. 总结

本项目基于 wxPython 实现了一个邮件发送 GUI 工具,整合了 配置管理、自动查找附件、邮件发送 等功能。通过 wxPython 提供的 UI 组件,用户可以直观地输入邮件信息,并快速附加文件进行发送。

技术要点回顾

  • wxPython 用于 GUI 构建,提供直观的邮件编辑界面。
  • JSON 配置管理 让程序具备持久化存储功能,提升用户体验。
  • 自动附件匹配 通过 glob 查找文件,提高效率。
  • SMTP 发送邮件 结合 smtplib 实现邮件投递,支持 SSL 加密。

本代码适用于自动发送周报、批量邮件处理等应用场景,并可进一步扩展。

运行结果

以上就是使用Python构建带GUI的邮件自动发送工具的详细内容,更多关于Python GUI邮件发送工具的资料请关注脚本之家其它相关文章!

相关文章

  • MATLAB中text函数使用的语法与示例代码

    MATLAB中text函数使用的语法与示例代码

    text函数的功能是向数据点添加文本说明,下面这篇文章主要给大家介绍了关于MATLAB中text函数使用的语法与示例的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • Python request设置HTTPS代理代码解析

    Python request设置HTTPS代理代码解析

    这篇文章主要介绍了Python request设置HTTPS代理代码解析,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • 3种Python查看神经网络结构的方法小结

    3种Python查看神经网络结构的方法小结

    这篇文章主要为大家详细介绍了3种Python查看神经网络结构的方法,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以参考一下
    2025-05-05
  • python编程进阶之异常处理用法实例分析

    python编程进阶之异常处理用法实例分析

    这篇文章主要介绍了python编程进阶之异常处理用法,结合实例形式分析了python异常捕获、处理相关语句、使用技巧与操作注意事项,需要的朋友可以参考下
    2020-02-02
  • Scrapy框架中的Pipeline使用详解

    Scrapy框架中的Pipeline使用详解

    这篇文章主要介绍了Scrapy框架中的Pipeline使用详解,Scrapy 中的 Pipeline 为我们提供了处理数据的功能,在实际开发中我们经常使用它来清洗/验证数据、去重和数据保存,需要的朋友可以参考下
    2023-10-10
  • Python中构建终端应用界面利器Blessed模块的使用

    Python中构建终端应用界面利器Blessed模块的使用

    Blessed 库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高效的吧
    2025-01-01
  • Python实现语音识别vosk的示例代码

    Python实现语音识别vosk的示例代码

    Vosk是一个功能强大且易于使用的语音识别工具包,它提供了Python绑定,使得在Python中使用Vosk变得非常方便,本文主要介绍了Python实现语音识别vosk的示例代码,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • Python3 XML 获取雅虎天气的实现方法

    Python3 XML 获取雅虎天气的实现方法

    下面小编就为大家分享一篇Python3 XML 获取雅虎天气的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-02-02
  • 用pandas划分数据集实现训练集和测试集

    用pandas划分数据集实现训练集和测试集

    这篇文章主要介绍了用pandas划分数据集实现训练集和测试集,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • python Boltons库实用功能探索(深度复制类型检查重试机制)

    python Boltons库实用功能探索(深度复制类型检查重试机制)

    这篇文章主要为大家介绍了python Boltons库实用功能探索包含深度复制类型检查重试机制及数据结构转换实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01

最新评论