加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 04:19:50 所属栏目:大数据 来源:网络整理
导读:在我的电子邮件检查器中,我同时支持POP3 SSL和IMAP SSL.虽然使用SASL的Pop3 SSL已经工作了一段时间,但我从未使用SASL来使用IMAP SSL,即使SASL的代码在POP3和IMAP之间应该非常相似.我的理解是,在 this issue修复之前我不应该期望它能够工作.好吧,这个问题已得
在我的电子邮件检查器中,我同时支持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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读