使用Python smtplib发送邮件时如何查看SMTP通信日志
smtplib查看完整SMTP交互会话的方法
直接使用smtplib内置的调试开关即可实现完整会话日志的输出,不需要额外依赖第三方工具。
方法1:直接打印日志到控制台
在初始化SMTP连接对象后,调用set_debuglevel(1)方法,所有客户端与服务器的交互报文会直接输出到控制台,包含完整的命令发送、响应接收、数据传输内容。
示例代码如下:
import smtplib from email.mime.text import MIMEText # 构造邮件内容(和你的原有逻辑一致即可) mail_content = MIMEText("测试邮件内容", "plain", "utf-8") mail_content["From"] = "your_sender@example.com" mail_content["To"] = "your_receiver@example.com" mail_content["Subject"] = "测试邮件" # 初始化SMTP连接 smtp_conn = smtplib.SMTP("smtp.example.com", 25) # 开启调试模式,参数设为1输出所有交互日志,设为2会额外打印时间戳 smtp_conn.set_debuglevel(1) # 后续业务逻辑和原有代码一致 smtp_conn.login("your_account", "your_password") smtp_conn.sendmail("your_sender@example.com", ["your_receiver@example.com"], mail_content.as_string()) smtp_conn.quit()
注意:该调试开关对普通SMTP连接、SMTP_SSL加密连接、开启STARTTLS的连接全部通用,不需要额外调整配置。
方法2:将日志保存到本地文件
如果不需要直接打印到控制台,可以重定向smtplib日志默认输出的stderr流,把日志写入到本地文件:
import sys import smtplib # 打开日志文件用于写入 log_fp = open("smtp_session.log", "w", encoding="utf-8") # 重定向stderr到日志文件 origin_stderr = sys.stderr sys.stderr = log_fp # 初始化SMTP连接并开启调试 smtp_conn = smtplib.SMTP("smtp.example.com", 25) smtp_conn.set_debuglevel(1) # 执行业务逻辑... smtp_conn.login("your_account", "your_password") # 其他发送逻辑... smtp_conn.quit() # 恢复stderr并关闭文件 sys.stderr = origin_stderr log_fp.close()
内容的提问来源于stack exchange,提问作者Omer Itach
相关产品推荐
相关产品推荐

