【问题标题】:Python smtplib hangs when sendmessage() is called调用 sendmessage() 时 Python smtplib 挂起
【发布时间】:2020-02-08 04:13:04
【问题描述】:

我正在尝试使用 smtplib 从 gmail 帐户发送消息。我一直在 shell 中弄乱它,在我调用 sendmail() 之前一切正常,当它冻结直到我关闭终端时。没有错误,只是冻结。我的命令如下所示:

>>> import smtplib
>>> connection = smtplib.SMTP("smtp.gmail.com", 587)
>>> connection.ehlo()
>>> connection.starttls()
>>> connection.login("gmail_id", "gmail_pwd")
>>> connection.sendmail("addr_from", "addr_to", "message")

有人遇到过这个问题吗?我试过 ping smtp.gmail.com 并使用 telnet smtp.gmail.com 587,它们都可以连接。

【问题讨论】:

  • 启用跟踪/调试 smtp 会话,如 stackoverflow.com/questions/34294251/… 中所述
  • 如果"message" 真的是您要发送的内容,那就是问题所在。参数应该是格式正确的 RFC5322 消息。

标签: python email smtp smtplib


【解决方案1】:

使用connection.set_debuglevel(1) 启用跟踪/调试 SMTP 会话。

https://docs.python.org/2/library/smtplib.html#smtplib.SMTP.set_debuglevel

【讨论】:

  • 这并不试图回答这个问题,尽管它可能有助于让 OP 发布实际有用的诊断信息。在 2020 年链接到 Python 2 文档是相当虚伪的。
  • @tripleee 恕我直言,如果没有更好的诊断,解决 OP 问题是不可能的。我厌倦了“在 cmets 中进行长时间的诊断交流”。
  • 阿门,兄弟。解决方案是在不清楚的情况下投票关闭,并在 OP 提供足够信息后注意投票重新开放。
【解决方案2】:

我刚才遇到了类似的问题,我曾尝试使用 python3.7 的smtplib 登录我的 gmail 帐户并得到:

smtplib.SMTPAuthenticationError: (535, b'5.7.8 Username and Password not accepted. Learn more at\n5.7.8 https://support.google.com/mail/?p=BadCredentials')

我使用浏览器访问了我的 gmail 收件箱,看到我收到了一封包含该消息的安全警报电子邮件

安全性较低的应用被阻止:Google 阻止了您尝试使用的应用 因为它不符合我们的安全标准。一些应用程序和设备 使用不太安全的登录技术,这会使您的帐户更加安全 易受伤害的。您可以关闭这些应用的访问权限,我们 推荐,或者如果您想使用它们,请打开访问权限,尽管 风险。如果不是,Google 会自动关闭此设置 正在使用。

按照上述电子邮件中的说明并在我的 gmail 帐户上启用安全性较低的应用程序访问后,我尝试 sendmail 仍然使用初始 SMTP 连接,但它只是挂起,没有任何输出。

然后我继续退出初始 SMTP 连接并创建一个新连接(启用发布不太安全的应用程序),如下所示,它成功了!

conn = smtplib.SMTP('smtp.gmail.com', 587)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-26
    • 2013-08-18
    • 1970-01-01
    • 2015-09-09
    • 1970-01-01
    相关资源
    最近更新 更多