0

我正在使用 Indy TIdIMAP4 组件(版本 10.6.0)连接到 Exchange 服务器。当密码中只有简单字符时,这可以正常工作,因为IMAP4rev1 似乎除了 US-ASCII 之外不允许任何其他内容。虽然如果密码包含特殊字符,如德语变音符号、空格等,则通过身份验证IMAPConnection.Connect失败,即它会抛出异常“登录失败”。

我认为这是由TIdIMAP4 组件中有关 SASL的错误引起的,尽管我对此不确定。

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

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

塞巴斯蒂安

4

1 回答 1

3

TIdIMAP4 中的SASL问题已在 10.6.0 中通过 IdIMAP4.pas 中的内部PerformSASLLogin_IMAP()函数得到解决。暂时,TIdIMAP4现在使用它自己的内部 SASL 实现,而不是使用 Indy 的普通 SASL 实现。所以这不是问题。

IMAPLOGIN命令不允许使用 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。

于 2013-07-18T16:21:40.220 回答