【问题标题】:New to Python, GMail SMTP errorPython 新手,GMail SMTP 错误
【发布时间】: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

标签: python smtp gmail 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 年后,我仍然会这样做。
猜你喜欢
  • 2010-12-04
  • 2018-05-17
  • 2017-10-15
  • 2015-12-31
  • 2012-11-08
  • 2017-06-22
  • 2018-10-21
  • 2016-12-30
  • 1970-01-01
相关资源
最近更新 更多