Python发送多封邮件出错时,继续发送后面的邮件

在实际应用场景中,我们经常遇到需要通过电子邮件发送多封邮件的情况。然而,当发送邮件过程中出现错误时,程序通常会中断。这时,我们需要一种方法来处理错误,并继续发送后面的邮件。本文将介绍如何在Python中实现这个功能。

使用smtplib库发送邮件

在Python中,我们可以使用smtplib库来发送邮件。smtplib库提供了一个SMTP类,用于连接到SMTP服务器并发送邮件。下面是一个发送邮件的基本示例:

import smtplib

def send_email(sender, receiver, subject, message):
    # 设置SMTP服务器和端口
    smtp_server = "smtp.example.com"
    smtp_port = 587

    # 创建SMTP对象
    smtp = smtplib.SMTP(smtp_server, smtp_port)

    # 连接到SMTP服务器
    smtp.starttls()

    # 登录SMTP服务器
    smtp.login(sender, "password")

    # 创建邮件
    email_message = f"Subject: {subject}\n\n{message}"

    # 发送邮件
    smtp.sendmail(sender, receiver, email_message)

    # 退出SMTP服务器
    smtp.quit()

上述代码中,send_email函数接受发送者、接收者、主题和消息作为参数,并使用SMTP类发送邮件。

处理发送邮件的错误

当发送多封邮件时,可能会遇到各种错误,例如SMTP服务器连接错误、无效的邮件地址等。为了处理这些错误并继续发送后面的邮件,我们可以使用try-except语句块来捕捉异常。下面是一个示例:

import smtplib

def send_email(sender, receiver, subject, message):
    try:
        # 设置SMTP服务器和端口
        smtp_server = "smtp.example.com"
        smtp_port = 587

        # 创建SMTP对象
        smtp = smtplib.SMTP(smtp_server, smtp_port)

        # 连接到SMTP服务器
        smtp.starttls()

        # 登录SMTP服务器
        smtp.login(sender, "password")

        # 创建邮件
        email_message = f"Subject: {subject}\n\n{message}"

        # 发送邮件
        smtp.sendmail(sender, receiver, email_message)

        # 退出SMTP服务器
        smtp.quit()

    except smtplib.SMTPException as e:
        print(f"Failed to send email: {e}")

    except Exception as e:
        print(f"An error occurred: {e}")

    else:
        print("Email sent successfully!")

在上述代码中,我们使用try-except语句块来捕捉可能发生的SMTP异常。如果捕获到SMTP异常,我们可以选择打印错误信息或采取其他适当的操作。如果捕获到除SMTP异常以外的其他异常,我们也可以处理它们。

继续发送后面的邮件

要继续发送后面的邮件,我们可以在捕获异常后添加适当的处理逻辑。例如,我们可以记录发送失败的邮件并继续发送后面的邮件。下面是一个示例:

import smtplib

def send_email(sender, receiver, subject, message):
    try:
        # 设置SMTP服务器和端口
        smtp_server = "smtp.example.com"
        smtp_port = 587

        # 创建SMTP对象
        smtp = smtplib.SMTP(smtp_server, smtp_port)

        # 连接到SMTP服务器
        smtp.starttls()

        # 登录SMTP服务器
        smtp.login(sender, "password")

        # 创建邮件
        email_message = f"Subject: {subject}\n\n{message}"

        # 发送邮件
        smtp.sendmail(sender, receiver, email_message)

        # 退出SMTP服务器
        smtp.quit()

    except smtplib.SMTPException as e:
        print(f"Failed to send email: {e}")
        # 记录发送失败的邮件

    except Exception as e:
        print(f"An error occurred: {e}")
        # 记录发送失败的邮件

    else:
        print("Email sent successfully!")
        # 记录发送成功的邮件

在上述代码中,我们在捕获异常后添加了注释,表示我们可以在这里添加代码来记录发送失败的邮件。这样,即使发送邮件出现错误,我们仍然可以继续发送后面的邮件。