Python 新手,GMail SMTP 错误
Posted
技术标签:
【中文标题】Python 新手,GMail SMTP 错误【英文标题】:New to Python, GMail SMTP error 【发布时间】:2012-10-18 10:03:20 【问题描述】:我正在为自己编写一个简单的 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')
【问题讨论】:
smptlib -> smtplib 【参考方案1】:我也多次出现这种拼写错误!规避这个“问题”的一种方法是使用yagmail。
除了玩笑,我最近创建了 yagmail 以更轻松地发送电子邮件。
例如:
import yagmail
yag = yagmail.SMTP('user@gmail.com', 'password')
yag.send(contents = "Hello!")
这里使用了几个缩写,例如当To
没有定义时,它会发送一封邮件到在服务器上注册的同一个邮箱。端口和主机也是默认的,这使得它非常简洁。
其实既然看起来你想立即关闭连接,你甚至可以使用这个单行:
yagmail.SMTP('user@gmail.com', 'password').send(contents = "Hello!")
为了安全起见,您可以将密码保存在keyring
(请参阅文档)中,这样您就不必在脚本中保存您的个人密码,这非常重要!它甚至可以为您节省更多宝贵的屏幕空间。
全力以赴(@gmail.com
是默认值),您可以通过以下方式摆脱困境:
yagmail.SMTP('user').send('', 'Hello!')
祝你好运。
【讨论】:
@sureshvv 谢谢 :) 希望它对你有好处。【参考方案2】:在 Python 中,您需要通过为其模块添加前缀来完全限定名称:
except smtplib.SMTPException:
这是真的,除非您专门导入不合格的名称(但我不建议您为您的程序这样做,只是显示可能的情况):
from smtplib import SMTPException
【讨论】:
不用担心,即使在使用 SMTP 20 年后,我仍然会这样做。以上是关于Python 新手,GMail SMTP 错误的主要内容,如果未能解决你的问题,请参考以下文章