使用Python2.7在Windows服务器通过SMTP发邮件触发无效语法错误的咨询
问题根因与修正方案
当前报错的直接触发点
你遇到的SyntaxError完全来自代码里使用的f-string字符串语法:带f前缀的格式化字符串是Python 3.6版本才正式加入的特性,Python 2.7的语法体系完全不支持这种写法,解释器解析到这行代码时直接判定为无效语法,触发报错。
其余必须同步修正的兼容问题
就算把f-string的问题改掉,剩余代码在Python 2.7环境下依然会连续触发报错,需要同步调整:
- 导入的模块类不兼容:
email.message.EmailMessage是Python 3.4之后才加入的新邮件接口,Python 2.7的email模块没有提供这个类,导入阶段就会直接报错。Python 2.7下需要使用email.mime.text.MIMEText来构建纯文本邮件对象。 - 邮件头的赋值语法不合法:代码里写的
msg['From'] = YYY@test.co.il、msg['To'] = xxx@test.co.il没有给邮箱地址加字符串引号,Python会把这串内容当成未定义的变量解析,运行时会触发NameError。 - 发信方法不兼容:Python 2.7的
smtplib模块没有提供send_message()方法,对应的发信接口是sendmail(),需要手动传入发件人地址、收件人列表、序列化后的邮件文本。 - 邮件头字段设置错误:代码里写的
msg['test']是无意义的自定义头,这行代码的本意应该是设置邮件主题字段Subject。 - 前置变量未定义:代码里用到的
textfile从来没有在上下文中赋值,运行到open(textfile)时会触发NameError,需要提前指定好要读取的文本文件完整路径。
Python 2.7环境下可正常运行的修正版代码
import smtplib from email.mime.text import MIMEText # 替换为你实际的文本文件路径 textfile = r"C:\your_mail_content.txt" # 读取文件内容作为邮件正文 with open(textfile) as fp: mail_body = fp.read() # 构建纯文本邮件对象 msg = MIMEText(mail_body) # 设置邮件主题(替换原来错误的test头) msg['Subject'] = 'The contents of {}'.format(textfile) # 给地址加字符串引号,避免变量解析错误 msg['From'] = 'YYY@test.co.il' msg['To'] = 'xxx@test.co.il' # 连接本地SMTP服务发信 smtp_conn = smtplib.SMTP('localhost') smtp_conn.sendmail( from_addr='YYY@test.co.il', to_addrs=['xxx@test.co.il'], msg=msg.as_string() ) smtp_conn.quit()
内容的提问来源于stack exchange,提问作者kobilevi
相关产品推荐
相关产品推荐

