如何使用 Python 搭建一个简单的 GUI 邮件发送应用:从代码到实际应用

引言

接上文SMTP发送邮件的文章轻松实现邮件自动发送!掌握 SMTP 邮件发送技巧-优快云博客制作了一款相关GUI的应用,服务于计算机 0基础 的朋友。

邮件作为日常交流的重要工具,尤其在工作环境中扮演着不可或缺的角色。虽然大部分人都熟悉通过邮件客户端(如 Outlook、Gmail)来发送邮件,但对于没有计算机基础的用户来说,操作这些复杂的工具可能让他们感到困惑。

本文将为你展示如何利用 Python 和 Tkinter,创建一个简单的图形化用户界面(GUI),让用户能够轻松发送电子邮件。我们将从基础的代码入手,逐步提升,最终实现一个适用于初学者或没有计算机基础的用户的邮件发送工具。

展示:

填写发件人邮箱 与 邮箱授权码(授权码是什么请看下面介绍)

填写收件人(多个收件人用英文的;分隔)

填写邮件主题

填写邮件内容

点击发送邮件即可发送

工具已经打包完成!!!需要的兄弟们私我,直接发工程!!!

exe文件可以直接运行!!!


第一步:前提准备

在开始之前,你需要做以下准备工作:

如果您是只想使用,不想了解GUI制作,请直接看  2.QQ 邮箱配置,如果是其它邮箱找对应授权码就可以!!!

  1. Python 环境:确保你已经安装了 Python 3.x,并且已安装 tkintersmtplib 库。tkinter 是 Python 的标准库之一,通常随 Python 安装一起提供,因此不需要单独安装。如果你使用的是标准的 Python 发行版,可以跳过这一步。

  2. QQ 邮箱配置:如果你打算通过 QQ 邮箱发送邮件,请确保你已经在 QQ 邮箱中开启了“SMTP 服务”并获取了授权码。授权码用于代替密码进行邮箱的自动登录。


第二步:核心功能代码解析

在本教程中,我们将实现以下几个功能:

  • 提供一个简单的邮件发送界面,用户可以输入发件人邮箱、授权码、收件人邮箱、邮件主题和内容。
  • 点击“发送邮件”按钮后,程序将自动连接到 QQ 邮箱的 SMTP 服务器,通过 SSL 加密发送邮件。

代码如下所示:

import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
import tkinter as tk
from tkinter import messagebox

# 邮件发送函数
def send_email():
    try:
        my_sender = sender_entry.get()  # 获取发件人邮箱

        my_pass = pass_entry.get()  # 获取授权码

        my_user = recipients_entry.get().split(';')  # 获取收件人邮箱,多个收件人用分号分隔

        subject = subject_entry.get()  # 获取邮件主题
        body = body_text.get("1.0", tk.END)  # 获取邮件内容

        msg = MIMEText(body, 'plain', 'utf-8')
        msg['From'] = formataddr(["Sender", my_sender])
        msg['To'] = ", ".join(my_user)
        msg['Subject'] = subject

        # 连接QQ邮箱的SMTP服务器
        server = smtplib.SMTP_SSL("smtp.qq.com", 465)
        server.login(my_sender, my_pass)
        server.sendmail(my_sender, my_user, msg.as_string())
        server.quit()

        # 邮件发送成功后弹出提示框
        messagebox.showinfo("成功", "邮件发送成功")
    except Exception as e:
        # 出现错误时弹出错误提示框
        messagebox.showerror("失败", f"邮件发送失败: {e}")

# 创建登录窗口
def open_login_window():
    global login_window
    login_window = tk.Tk()
    login_window.title("邮箱信息")
    login_window.geometry("300x200")

    # 发件人邮箱
    sender_label = tk.Label(login_window, text="发件人邮箱:")
    sender_label.pack(pady=5)
    global sender_entry
    sender_entry = tk.Entry(login_window)
    sender_entry.pack(pady=5)

    # 授权码
    pass_label = tk.Label(login_window, text="邮箱授权码:")
    pass_label.pack(pady=5)
    global pass_entry
    pass_entry = tk.Entry(login_window, show="*")
    pass_entry.pack(pady=5)

    # 确定按钮
    def on_login():
        login_window.withdraw()  # 隐藏登录窗口
        open_main_window()

    login_button = tk.Button(login_window, text="确定", command=on_login)
    login_button.pack(pady=10)

    login_window.mainloop()

# 创建主窗口(邮件发送页面)
def open_main_window():
    global main_window
    main_window = tk.Tk()
    main_window.title("邮件发送")
    main_window.geometry("400x400")

    # 收件人
    recipients_label = tk.Label(main_window, text="收件人(多个收件人用(英文;)分隔):")
    recipients_label.pack(pady=5)
    global recipients_entry
    recipients_entry = tk.Entry(main_window)
    recipients_entry.pack(pady=5)

    # 邮件主题
    subject_label = tk.Label(main_window, text="邮件主题:")
    subject_label.pack(pady=5)
    global subject_entry
    subject_entry = tk.Entry(main_window)
    subject_entry.pack(pady=5)

    # 邮件内容
    body_label = tk.Label(main_window, text="邮件内容:")
    body_label.pack(pady=5)
    global body_text
    body_text = tk.Text(main_window, height=10, width=40)
    body_text.pack(pady=5)

    # 按钮框架,确保按钮在同一行
    button_frame = tk.Frame(main_window)
    button_frame.pack(pady=10)

    # 发送按钮
    send_button = tk.Button(button_frame, text="发送邮件", command=send_email)
    send_button.pack(side=tk.LEFT, padx=10)

    # 返回按钮
    def go_back():
        main_window.withdraw()  # 隐藏当前窗口
        login_window.deiconify()  # 显示登录窗口

    back_button = tk.Button(button_frame, text="返回", command=go_back)
    back_button.pack(side=tk.LEFT)

    main_window.mainloop()

# 运行程序
open_login_window()

第三步:程序解析

  1. GUI 界面设计

    • 使用 Tkinter 库设计了一个简单的用户界面,包含两个窗口:
      • 登录窗口:用户输入发件人邮箱和授权码。
      • 邮件发送窗口:用户输入收件人邮箱、邮件主题和内容。
    • 我们通过 pack 方法将控件逐步添加到窗口中,确保界面的布局简洁而易于使用。
  2. 邮件发送逻辑

    • 用户输入邮箱、授权码、收件人信息、邮件主题和内容后,点击“发送邮件”按钮。
    • 程序使用 smtplib 模块连接到 QQ 邮箱的 SMTP 服务器,登录后发送邮件。
    • 邮件发送成功或失败后,程序会弹出提示框,反馈操作结果。

第四步:如何提高邮件发送应用的实用性

为了让这个应用更具实用性,以下是一些可行的扩展功能:

  1. 附件支持:增加附件上传和发送功能,支持发送图片、文档等文件。
  2. 多邮箱支持:支持多个发件人邮箱的切换,增加更多的邮箱服务(如 Gmail)。
  3. 定时发送功能:添加定时发送邮件的功能,用户可以指定邮件发送的时间。

拓展内容在评论相关功能超过10人后更新!!!


结语

通过 Python 和 Tkinter,我们能够快速搭建一个图形化界面的邮件发送工具。对于没有计算机基础的用户,这种简易的应用程序无疑大大简化了他们的操作过程。随着 Python 编程技能的逐步提升,您可以继续在此基础上增加更多功能,使其更符合实际使用需求。

如果你对 Python 编程感兴趣,或者希望了解更多关于 Tkinter 的教程,欢迎关注我的博客或加入讨论!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值