SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)是一种用于从发送方邮件服务器传输电子邮件到接收方邮件服务器的协议。Python 的 smtplib 库提供了发送电子邮件的功能。本章将详细介绍如何使用 Python3 的 smtplib 和 email 库来发送电子邮件。
使用 smtplib 发送邮件
导入必要的库
首先,你需要导入 smtplib 库以及 email 库中的相关模块:
import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart
创建 SMTP 对象
接下来,创建一个 SMTP 对象,并连接到你的邮件服务器。这里以 Gmail 邮件服务器为例:
smtp_server = 'smtp.gmail.com' smtp_port = 587 smtp_user = 'your_email@gmail.com' smtp_password = 'your_password' server = smtplib.SMTP(smtp_server, smtp_port) server.starttls() # 启动TLS加密 server.login(smtp_user, smtp_password)
构建邮件内容
使用 MIMEMultipart 类构建邮件对象,然后添加邮件头和正文:
msg = MIMEMultipart() msg['From'] = smtp_user msg['To'] = 'recipient_email@example.com' msg['Subject'] = '主题:测试邮件' body = '这是邮件正文。' msg.attach(MIMEText(body, 'plain'))
发送邮件
将邮件内容通过 SMTP 对象发送出去:
text = msg.as_string() server.sendmail(smtp_user, 'recipient_email@example.com', text) server.quit()
处理异常情况
发送邮件时可能会遇到各种问题,如网络问题、登录失败等。你可以通过捕获异常来处理这些问题:
try:
server.starttls()
server.login(smtp_user, smtp_password)
server.sendmail(smtp_user, 'recipient_email@example.com', text)
except Exception as e:
print(f"发送邮件时发生错误:{e}")
finally:
server.quit()使用第三方库简化操作
除了标准库之外,还可以使用第三方库来简化发送邮件的过程。例如,yagmail 是一个非常方便的库,可以简化 SMTP 操作:
安装 yagmail
pip install yagmail
发送邮件
使用 yagmail 发送邮件:
import yagmail
yag = yagmail.SMTP(smtp_user, smtp_password)
yag.send(
to='recipient_email@example.com',
subject='主题:测试邮件',
contents='这是邮件正文。'
)高级功能
添加附件
使用 email 库中的 MIMEBase 类来添加附件:
// www.javascriptcn.com code example
from email.mime.base import MIMEBase
from email import encoders
filename = "example.txt"
attachment = open(filename, "rb")
part = MIMEBase('application', 'octet-stream')
part.set_payload((attachment).read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', "attachment; filename= %s" % filename)
msg.attach(part)HTML 邮件
如果你希望发送带有 HTML 内容的邮件,可以使用 MIMEText 的 html 参数:
// www.javascriptcn.com code example html_body = """ <html> <body> <p>这是一封HTML格式的邮件。</p> </body> </html> """ msg.attach(MIMEText(html_body, 'html'))
多部分邮件
多部分邮件可以同时包含文本和附件,甚至可以包含多个附件:
// www.javascriptcn.com code example
msg = MIMEMultipart('alternative')
msg.attach(MIMEText('这是纯文本内容', 'plain'))
msg.attach(MIMEText(html_body, 'html'))
# 添加附件
with open("example.txt", "rb") as attachment:
part = MIMEBase('application', 'octet-stream')
part.set_payload(attachment.read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', "attachment; filename= %s" % "example.txt")
msg.attach(part)总结
通过以上步骤,你可以使用 Python3 轻松地发送电子邮件。无论是简单的文本邮件还是复杂的多部分邮件,都可以通过 smtplib 和 email 库来实现。此外,使用 yagmail 等第三方库可以使发送邮件变得更加简单高效。