Python运行报NameError: name 'message' is not defined错误求助
报错原因排查
触发NameError: name 'message' is not defined的核心原因是:你在调用message.attach()方法前,没有提前创建并定义message变量。你贴出的代码开头直接调用了message的类方法,但没有任何初始化message的代码,Python解释器找不到对应变量就会抛出该错误。
修复方案
你的代码属于Python发送HTML格式邮件的逻辑,需要先导入依赖的邮件模块,创建MIMEMultipart实例赋值给message后,才能调用其attach方法添加附件、邮件内容。
步骤1:在现有代码开头添加初始化代码
# 导入依赖模块(如果已导入可跳过) from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText import datetime # 初始化message对象 message = MIMEMultipart()
步骤2:确认其他变量已提前定义
避免后续运行触发新的报错,需要确认以下变量你已经提前赋值:
mime:你第一行代码中要挂载的资源对象,一般是嵌入邮件的图片MIME实例temp、mask:邮件模板中要填充的体温、口罩检测状态变量
完整参考代码示例
# 导入依赖 from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.image import MIMEImage import datetime # 初始化message message = MIMEMultipart() # 提前定义变量示例,请替换为你的实际业务值 temp = 36.5 mask = "已佩戴" # 读取本地图片生成mime对象示例,请替换为你的图片路径 with open("detect_face.jpg", "rb") as f: mime = MIMEImage(f.read()) mime.add_header("Content-ID", "<0>") # 你的原有代码 message.attach(mime) body = MIMEText(''' <html> <body> <h1>Alert</h1> <h2>A new has Person entered the Premises</h2> <h2>Body Temperature: {}</h2> <h2>Mask: {}</h2> <h2>Time: {}</h2> <p> <img src="cid:0"> </p> </body> </html>'''.format(temp, mask, datetime.now()), 'html', 'utf-8') # Add HTML/plain-text parts to MIMEMultipart message # The email client will try to render the last part first message.attach(body)
内容的提问来源于stack exchange,提问作者Esteban Gonzalez
相关产品推荐
相关产品推荐

