Python脚本PyCharm运行正常,终端执行input()触发SyntaxError
解决Python脚本在终端使用SMTP_SSL发送邮件时的SyntaxError问题
这个问题其实是Python版本差异导致的,很常见:你在PyCharm里用的是Python3,但终端默认执行的是Python2,两者的input()函数行为完全不一样。
问题根源
- Python3的
input():直接读取用户输入的内容作为字符串,不需要加引号,这就是为什么PyCharm里运行正常。 - Python2的
input():会把用户输入的内容当作Python代码去解析。你输入mahmoud.wizzo@gmail.com时,它会把这个当成一个带点的变量名(不符合Python标识符规则),所以抛出SyntaxError;而加引号后,它被解析成合法的字符串字面量,就能正常运行了。
解决方案
这里给你两种可行的解决办法:
1. 用Python3执行脚本(推荐)
很多系统里python命令默认指向Python2,你只需要在终端里用python3来运行脚本:
python3 medo.py
这样就能和PyCharm里的环境保持一致,不需要修改代码,直接输入邮箱地址就行。
2. 修改代码适配Python2
如果必须用Python2运行,把代码里的input()全部换成raw_input()——Python2的raw_input()和Python3的input()行为一致,直接读取字符串,不需要引号。另外你原来代码里的str(mml)这类转换是多余的,因为raw_input()返回的已经是字符串,可以删掉:
import smtplib s = smtplib.SMTP_SSL("smtp.googlemail.com:465") mml = raw_input("enter your email address :\n") passr = raw_input("enter your pass:\n") s.login(mml, passr) em = raw_input("please type the email you want to send :\n") a = raw_input("please type the message:\n") s.sendmail(mml, em, a) print("\nEmail Was Sent..:)")
额外提示
另外要注意,Gmail的SMTP服务现在需要你开启应用专用密码(如果开启了两步验证),或者暂时开启“不太安全的应用访问”(不推荐长期开启),否则会出现登录失败的问题,这点可以提前检查一下。
内容的提问来源于stack exchange,提问作者Mody963Cz
相关产品推荐
相关产品推荐

