Indy IMAP不允许使用密码的特殊字符

时间:2013-07-18 08:25:35

标签: delphi imap indy

我使用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引起的,虽然我不确定。

如果该错误无关,是否有可以设置的属性或可以调用以允许进行身份验证的函数? 如果该错误导致这些身份验证问题,是否有针对它的解决方法?

那么实际的连接代码会是什么样子呢?

塞巴斯蒂安

1 个答案:

答案 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。