我使用Indy TIdIMAP4组件(版本10.6.0)连接到Exchange服务器。
当密码中的简单字符为IMAP4rev1 doesn't seem to allow anything else than US-ASCII时,这样可以正常工作。虽然如果密码包含特殊字符,如德语变音符号,空格等,则IMAPConnection.Connect
的身份验证失败,即它会抛出一个异常,说“登录失败”。
我认为这是由bug in the TIdIMAP4 component regarding SASL引起的,虽然我不确定。
如果该错误无关,是否有可以设置的属性或可以调用以允许进行身份验证的函数? 如果该错误导致这些身份验证问题,是否有针对它的解决方法?
那么实际的连接代码会是什么样子呢?
塞巴斯蒂安
答案 0 :(得分:3)
SASL is broken in TIdIMAP4问题已在10.6.0中通过IdIMAP4.pas中的内部PerformSASLLogin_IMAP()
函数得到解决。目前,TIdIMAP4
现在使用自己的内部SASL实现,而不是使用Indy的常规SASL实现。所以这不是问题。
IMAP LOGIN
命令不允许Unicode,句点。 SASL确实允许使用Unicode,但Indy目前尚未在SASL中实现对Unicode的支持。
您可以尝试通过更改以下行来手动修补IdIMAP4.pas:
// lines 1368 and 1378 in PerformSASLLogin_IMAP()
AClient.IOHandler.WriteLn(AEncoder.Encode(S));
改为:
AClient.IOHandler.WriteLn(AEncoder.Encode(S, IndyTextEncoding_UTF8));
但是根据所使用的特定SASL以及它是否实际支持UTF-8,这可能会也可能不会起作用。
我在Indy的问题跟踪器中开辟了一张新票,以便在将来的版本中支持SASL中的Unicode。