Python小项目:基于tkinter开发邮件发送程序

发布时间:2024年01月05日

在这里插入图片描述

1 前言

在当今的数字化时代,电子邮件已成为了我们日常生活中不可或缺的一部分。无论是在私人生活还是商业领域,电子邮件的使用频率和重要性都不可低估。然而,对于经常需要发送大量邮件的人来说,手动一封一封地发送邮件可能变得非常繁琐和耗时。

因此,为了简化电子邮件发送流程,我开发了一个基于tkinter的Python小项目——邮件发送程序。利用该程序,您可以轻松快速地批量发送电子邮件,从而节省宝贵的时间和精力。

在文中,我将为您介绍这个邮件发送程序的开发过程以及其实际应用。我会逐步讲解程序的实现细节和关键功能,并提供详细的代码示例和操作指南,以确保您能够成功地使用和定制这个程序。

在这里插入图片描述

2 项目概述

在本章节中,我们将对基于tkinter开发的邮件发送程序进行项目概述。我们将介绍项目的目标、功能以及所使用的技术。

2.1 项目目标

邮件发送程序的主要目标是简化电子邮件发送的过程。本项目旨在提供一个用户友好的界面,通过减少用户的手动操作和自动化发送过程,简化电子邮件的发送流程。

2.2 功能列表

以下是邮件发送程序的主要功能列表:

  1. 提供一个直观的用户界面,使用户可以轻松输入发件人信息、收件人信息以及邮件内容。
  2. 支持用户导入收件人地址列表,以便轻松地将邮件发送给多个收件人。
  3. 使用安全的身份验证机制,确保用户的邮箱密码得到保护。
  4. 自动处理邮件的发送过程,包括建立与邮件服务器的连接和发送邮件。
  5. 提供错误处理和异常提示,以帮助用户识别和解决潜在的问题。
  6. 实现用户友好的界面,包括按钮、输入框和提示框,使用户操作更加方便和舒适。

2.3 技术概述

邮件发送程序是使用Python编程语言开发的。以下是项目中涉及的一些主要技术:

Python编程语言:Python是一种简单且强大的编程语言,适用于快速开发各种应用程序。本项目使用Python来实现整个邮件发送过程。

tkinter图形用户界面库:tkinter是Python标准库中的一个GUI工具包,用于创建用户友好的图形界面。用于邮件发送程序的界面设计和用户交互。

smtplib库:smtplib库是Python标准库中的一个用于发送电子邮件的模块。我们使用smtplib库来处理与邮件服务器的通信,建立连接和发送邮件。

在接下来的章节中,我们将深入探讨项目的安装、使用方法以及一些技巧和注意事项。让我们继续阅读,开始使用这个方便的邮件发送程序吧!

3 代码详解

在本章中,我们将深入了解基于tkinter开发的邮件发送程序的代码实现。我们将逐步解释主要函数和类的作用,以及它们在程序中的调用关系。

完整代码:

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

# 自定义异常类,用于处理收件人为空的情况
class EmptyRecipientError(Exception):
    pass

# 自定义异常类,用于处理无效收件人的情况
class InvalidRecipientError(Exception):
    pass

# 函数:发送邮件
def sendmail(res, sender_email, sender_name, recipients, subject, password):
    # 如果收件人为空,则抛出自定义的异常
    if not recipients:
        raise EmptyRecipientError("未找到收件人.")

    error_message = ""  # 存储发送失败的错误信息
    success_message = ""  # 存储成功发送的收件人信息

    # 遍历收件人列表
    for recipient_email in recipients:
        try:
            if "@" not in recipient_email:
                raise InvalidRecipientError(f"无效的收件人邮箱: {recipient_email}")

            # 创建邮件对象
            msg = MIMEText(res, 'html', 'utf-8')
            msg['From'] = formataddr([sender_name, sender_email])
            msg['To'] = recipient_email
            msg['Subject'] = subject

            # 发送邮件
            server = smtplib.SMTP_SSL('smtp.qq.com', 465)
            server.login(sender_email, password)
            server.sendmail(sender_email, recipient_email, msg.as_string())
            server.quit()

            # 发送成功,更新成功发送的收件人信息
            success_message += f"{recipient_email}, "
        except InvalidRecipientError as e:
            # 无效收件人,更新发送失败的错误信息
            error_message += f"无效的收件人: {str(e)}\n"
        except Exception as e:
            # 发送邮件异常,更新发送失败的错误信息
            error_message += f"发送邮件至 {recipient_email} 时出错: {str(e)}\n"

    # 根据发送结果显示相应的提示信息
    if error_message and success_message:
        messagebox.showwarning("警告", "部分邮件发送失败。\n" + error_message + "\n成功发送邮件至以下收件人:" + success_message)
    elif error_message:
        messagebox.showerror("错误", "邮件发送失败。\n" + error_message)
    elif success_message:
        messagebox.showinfo("成功", "成功发送邮件至以下收件人:" + success_message)
    else:
        messagebox.showerror("错误", "未找到收件人。")

