首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RAD XE7中的IdMessageClient.pas出错

RAD XE7中的IdMessageClient.pas出错
EN

Stack Overflow用户
提问于 2015-03-24 20:31:58
回答 1查看 111关注 0票数 0

IdMessageClient.pas中有一个错误,在读取消息时会导致崩溃。

如果消息编码是“quoted-printable”,则无法正确读取附件,并调用一个空异常。

请从以下位置修改过程TIdMessageClient.ReceiveBody,第968行:

代码语言:javascript
复制
if PosInStrArray(LContentTransferEncoding, ['7bit', '8bit', 'binary'], False) = -1 then begin {do not localize}

代码语言:javascript
复制
if PosInStrArray(LContentTransferEncoding, ['7bit', 'quoted-printable', '8bit', 'binary'], False) = -1 then begin {do not localize}

也许需要在其他地方添加'quoted-printable‘子句-我不知道。

RAD XE7中出现问题。在以前的版本中,一切都运行良好。

EN

回答 1

Stack Overflow用户

发布于 2015-03-25 12:00:57

首先--这行代码从未出现在IdMessageClient.pas的968行中。根据您在过去一年中查看的SVN版本,它会出现在967、970或946行。

其次- XE7附带的SVN修订版(5177)不是当前可用的最新修订版(撰写本文时为5269)。请确保您使用的是最新版本,因为自XE7发布以来,ReceiveBody()已经收到了几个更新。

第三-如果您使用的是最新版本,但仍然遇到无法解析的电子邮件,请提供实际的电子邮件以供查看。

第四,即使这样,我也不倾向于将quoted-printable添加到那个特定的if语句中,因为它不属于那里。这条特定的if语句正在为multipart/...类型寻找有效的RFC值,而quoted-printable是RFC2045第6.4节严格禁止的(在该行代码的注释中也有详细说明)。如果你有一封使用非法Content-Transfer-Encoding的电子邮件,那么这封电子邮件就是错误的,我不喜欢让Indy解析明显错误的数据,除非绝对必要。我们已经遇到过格式错误的电子邮件,它们使用Content-Transfer-Encoding: quoted-printable而没有对正文文本进行实际的QP编码,因此在这种情况下quoted-printable会被忽略。如果你失败的电子邮件实际上是(但非法的)对multipart/...类型的正文文本进行QP编码,你可能不得不禁用Indy的解码器并自己解码电子邮件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29232729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档