Python SMTP,Gmail没有回应



当我尝试连接到Gmail服务器时,Python会引发错误:

>>> from smtplib import SMTP
>>> m = SMTP('smtp.gmail.com', 587)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:Python27libsmtplib.py", line 249, in __init__
    (code, msg) = self.connect(host, port)
  File "C:Python27libsmtplib.py", line 309, in connect
    self.sock = self._get_socket(host, port, self.timeout)
  File "C:Python27libsmtplib.py", line 284, in _get_socket
    return socket.create_connection((port, host), timeout)
  File "C:Python27libsocket.py", line 571, in create_connection
    raise err
socket.error: [Errno 10060] 

其余输出的语言不同,但基本上说主机(Gmail)没有响应。

我可以在工作中的浏览器上看到我的电子邮件,也许有一个网络配置,不允许我自动发送电子邮件。

是否有工作要让Python充当常规浏览器?

首先,您只能访问具有某种形式身份验证的客户端的Gmail SMTP服务器;推荐的方法是与Oauth。有关详细信息,请参见此页面。因此,即使您解决了这个问题,您的代码也无法正常工作。

但是,这并不能解释为什么它甚至有机会登录之前拒绝您的连接。

最有可能的可能性是Gmail的路由器正在维护IPS的动态白名单。当您使用某种其他类型的正确连接时,您会添加到白名单中n秒,这意味着您可以连接到端口587;否则,您将被拒绝。这将类似于传统的SMTP-IMAP AUTH计划,但不限于IMAP,而不是在路由器而不是SMTP服务(大概是为了降低成本或使DOS攻击更加困难)。

)。

有一个很好的测试方法:配置Outlook,Mail.App或其他知道如何连接到Gmail并使用SMTP通过Gmail发送邮件的邮件客户端。在邮件客户端获取邮件后几秒钟运行脚本。如果有效,那就是问题所在。在这种情况下,修复程序是进行相同的连接和登录(imap?Web服务?)。

当然,您可以使用Google在上述链接上提供的示例代码,而不是从第一原则中进行操作。

(当然,Gmail还必须接受服务器到服务器的SMTP连接,但是它们可以轻松地为此提供不同的验证方案。我假设您正在尝试进行客户到服务器连接,而是比服务器到服务器。)

另一种可能性是您在某种黑名单上 - 例如,Gmail认为您的IP属于垃圾邮件发送者。这也可能是动态的 - 也许有人连接到端口587但在接下来的n秒内无法正确阻止OAuth。无论如何,这也很容易测试:配置Outlook,Mail.App等。如果这是问题,它们也无法发送邮件。

有第三种可能性,没有人可以连接到端口587,而Google希望您使用端口565或25。

为了更轻松的调试,您可能需要考虑编写一个更简单的脚本,该脚本仅创建套接字并连接,而不是使用SMTPLIB:

import socket
s = socket.socket()
s.connect(('smtp.gmail.com', 587))

或更简单地,只有命令行的NetCat:

nc smtp.gmail.com 587

回答您的身边问题:

是否有工作要让Python充当常规浏览器?

这不是问题。常规浏览器不会建立SMTP连接;它使用从gmail.com下载的JavaScript代码进行Web服务连接。

当然,Python也可以建立Web服务连接。

,它可以像您想要的那样的"常规浏览器"(例如,用户代理,推荐人等)的行为尽可能多地或很少公开,有明确的,已发表的有关如何进行身份验证自己的规则(在这种情况下,您只是按照规则说的话),否则它是私人的,除非您想陷入武器竞赛。

无论如何,在这种情况下,我们知道它是公开的,所以我们不必猜测。

最新更新