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 错误的主要内容,如果未能解决你的问题,请参考以下文章

Python-GMail-SMTP示例

使用python发送邮件会出错

在 Xampp 中将 Gmail 配置为 SMTP 以发送邮件 - 出现错误。为啥?

Python Django Gmail SMTP 设置

使用 gmail 对 SMTP 服务器错误进行身份验证失败

通过Python中的smtp.gmail.com在GAE上发送电子邮件