# 函数:发送邮件(界面部分)
def send_mail_with_tkinter():
    window = tk.Tk()
    window.title("QQ邮箱发送器")  # 设置窗口标题
    window.geometry("800x700")  # 设置窗口尺寸为800x600

    # 创建并显示各个控件
    label_sender_email = tk.Label(window, text="发件人邮箱(仅支持QQ邮箱):")
    label_sender_email.pack()
    entry_sender_email = tk.Entry(window)
    entry_sender_email.pack()

    label_sender_name = tk.Label(window, text="发件人名称:")
    label_sender_name.pack()
    entry_sender_name = tk.Entry(window)
    entry_sender_name.pack()

    label_recipients = tk.Label(window, text="收件人邮箱(每行一个):")
    label_recipients.pack()
    entry_recipients = tk.Text(window, height=10, width=50)
    entry_recipients.pack()

    label_subject = tk.Label(window, text="邮件主题:")
    label_subject.pack()
    entry_subject = tk.Entry(window)
    entry_subject.pack()

    label_password = tk.Label(window, text="发件人授权码:")
    label_password.pack()
    entry_password = tk.Entry(window, show="*")
    entry_password.pack()

    label_content = tk.Label(window, text="邮件内容:")
    label_content.pack()
    text = tk.Text(window, height=20, width=50)
    text.pack()

    # “发送邮件”按钮的回调函数
    def send_email():
        res = text.get("1.0", tk.END)  # 获取邮件内容
        sender_email = entry_sender_email.get()  # 获取发件人邮箱
        sender_name = entry_sender_name.get()  # 获取发件人名称
        subject = entry_subject.get()  # 获取邮件主题
        password = entry_password.get()  # 获取发件人密码

        recipients = entry_recipients.get("1.0", tk.END).strip().splitlines()  # 获取收件人邮箱,每行一个,转为列表

        try:
            # 调用发送邮件函数
            sendmail(res, sender_email, sender_name, recipients, subject, password)
        except EmptyRecipientError:
            messagebox.showerror("错误", "收件人不能为空.")
        
    button_send = tk.Button(window, text="发送邮件", command=send_email)  # 创建“发送邮件”按钮
    button_send.pack()

    window.mainloop()

# 调用函数开始邮件发送界面
send_mail_with_tkinter()

以上代码实现了一个简单的邮件发送界面,使用了tkinter库创建用户界面和控件。

这个程序的主要组成部分如下:

send_mail_with_tkinter函数

该函数用于创建并显示邮件发送界面。它的主要步骤如下:

  1. 创建一个tkinter窗口,并设置窗口的标题为"QQ邮箱发送器",尺寸为800x700。
  2. 创建各个控件的标签和输入框,用于输入发件人的邮箱、名称,收件人的邮箱列表,邮件主题,发件人的授权码,以及邮件的内容。
  3. 创建一个名为"发送邮件"的按钮,并将其回调函数设置为send_email。
  4. 进入tkinter的主事件循环,等待用户操作。

回调函数send_email

该函数用于获取用户在界面中输入的发件人信息、收件人信息、邮件主题等,并调用send_mail函数来发送邮件。

该函数的主要步骤如下:

  1. 从界面中获取发件人的邮箱、名称,收件人的邮箱列表,邮件主题,授权码和邮件的内容。
  2. 尝试调用send_mail函数来发送邮件,并捕获可能抛出的异常EmptyRecipientError。
  3. 如果抛出了EmptyRecipientError异常,则弹出一个错误消息框,提醒用户收件人不能为空。

调用send_mail_with_tkinter函数

通过调用send_mail_with_tkinter函数,程序将开始邮件发送界面。用户可以在这个界面中输入相关信息,然后点击"发送邮件"按钮来发送邮件。如果发件人信息、收件人信息、发送内容等不正确,将会显示相应的错误提示框。


这个程序的核心是send_email函数,它调用了send_mail函数来实际发送邮件。以下是send_mail函数的实现:

def send_mail(sender_email, sender_name, recipients, subject, password, content):
    try:
        message = MIMEText(content, "plain", "utf-8")  # 创建邮件正文对象
        message["From"] = formataddr((sender_name, sender_email))  # 设置发件人
        message["Subject"] = subject  # 设置邮件主题

        # 连接SMTP服务器并发送邮件
        with smtplib.SMTP_SSL("smtp.qq.com", 465) as server:
            server.login(sender_email, password)
            server.sendmail(sender_email, recipients, message.as_string())

        messagebox.showinfo("成功", "邮件发送成功")  # 弹出提示框,显示发送成功信息
    except Exception:
        messagebox.showerror("错误", "邮件发送失败")  # 弹出提示框,显示发送失败信息

