微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

delphi – 我应该期待Indy Imap SASL连接能够工作吗?

在我的电子邮件检查器中,我同时支持POP3 SSL和IMAP SSL.虽然使用SASL的Pop3 SSL已经工作了一段时间,但我从未使用SASL来使用IMAP SSL,即使SASL的代码在POP3和IMAP之间应该非常相似.我的理解是,在 this issue修复之前我不应该期望它能够工作.好吧,这个问题已得到解决,所以我想我会再次考虑让SASL为IMAP工作.我已经更新并重建了Indy,并取消注释了我所有的SASL代码,现在我发现当我发出Login命令时,我在IdIMAP4中获得了读取超时(即使将超时设置为大量的时间(在20-30秒的邻域,比使用SASL在POP3上进行身份验证的时间长约5倍.

单步执行调试器中的代码,导致读取超时的行出现在函数函数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

解决方法

AFAIK,TIdIMAP SASL现在工作正常(考虑到我是实施它的人).我无法访问任何使用SASL的IMAP服务器,因此我自己无法对其进行实际测试,但这是我在过去几个月中第一次听说过固定实现存在的任何问题.

但是,如果没有看到实际的套接字流量,就无法知道服务器是否正在发送任何回复,或者TIdIMAP是否正在正确读取回复.您能提供命令/响应的实际日志吗?要么使用像Wireshark这样的数据包嗅探器,要么将Indy自己的TIdLog …组件之一连接到TIdIMAP.Intercept属性.

更新:这是TIdIMAP4.GetInternalResponse()中的错误.它没有正确处理线路.我已经检查了Indy的SVN.

原文地址:https://www.jb51.cc/delphi/101818.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