使用 smtp 的 Hotmail SSL3 版本号错误 [英] Hotmail SSL3 version number error using smtp

查看:47
本文介绍了使用 smtp 的 Hotmail SSL3 版本号错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用 python 中的 hotmail smtp 服务器.但是,我的登录尝试导致明显的 SSL3 版本号错误.如何更改我使用的版本,我该如何调查?

I am trying to use the hotmail smtp server from python. However, my login attempt gives rise to an apparent SSL3 version number error. How can I change the version I am using and how do I even investigate this?

>> s.connect('smtp.live.com:587') 
(220,
 'BLU0-SMTP46.phx.gbl Microsoft ESMTP MAIL Service, Version: 6.0.3790.4675 ready at  Tue, 2 Jul 2013 12:15:57 -0700')
>> s.ehlo()
(250,
 'BLU0-SMTP46.phx.gbl Hello [123.456.789.01]\nTURN\nSIZE 41943040\nETRN\nPIPELINING\nDSN\nENHANCEDSTATUSCODES\n8bitmime\nBINARYMIME\nCHUNKING\nVRFY\nTLS\nSTARTTLS\nOK')
 s.starttls()
(220, '2.0.0 SMTP server ready')
>> s.login('my.email@hotmail.com','MyPaSsW0rD')
---------------------------------------------------------------------------
SMTPServerDisconnected                    Traceback (most recent call last)
<ipython-input-48-c8e9d7577d8d> in <module>()
----> 1 s.login('mymemail@hotmail.com','myPassw0rd')

/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/smtplib.pyc in login(self, user, password)
    600         elif authmethod == AUTH_PLAIN:
    601             (code, resp) = self.docmd("AUTH",
--> 602                 AUTH_PLAIN + " " + encode_plain(user, password))
    603         elif authmethod == AUTH_LOGIN:
    604             (code, resp) = self.docmd("AUTH",

/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/smtplib.pyc in docmd(self, cmd, args)
    384         """Send a command, and return its response code."""
    385         self.putcmd(cmd, args)
--> 386         return self.getreply()
    387 
    388     # std smtp commands

/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/smtplib.pyc in getreply(self)
    357                 self.close()
    358                 raise SMTPServerDisconnected("Connection unexpectedly closed: "
--> 359                                              + str(e))
    360             if line == '':
    361                 self.close()

SMTPServerDisconnected: Connection unexpectedly closed: [Errno 1] _ssl.c:1363: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number

我的 SSL 版本:

>> import _ssl
>> print _ssl.OPENSSL_VERSION
OpenSSL 1.0.1e 11 Feb 2013

也许这与此有关:Linux 上的 Python Smtp SSL 错误版本

推荐答案

我可以使用 Python 2.7.3 在 Debian Wheezy 中复制您的问题,它使用与您报告的完全相同的 OpenSSL 版本.我使用 Wireshark 捕获了数据包,并且成功地进行了 TLS 握手并交换了一些数据.然而不久之后,客户端对服务器发送的内容不满意并关闭了连接.

I can duplicate your problem with Debian Wheezy with Python 2.7.3 which uses the exact same OpenSSL version you report. I captured packets with Wireshark and there is a successful TLS handshake and some data is exchanged. Shortly after that however, the client end gets unhappy with something the server sends and closes the connection.

我能够通过使用 SSL3 而不是 TLS 来解决这个问题.我无法弄清楚如何在 Python 中修补库方法,以便其他使用它的库的行为会有所不同,所以我只是制作了自己的 smtplib 本地副本.

I was able to work around the issue by using SSL3 instead of TLS. I couldn't figure out how to patch a library method in Python so that other libraries that used it would behave differently, so I just made my own local copy of smtplib.

我复制了 2.7 版本的 smtplib(点击原始链接下载)并更改了一行:

I copied the 2.7 version of smtplib (click on the raw link to download) and changed one line:

        self.sock = ssl.wrap_socket(self.sock, keyfile, certfile)

        self.sock = ssl.wrap_socket(self.sock, keyfile, certfile, ssl_version=ssl.PROTOCOL_SSLv3)

然后在我的本地目录中使用编辑过的文件:

Then with the edited file in my local directory I get:

Python 2.7.3 (default, Jan  2 2013, 13:56:14) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import smtplib
>>> s = smtplib.SMTP()
>>> s.connect('smtp.live.com:587') 
(220, 'BLU0-SMTP418.blu0.hotmail.com Microsoft ESMTP MAIL Service, Version: 6.0.3790.4675 ready at  Wed, 3 Jul 2013 09:59:32 -0700')
>>> s.ehlo()
(250, 'BLU0-SMTP418.blu0.hotmail.com Hello [24.143.227.254]\nTURN\nSIZE 41943040\nETRN\nPIPELINING\nDSN\nENHANCEDSTATUSCODES\n8bitmime\nBINARYMIME\nCHUNKING\nVRFY\nTLS\nSTARTTLS\nOK')
>>> s.starttls()
(220, '2.0.0 SMTP server ready')
>>> s.ehlo()
(250, 'BLU0-SMTP418.blu0.hotmail.com Hello [24.143.227.254]\nTURN\nSIZE 41943040\nETRN\nPIPELINING\nDSN\nENHANCEDSTATUSCODES\n8bitmime\nBINARYMIME\nCHUNKING\nVRFY\nAUTH LOGIN PLAIN\nOK')
>>> s.login('my.email@hotmail.com','MyPaSsW0rD')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "smtplib.py", line 615, in login
    raise SMTPAuthenticationError(code, resp)
smtplib.SMTPAuthenticationError: (535, '5.0.0 Authentication Failed')
>>> 

我没有有效的 Hotmail 帐户,因此无法通过这里,但不再出现 SSL 错误.

I don't have a valid Hotmail account so I can't get past here, but there is no longer an SSL error.

这篇关于使用 smtp 的 Hotmail SSL3 版本号错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