Hotmail SSL3 version number error using smtp(Hotmail SSL3 版本号错误使用 smtp)
问题描述
我正在尝试使用 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]
TURN
SIZE 41943040
ETRN
PIPELINING
DSN
ENHANCEDSTATUSCODES
8bitmime
BINARYMIME
CHUNKING
VRFY
TLS
STARTTLS
OK')
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]
TURN
SIZE 41943040
ETRN
PIPELINING
DSN
ENHANCEDSTATUSCODES
8bitmime
BINARYMIME
CHUNKING
VRFY
TLS
STARTTLS
OK')
>>> s.starttls()
(220, '2.0.0 SMTP server ready')
>>> s.ehlo()
(250, 'BLU0-SMTP418.blu0.hotmail.com Hello [24.143.227.254]
TURN
SIZE 41943040
ETRN
PIPELINING
DSN
ENHANCEDSTATUSCODES
8bitmime
BINARYMIME
CHUNKING
VRFY
AUTH LOGIN PLAIN
OK')
>>> 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.
这篇关于Hotmail SSL3 版本号错误使用 smtp的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Hotmail SSL3 版本号错误使用 smtp
基础教程推荐
- Dask.array.套用_沿_轴:由于额外的元素([1]),使用dask.array的每一行作为另一个函数的输入失败 2022-01-01
- 如何在海运重新绘制中自定义标题和y标签 2022-01-01
- 用于分类数据的跳跃记号标签 2022-01-01
- 如何让 python 脚本监听来自另一个脚本的输入 2022-01-01
- 筛选NumPy数组 2022-01-01
- 何时使用 os.name、sys.platform 或 platform.system? 2022-01-01
- 线程时出现 msgbox 错误,GUI 块 2022-01-01
- 使用PyInstaller后在Windows中打开可执行文件时出错 2022-01-01
- 在 Python 中,如果我在一个“with"中返回.块,文件还会关闭吗? 2022-01-01
- Python kivy 入口点 inflateRest2 无法定位 libpng16-16.dll 2022-01-01