5人参与 • 2025-03-09 • Python
该程序是一个基于 wxpython 的 gui 工具,允许用户通过直观的界面输入邮件内容、添加收件人、抄送、正文,并自动从指定文件夹中提取附件,最后使用 smtp 发送邮件。
smtplib
发送邮件,并支持 ssl 加密。该程序的主逻辑封装在 emailsenderframe
类中,继承自 wx.frame
,负责 gui 组件的创建和事件绑定。
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_server
、self.smtp_port
以及 self.from_email
等变量存储邮件服务器信息,默认使用腾讯企业邮箱。create_ui()
方法负责界面布局。load_config()
读取本地保存的用户配置,避免每次运行都重新输入信息。update_attachments()
自动查找当前周五的附件文件。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
使输入框占据界面的大部分空间,方便用户输入邮件信息。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
存在,则恢复该目录,确保附件路径有效。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()
确保路径有效,否则弹出错误提示框。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
组件中,方便用户查看附件。本项目基于 wxpython
实现了一个邮件发送 gui 工具,整合了 配置管理、自动查找附件、邮件发送 等功能。通过 wxpython
提供的 ui 组件,用户可以直观地输入邮件信息,并快速附加文件进行发送。
技术要点回顾
glob
查找文件,提高效率。smtplib
实现邮件投递,支持 ssl 加密。本代码适用于自动发送周报、批量邮件处理等应用场景,并可进一步扩展。
以上就是使用python构建带gui的邮件自动发送工具的详细内容,更多关于python gui邮件发送工具的资料请关注代码网其它相关文章!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论