单步执行调试器中的代码,导致读取超时的行出现在函数函数PerformSAsllogin_IMAP中(ASASL:TIdSASL; AEncoder:TIdEncoder;在行1358上:
AClient.SendCmd(AClient.NewCmdCounter,'AUTHENTICATE ' + String(ASASL.ServiceName),[],True); {Do not Localize}
考虑到整个方法在bug报告中指出的修订中是新的,我很确定我已经成功更新了Indy,而且我建立SASL机制的逻辑和什么与POP3的工作非常相似(除了类似的东西)使用IMAP AuthType iatSASL而不是Pop3 AuthType patSASL).那么为什么我会在这里获得读取超时?我怎么能解决这是我的代码或Indy不能正常工作?如果我将IMAP.AuthType更改为iatUserPass或DEF_IMAP4_AUTH连接成功.我似乎无法找到有关我是否应该期望SASL与IMAP一起工作的最新信息,除了暗示错误报告被关闭为固定.
编辑:
Per Remy在他的回复中提出的问题是,当我将其设置为在没有SSL的情况下连接SASL时,由wireshark捕获的TCP对话:
* OK [CAPABILITY IMAP4rev1 LIteraL+ SASL-IR LOGIN-REFERRALS ID ENABLE STARTTLS AUTH=PLAIN AUTH=LOGIN] Dovecot ready. C1 CAPABILITY * CAPABILITY IMAP4rev1 LIteraL+ SASL-IR LOGIN-REFERRALS ID ENABLE SORT SORT=disPLAY THREAD=REFERENCES THREAD=REFS MULTIAPPEND UNSELECT IDLE CHILDREN NAMESPACE UIdplUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS QUOTA STARTTLS AUTH=PLAIN AUTH=LOGIN C1 OK Capability completed. C2 AUTHENTICATE PLAIN + C3 logoUT C2 NO [ALERT] Invalid base64 data in continued response
解决方法
但是,如果没有看到实际的套接字流量,就无法知道服务器是否正在发送任何回复,或者TIdIMAP是否正在正确读取回复.您能提供命令/响应的实际日志吗?要么使用像Wireshark这样的数据包嗅探器,要么将Indy自己的TIdLog …组件之一连接到TIdIMAP.Intercept属性.
更新:这是TIdIMAP4.GetInternalResponse()中的错误.它没有正确处理线路.我已经检查了Indy的SVN.
原文地址:https://www.jb51.cc/delphi/101818.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。