使用AUTH=NTLM验证Exchange imap服务器的imaplib.IMAP4_SSL认证
昨天,IT部门对Exchange服务器进行了更改。我之前可以使用imaplib
从服务器获取邮件,但现在似乎他们关闭了我之前使用的认证方式。从下面的输出来看,服务器现在似乎只支持NTLM认证。
>>> from imaplib import IMAP4_SSL
>>> s = IMAP4_SSL("my.imap.server")
>>> s.capabilities
('IMAP4', 'IMAP4REV1', 'IDLE', 'LOGIN-REFERRALS', 'MAILBOX-REFERRALS',
'NAMESPACE', 'LITERAL+', 'UIDPLUS', 'CHILDREN', 'AUTH=NTLM')
>>> s.login("username", "password")
...
imaplib.error: Clear text passwords have been disabled for this protocol.
有几个问题:
- 我该如何使用NTLM通过imap服务器进行认证,使用imaplib?我想我需要用IMAP4_SSL.authenticate("NTLM", authobject)来实现这个?那么我该如何设置authobject回调呢?
- 因为SSL/TLS是连接到服务器的唯一方式,所以重新启用明文密码认证应该不会有安全风险,对吧?
顺便说一下,连接到imap服务器的过程是在Linux上运行的,所以我不能使用pywin32。
编辑:
我自己搞定了第一个问题。但第二个问题呢:在SSL下使用IMAP的明文密码不是安全问题,对吧?
1 个回答
4
我成功使用了python-ntlm这个项目。
python-ntlm
是用来实现HTTP的NTLM认证的。通过扩展这个项目,我很容易就为IMAP添加了NTLM认证。
我提交了一个补丁,里面包含了我的改动。