使用AUTH=NTLM验证Exchange imap服务器的imaplib.IMAP4_SSL认证

2 投票
1 回答
4456 浏览
提问于 2025-04-15 16:47

昨天,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.

有几个问题:

  1. 我该如何使用NTLM通过imap服务器进行认证,使用imaplib?我想我需要用IMAP4_SSL.authenticate("NTLM", authobject)来实现这个?那么我该如何设置authobject回调呢?
  2. 因为SSL/TLS是连接到服务器的唯一方式,所以重新启用明文密码认证应该不会有安全风险,对吧?

顺便说一下,连接到imap服务器的过程是在Linux上运行的,所以我不能使用pywin32。

编辑:

我自己搞定了第一个问题。但第二个问题呢:在SSL下使用IMAP的明文密码不是安全问题,对吧?

1 个回答

4

我成功使用了python-ntlm这个项目。

python-ntlm是用来实现HTTP的NTLM认证的。通过扩展这个项目,我很容易就为IMAP添加了NTLM认证。

我提交了一个补丁,里面包含了我的改动。

撰写回答