Python SMTP 与 Email 模块发送邮件实战
在开发自动化运维、通知系统或业务集成时,邮件发送是常见需求。Python 标准库提供了 smtplib 和 email 两个核心模块,前者负责底层协议传输,后者处理邮件内容的 MIME 编码(如 HTML、附件、图片)。本文将结合实例,从基础文本到复杂混合内容,梳理发送流程中的关键细节。
smtplib 基础:连接与传输
smtplib 定义了 SMTP 客户端会话对象,用于向支持 SMTP/ESMTP 的服务器发送邮件。核心类是 SMTP,初始化时可指定主机、端口及超时设置。
import smtplib
# 连接 SMTP 服务器,默认端口 25
server = smtplib.SMTP('smtp.example.com', 25)
server.set_debuglevel(1) # 开启调试模式,方便排查连接问题
常用方法包括:
connect(host, port):建立连接。login(user, password):身份验证,现代邮箱服务通常强制要求。starttls():启用 TLS 加密传输,保障凭证安全,建议在登录前调用。sendmail(from_addr, to_addrs, msg):执行发送,参数分别为发件人、收件人列表及消息字符串。quit():断开连接,务必在操作结束后调用以释放资源。
场景一:发送纯文本邮件
对于简单的通知,直接构建文本内容即可。注意头部信息(From, To, Subject)需包含在消息体中,或使用 email 模块封装。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import smtplib
from email.mime.text import MIMEText
HOST = 'smtp.example.com'
FROM = '[email protected]'
TO = ['[email protected]']
SUBJECT = '测试邮件'
BODY = '这是一封纯文本测试邮件。'
msg = MIMEText(BODY, 'plain', 'utf-8')
msg['Subject'] = SUBJECT
msg['From'] = FROM
msg['To'] = ', '.join(TO)
try:
server = smtplib.SMTP(HOST, 25)
server.starttls() # 开启加密
server.login(FROM, 'your_password')
server.sendmail(FROM, TO, msg.as_string())
()
Exception e:
()
:
server.quit()


