使用Python構(gòu)建帶GUI的郵件自動發(fā)送工具
1. 項(xiàng)目概述
該程序是一個基于 wxPython 的 GUI 工具,允許用戶通過直觀的界面輸入郵件內(nèi)容、添加收件人、抄送、正文,并自動從指定文件夾中提取附件,最后使用 SMTP 發(fā)送郵件。
核心功能:
- 用戶界面:基于 wxPython 構(gòu)建,包含郵件標(biāo)題、正文、附件列表等組件。
- 配置管理:自動加載并保存用戶的郵件配置,如 SMTP 服務(wù)器、發(fā)件人郵箱等。
- 附件自動匹配:程序可以自動查找當(dāng)前周五的文件夾,并將其中的文件作為郵件附件。
- 郵件發(fā)送:使用 Python 的
smtplib發(fā)送郵件,并支持 SSL 加密。
2. 代碼結(jié)構(gòu)分析
該程序的主邏輯封裝在 EmailSenderFrame 類中,繼承自 wx.Frame,負(fù)責(zé) GUI 組件的創(chuàng)建和事件綁定。
(1)構(gòu)造函數(shù):初始化窗口與加載配置
class EmailSenderFrame(wx.Frame):
def __init__(self, parent, title):
super(EmailSenderFrame, self).__init__(parent, title=title, size=(800, 600))
# 默認(rèn)附件文件夾路徑
self.attachment_base_dir = r"c:\mydocs\每周工作"
# 創(chuàng)建配置文件路徑
self.config_file = os.path.join(os.path.expanduser("~"), "email_sender_config.json")
# 默認(rèn)郵箱設(shè)置
self.smtp_server = "smtp.exmail.qq.com"
self.smtp_port = 465
self.from_email = ""
self.password = ""
self.use_ssl = True
# 創(chuàng)建界面
self.create_ui()
# 加載之前保存的配置
self.load_config()
# 自動查找當(dāng)前周五的附件
self.update_attachments()
# 顯示窗口
self.Centre()
self.Show()
關(guān)鍵點(diǎn)解析
self.attachment_base_dir指定了附件存儲的默認(rèn)路徑。self.config_file定義了配置文件路徑,方便持久化用戶設(shè)置。self.smtp_server、self.smtp_port以及self.from_email等變量存儲郵件服務(wù)器信息,默認(rèn)使用騰訊企業(yè)郵箱。create_ui()方法負(fù)責(zé)界面布局。load_config()讀取本地保存的用戶配置,避免每次運(yùn)行都重新輸入信息。update_attachments()自動查找當(dāng)前周五的附件文件。
(2)創(chuàng)建 UI 界面
def create_ui(self):
panel = wx.Panel(self)
vbox = wx.BoxSizer(wx.VERTICAL)
# 郵件標(biāo)題
subject_box = wx.BoxSizer(wx.HORIZONTAL)
subject_label = wx.StaticText(panel, label="標(biāo)題:")
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)
# 省略部分代碼...
# 設(shè)置布局
panel.SetSizer(vbox)
關(guān)鍵點(diǎn)解析
- 采用
wx.BoxSizer(wx.VERTICAL)創(chuàng)建垂直布局,保持界面整潔。 - 使用
wx.TextCtrl作為輸入框,并綁定wx.StaticText作為標(biāo)簽。 - 采用
proportion=1使輸入框占據(jù)界面的大部分空間,方便用戶輸入郵件信息。
(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)
關(guān)鍵點(diǎn)解析
- 讀取
email_sender_config.json文件,恢復(fù)上次保存的郵件設(shè)置。 - 采用
json.load(f)解析 JSON 數(shù)據(jù)并填充界面組件。 - 如果
attachment_base_dir存在,則恢復(fù)該目錄,確保附件路徑有效。
(4)獲取當(dāng)前周五的文件夾路徑
def get_this_friday_folder(self):
"""獲取當(dāng)前選擇的文件夾路徑"""
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
關(guān)鍵點(diǎn)解析
self.attachment_base_dir設(shè)定默認(rèn)的工作文件夾,該路徑可以通過 UI 進(jìn)行調(diào)整。- 使用
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 列表
關(guān)鍵點(diǎn)解析
glob.glob(os.path.join(folder, "*"))獲取所有文件路徑。self.attach_list.Set(files)直接將文件路徑添加到wx.ListBox組件中,方便用戶查看附件。
3. 總結(jié)
本項(xiàng)目基于 wxPython 實(shí)現(xiàn)了一個郵件發(fā)送 GUI 工具,整合了 配置管理、自動查找附件、郵件發(fā)送 等功能。通過 wxPython 提供的 UI 組件,用戶可以直觀地輸入郵件信息,并快速附加文件進(jìn)行發(fā)送。
技術(shù)要點(diǎn)回顧
- wxPython 用于 GUI 構(gòu)建,提供直觀的郵件編輯界面。
- JSON 配置管理 讓程序具備持久化存儲功能,提升用戶體驗(yàn)。
- 自動附件匹配 通過
glob查找文件,提高效率。 - SMTP 發(fā)送郵件 結(jié)合
smtplib實(shí)現(xiàn)郵件投遞,支持 SSL 加密。
本代碼適用于自動發(fā)送周報、批量郵件處理等應(yīng)用場景,并可進(jìn)一步擴(kuò)展。
運(yùn)行結(jié)果

以上就是使用Python構(gòu)建帶GUI的郵件自動發(fā)送工具的詳細(xì)內(nèi)容,更多關(guān)于Python GUI郵件發(fā)送工具的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
解決Python保存文件名太長OSError: [Errno 36] File
這篇文章主要介紹了解決Python保存文件名太長OSError: [Errno 36] File name too lon問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-05-05
python分塊讀取大數(shù)據(jù),避免內(nèi)存不足的方法
今天小編就為大家分享一篇python分塊讀取大數(shù)據(jù),避免內(nèi)存不足的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12
Python異常繼承關(guān)系和自定義異常實(shí)現(xiàn)代碼實(shí)例
這篇文章主要介紹了Python異常繼承關(guān)系和自定義異常實(shí)現(xiàn)代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-02-02
Pytorch保存模型用于測試和用于繼續(xù)訓(xùn)練的區(qū)別詳解
今天小編就為大家分享一篇Pytorch保存模型用于測試和用于繼續(xù)訓(xùn)練的區(qū)別詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01
Python正則表達(dá)式中的量詞符號與組問題小結(jié)
這篇文章主要介紹了Python正則表達(dá)式中的量詞符號與組問題小結(jié),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-08-08

