You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.31 20:45:10