Python新手,GMail SMTP错误

Python新手,GMail SMTP错误,python,smtp,gmail,smtplib,Python,Smtp,Gmail,Smtplib,我正在为自己编写一个简单的sendmail函数,我不断遇到以下错误: NameError:未定义名称“SMTPException” 我的代码有什么问题?有什么建议吗 import smtplib sender = "user@gmail.com" receiver = ["user@gmail.com"] message = "Hello!" try: session = smptlib.SMTP('smtp.gmail.com',587) session.ehlo()

我正在为自己编写一个简单的sendmail函数,我不断遇到以下错误:

NameError:未定义名称“SMTPException”

我的代码有什么问题?有什么建议吗

import smtplib

sender = "user@gmail.com"
receiver = ["user@gmail.com"]
message = "Hello!"

try:
    session = smptlib.SMTP('smtp.gmail.com',587)
    session.ehlo()
    session.starttls()
    session.ehlo()
    session.login(sender,'password')
    session.sendmail(sender,receiver,message)
    session.quit()
except SMTPException:
    print('Error')

在Python中,您需要通过在名称前面加上模块来完全限定名称:

except smtplib.SMTPException:
除非您专门导入非限定名称,否则这是正确的(但我不建议您的程序这样做,只是显示可能的情况):


这个拼写错误在我身上也发生过很多次!规避这个“问题”的一个方法是使用

撇开玩笑不谈,我最近创建了yagmail,使发送电子邮件更容易

例如:

import yagmail
yag = yagmail.SMTP('user@gmail.com', 'password')
yag.send(contents = "Hello!")
它在这里使用了几个缩写,例如,如果未定义
To
,它将向在服务器上注册的同一电子邮件发送邮件。端口和主机也是默认的,这使得它非常简洁

事实上,由于您似乎想立即关闭连接,因此您甚至可以使用以下一种方式:

yagmail.SMTP('user@gmail.com', 'password').send(contents = "Hello!")
为了安全起见,您可以将密码保存在
钥匙圈中(请参阅文档),这样您就不必将个人密码保存在脚本中,这一点非常重要!它甚至可以为你节省更多宝贵的屏幕资源

完全使用该软件包(
@gmail.com
是默认设置),您可以通过以下方式摆脱困境:

yagmail.SMTP('user').send('', 'Hello!')

祝你好运。

不用担心,即使在SMTP上工作了20年,我仍然会这么做。@sureshvv谢谢:)希望这对你有好处。smptlib->smtplib
yagmail.SMTP('user').send('', 'Hello!')