【Python】email:发送纯文本邮件

在这篇教程中,我们将一步步解析如何使用 Python 发送电子邮件。我们将用到 Python 中的 smtplibemail 库,它们为我们提供了与邮件服务器互动的功能。我们将逐步解释代码的每个部分,帮助你理解如何通过 Python 发送邮件。

导入必要的库

首先,我们需要导入一些 Python 库来处理邮件的发送过程。

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
  • smtplib 是 Python 标准库中的一个模块,用于与邮件服务器进行通信,发送邮件。
  • MIMEMultipartMIMEText 用于构建邮件内容,分别表示邮件的多部分结构和纯文本部分。

创建邮件发送类

为了方便管理,我们可以创建一个类 EmailSender,该类负责配置邮件发送的各种参数,并提供一个发送邮件的方法。

class EmailSender:
    def __init__(self, smtp_server: str, smtp_port: int, username: str, password: str):
        self.smtp_server = smtp_server
        self.smtp_port = smtp_port
        self.username = username
        self.password = password

__init__ 方法中,我们初始化了与邮件发送相关的四个参数:

  • smtp_server:邮件服务器的地址(例如,Gmail 的服务器是 smtp.gmail.com)。
  • smtp_port:邮件服务器的端口号(通常是 587,用于加密连接)。
  • usernamepassword:你的邮箱用户名和密码,用来登录邮件服务器。

创建邮件并发送

接下来,我们定义了一个方法 send_email,用于实际发送邮件。

def send_email(self, to_email: str, subject: str, body: str) -> bool:
    """发送邮件函数(简化版)"""

这个方法接受三个参数:

  • to_email:邮件的接收者邮箱地址。
  • subject:邮件的主题。
  • body:邮件的正文内容。

构建邮件内容

send_email 方法内部,我们首先创建了一个 MIMEMultipart 对象,用于表示邮件。然后,我们设置邮件的发件人、收件人和主题。

msg = MIMEMultipart()
msg['From'] = self.username
msg['To'] = to_email
msg['Subject'] = subject

接着,我们将邮件正文部分(即 body)作为纯文本添加到邮件中:

msg.attach(MIMEText(body, 'plain'))
  • MIMEText 用于处理邮件的正文部分。'plain' 表示我们使用纯文本格式来写邮件。

连接邮件服务器并发送邮件

然后,我们连接到邮件服务器并进行身份验证。我们使用 smtplib.SMTP 来创建一个 SMTP 客户端连接。

server = smtplib.SMTP(self.smtp_server, self.smtp_port)
server.starttls()  # 使用 TLS 加密
  • server.starttls() 启动 TLS 加密,这样就可以保证数据的安全传输。

接下来,我们使用 server.login() 方法登录到邮件服务器:

server.login(self.username, self.password)

登录后,我们可以用 server.sendmail() 来发送邮件:

server.sendmail(self.username, to_email, msg.as_string())
  • msg.as_string() 将邮件对象转换为字符串格式,方便发送。

最后,调用 server.quit() 关闭与服务器的连接:

server.quit()

错误处理

如果邮件发送过程中出现任何错误,我们使用 try...except 语句捕获异常并打印错误信息:

except Exception as e:
    print(f"发送邮件失败: {e}")
    return False

完整代码

下面是完整的代码,整合了以上的步骤:

import smtplib  # 导入用于发送邮件的 smtplib 模块  
from email.mime.multipart import MIMEMultipart  # 导入用于创建多部分邮件的 MIMEMultipart 类  
from email.mime.text import MIMEText  # 导入用于创建文本邮件的 MIMEText 类  

# 定义一个 EmailSender 类,用于封装发送邮件的功能  
class EmailSender:  
    # 初始化方法,接收 SMTP 服务器信息和用户凭证  
    def __init__(self, smtp_server: str, smtp_port: int, username: str, password: str):  
        # 设置 SMTP 服务器地址  
        self.smtp_server = smtp_server  
        # 设置 SMTP 服务器端口  
        self.smtp_port = smtp_port  
        # 设置 SMTP 用户名(通常是邮件地址)  
        self.username = username  
        # 设置 SMTP 密码  
        self.password = password  

    # 定义一个发送邮件的函数,返回值为布尔值表示成功与否  
    def send_email(self, to_email: str, subject: str, body: str) -> bool:  
        """发送邮件函数(简化版)"""  
        # 创建一个多部分的邮件对象  
        msg = MIMEMultipart()  
        # 设置发件人邮箱地址  
        msg['From'] = self.username  
        # 设置收件人邮箱地址  
        msg['To'] = to_email  
        # 设置邮件主题  
        msg['Subject'] = subject  

        # 将邮件正文部分附加到邮件对象中,正文内容为纯文本格式  
        msg.attach(MIMEText(body, 'plain'))  

        try:  
            # 连接到 SMTP 服务器  
            server = smtplib.SMTP(self.smtp_server, self.smtp_port)  
            server.starttls()  # 启用 TLS 加密以保护邮件通信  
            # 使用提供的用户名和密码登录到 SMTP 服务器  
            server.login(self.username, self.password)  
            # 发送邮件,msg.as_string() 将邮件对象转换为字符串  
            server.sendmail(self.username, to_email, msg.as_string())  
            server.quit()  # 发送完成后,显式调用 quit() 关闭与服务器的连接  
            print(f"邮件成功发送至 {to_email}")  # 输出成功消息  
            return True  # 返回成功标记  
        except Exception as e:  
            print(f"发送邮件失败: {e}")  # 输出错误消息  
            return False  # 返回失败标记

如何使用

假设你已经有了自己的邮件服务器地址、端口、用户名和密码(比如使用 Gmail),你可以像这样使用这个 EmailSender 类:

email_sender = EmailSender("smtp.gmail.com", 587, "[email protected]", "your_password")
email_sender.send_email("[email protected]", "邮件主题", "邮件正文内容")

获取QQ邮箱授权码

  1. 登录QQ邮箱:打开浏览器,登录你的QQ邮箱账户。
  2. 进入设置
  • 点击左上角的【设置】。
  • 选择【账号与安全】。
  1. 开启服务
  • 在【安全设置】中,找到 SMTP/IMAP服务
  • 点击开启,系统将提示生成 16位授权码
  1. 获取授权码
  • 服务开启后,将显示一串 16位的授权码,请复制并保存。
  • 注意:该授权码只显示一次,请妥善保管。

总结

通过以上的步骤,你应该能够使用 Python 发送电子邮件。我们通过逐步解析代码,讲解了如何建立邮件连接、构建邮件内容、发送邮件以及处理错误。如果你遇到问题,记得检查是否正确配置了 SMTP 服务器和登录凭据!

你可能感兴趣的:(python,linux,github)