Skip to main content
 首页 » 编程设计

python之使用 AUTH=NTLM 针对 Exchange imap 服务器验证 imaplib.IMAP4_SSL

2024年08月12日42sky-heaven

昨天,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. 如何使用带 imaplib 的 NTLM 向 imap 服务器进行身份验证?我假设我需要使用 IMAP4_SSL.authenticate("NTLM", authobject) 来做到这一点?如何设置 authobject 回调。
  2. 由于 SSL/TLS 是连接到服务器的唯一方式,因此重新启用明文密码身份验证不应存在安全风险。正确吗?

顺便说一句,连接到 imap 服务器的进程正在 Linux 上运行。所以我无法使用 pywin32。

编辑:

我能够弄清楚 1. 我自己。但是 2. 怎么样:通过 SSL 在 IMAP 中使用明文密码不是安全问题,对吗?

请您参考如下方法:

我能够使用 python-ntlm项目。

python-ntlm 为 HTTP 实现 NTLM 身份验证。通过扩展这个项目,很容易为 IMAP 添加 NTLM 身份验证。

我提交了 a patch for the project加上我的补充。