SMTPlib 模块:使用python 发送电子邮件
1. 简介
python 的 smtplib
模块是一个用于发送电子邮件的库,它提供了与 SMTP(简单邮件传输协议)服务器交互的功能。通过这个模块,开发者可以轻松地将电子邮件发送到指定的收件人。
2. 流程
使用 smtplib
发送电子邮件的基本流程包括以下几个步骤:
- 连接到 SMTP 服务器:首先需要与邮件服务器建立连接。
- 登录认证:使用有效的用户名和密码进行登录。
- 构造邮件内容:创建邮件内容,包括文本、主题等。
- 发送邮件:通过 SMTP 服务器发送邮件。
- 断开连接:邮件发送完成后,关闭与服务器的连接。
3. 方法讲解
smtplib
模块提供了一系列方法来实现与 SMTP 服务器的交互。以下是一些核心方法及其用途:
smtplib.SMTP
这是 smtplib
的主类,用于创建 SMTP 对象并初始化与 SMTP 服务器的连接。
- 语法:
smtplib.SMTP(host[, port[, local_hostname]])
- 参数:
host
:SMTP 服务器的域名或IP地址。port
:SMTP 服务器的端口号,默认为 25。local_hostname
:(可选)本地主机名,如果省略,将使用主机名。
smtplib.SMTP_SSL
用于创建一个直接使用 SSL 加密的 SMTP 对象。
- 语法:smtplib.SMTP_SSL(host[, port[, local_hostname]])
- 参数:
host
:SMTP 服务器的域名或IP地址。port
:SMTP 服务器的端口号,默认为 25。local_hostname
:(可选)本地主机名,如果省略,将使用主机名。
SMTP.connect
用于建立到 SMTP 服务器的网络连接。
- 语法:
SMTP.connect(host[, port])
- 参数:
host
:SMTP 服务器的域名或IP地址。port
:SMTP 服务器的端口号。
SMTP.starttls
启动与 SMTP 服务器的 TLS(传输层安全性)会话,确保数据加密传输。
- 语法:
SMTP.starttls()
- 返回:无。
SMTP.login
用于登录到 SMTP 服务器。
- 语法:
SMTP.login(user, password)
- 参数:
user
:SMTP 服务器的用户名。password
:与用户名关联的密码。
SMTP.sendmail
用于发送邮件。
- 语法:
SMTP.sendmail(from_addr, to_addrs, msg)
- 参数:
from_addr
:邮件发送者的地址。to_addrs
:一个包含邮件接收者地址的列表。msg
:邮件内容,通常是email.message.Message
或其子类的实例。
SMTP.quit
用于断开与 SMTP 服务器的连接,并安全退出。
- 语法:
SMTP.quit()
- 返回:无。
4. 示例
以下是一个使用 smtplib
发送简单文本邮件的示例:
import smtplib
from email.mime.text import MIMEText
from email.header import Header
# 邮件发送者和接收者
sender = 'your_email@example.com'
receiver = 'recipient_email@example.com'
# SMTP 服务器地址和端口
smtp_server = 'smtp.example.com'
port = 25
# 创建一个 MIMEText 对象,用于构造邮件内容
message = MIMEText('This is the email body.', 'plain', 'utf-8')
message['From'] = Header("Your Name", 'utf-8')
message['To'] = Header("Recipient Name", 'utf-8')
message['Subject'] = Header('Test email', 'utf-8')
# 连接到 SMTP 服务器
server = smtplib.SMTP(smtp_server, port)
# 登录
server.login(sender, 'your_password')
# 发送邮件
server.sendmail(sender, [receiver], message.as_string())
# 断开连接
server.quit()
5. 关于 email.mime
smtplib只负责发送邮件,而构造邮件内容需要用到email.mime
。
email.mime
是 Python email
库的一部分,用于创建不同类型的邮件内容。以下是一些常用的 email.mime
类:
MIMEText
:用于创建纯文本邮件。例如文本,html等MIMEMultipart
:用于创建包含多个部分(如文本和附件)的复合邮件。MIMEApplication
:用于创建附件。
MIMEMultipart
就相当于一个容器,在具有基础属性和方法的同时,它还能将其他类的实例组合起来,就有点类似与vue的组件那样,通过搭积木的方式构建复杂的邮件内容。
示例:发送带有附件的邮件
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
# 创建一个 MIMEMultipart 对象
message = MIMEMultipart()
# 添加邮件头部
message['From'] = 'your_email@example.com'
message['To'] = 'recipient_email@example.com'
message['Subject'] = 'Test email with attachment'
# 添加邮件正文
body = MIMEText('This is the email body.', 'plain', 'utf-8')
message.attach(body)
# 添加附件
# 打开附件文件
with open('example.txt', 'rb') as file:
# 创建一个 MIMEApplication 对象,用于添加附件
attachment = MIMEApplication(file.read(), _subtype='octet-stream')
attachment.add_header('Content-Disposition', 'attachment', filename='example.txt')
attachment.add_header('Content-Type', 'application/octet-stream')
# 将附件附加到邮件中
message.attach(attachment)
# 连接到 SMTP 服务器
server = smtplib.SMTP('smtp.example.com', 25)
server.login('your_email@example.com', 'your_password')
# 发送邮件
server.sendmail('your_email@example.com', 'recipient_email@example.com', message.as_string())
# 断开连接
server.quit()
值得注意的是:不同的邮件服务器,发送邮件的协议和端口号可能不同,需要根据实际情况进行修改。
2024/7/24