send_mail函数的主要步骤如下:

  1. 创建一个MIMEText对象作为邮件正文,其中包含内容、格式和编码信息。
  2. 设置发件人的名称和邮箱地址。
  3. 设置邮件的主题。
  4. 使用SMTP_SSL连接QQ邮箱的SMTP服务器,端口号为465。
  5. 使用提供的发件人邮箱和授权码登录SMTP服务器。
  6. 使用sendmail方法发送邮件,其中sender_email是发件人邮箱,recipients是收件人邮箱列表,message.as_string()将邮件正文转化为字符串形式。
  7. 如果发送成功,弹出一个提示框,显示发送成功的信息;如果发送失败,弹出一个错误提示框,显示发送失败的信息。

请注意,在这个程序中使用了tkinter库来创建用户界面和控件,messagebox模块用于显示提示框。同时,使用了email和smtplib库来处理邮件相关的操作。

通过以上的代码,您可以创建一个简单的邮件发送界面,并实现发送邮件的功能。

4 用户操作手册

步骤1:安装依赖库

在开始使用该程序之前,请确保已安装以下依赖库:

  1. smtplib
  2. tkinter
  3. email.mime.text
  4. tkinter.messagebox
  5. email.utils

可以使用以下命令使用pip安装这些依赖库:

pip install smtplib
pip install tkinter

步骤2:登录QQ邮箱开启SMPT服务(很重要)

登录QQ邮箱→点击“设置”→点击“账号”→下滑找到“POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务”

在这里插入图片描述

如果未开服务需要点击开启,点击“管理服务”

在这里插入图片描述

点击“生成授权码”然后按照提示用注册的手机号给腾讯发送短信,并记住接下来生成的授权码!

步骤3:填写发件人信息

  1. 程序窗口将显示发件人信息的输入框。
  2. 在"发件人邮箱"输入框中,输入邮箱地址。
  3. 在"发件人姓名"输入框中,输入姓名。
  4. 在"授权码"输入框中,输入邮箱授权码。请注意,密码将被以安全的方式处理。

在这里插入图片描述

步骤4:填写收件人信息

  1. 单击"选择收件人文件"按钮来选择一个包含收件人邮箱地址的文本文件。每行一个邮箱地址。
  2. 可以从项目文件夹中选择收件人文件,或在文件选择器中手动导航到目标文件。
  3. 选择完成后,程序将加载并显示文件的路径。

步骤5:填写邮件信息

  1. 在"邮件主题"输入框中,输入要发送的邮件的主题。
  2. 在"邮件正文"输入框中,输入邮件的内容。

步骤6:发送邮件

  1. 确保已填写所有必要信息。
  2. 单击"发送邮件"按钮,程序将验证输入并尝试发送邮件。
  3. 如果出现错误或异常,程序将显示错误消息框来指示问题所在。
  4. 如果一切正常,程序将显示成功消息框以确认邮件发送成功。

注意事项

? 请确保网络连接正常,以便能够连接到邮件服务器。
? 如果SMTP服务器需要特定的端口号,请在代码中进行相关设置。
? 在某些情况下,邮件可能会被识别为垃圾邮件。请确保邮件是合法且符合接收者的期望,以避免此类问题。
? 如果遇到任何问题或错误,请尝试重新启动程序并核对输入信息。
? 务必保护好邮箱授权码,避免泄露给他人。

5 结语

总结起来,以上代码展示了一个使用Python和tkinter库创建的简单邮件发送界面。该界面允许用户输入发件人的邮箱、名称,收件人的邮箱列表,邮件主题,发件人的授权码以及邮件内容,并通过调用send_mail函数发送邮件。

通过这个简单的界面,用户可以方便地发送邮件,并在发送成功或失败时得到相应的提示。需要注意的是,为了确保功能正常运行,使用的发件人邮箱必须是QQ邮箱。

这个程序使用了常用的Python库,如tkinter用于创建用户界面和控件,email用于处理邮件相关操作,以及smtplib用于连接SMTP服务器并发送邮件。

通过这个示例,您可以进一步学习和扩展,并根据具体需求进行适当的修改和优化。无论是为个人使用还是作为基础功能添加到其他项目中,这个邮件发送界面都可以帮助您更轻松地发送邮件。

希望这个示例对您有所帮助,如果需要进一步的帮助或有其他问题,请随时提问。祝您在使用Python和邮件发送方面取得成功!

在这里插入图片描述

文章来源:https://blog.csdn.net/weixin_46043195/article/details/132431751
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。