我们正在使用Delphi XE5 Architect&附带的Indy版本。我们有一个应用程序,可以与不同的交换伙伴发送和接收消息。其中一些消息的格式类似于电子邮件,其中MIME编码部分位于电子邮件正文中。我们使用TIdMessage
来处理/解码/重建MIME部分,这非常有用。
今天我们在解码MIME部分时开始从TIdMessage
收到错误
超出最大行长度
我们正在尝试排查并查看是否存在字符问题?
在十六进制编辑器中,当我们检查消息时,它们具有文本
\.br\
,然后是十六进制09,显示为'。'
之后\.br\.
这可能会显示为解析器的不正确换行符吗?
我们还在考虑内容长度是否过多?
通过正确的换行符,消息的范围在2k到6.6k行之间。
答案 0 :(得分:1)
Indy的MIME解析器从数据源逐行读取数据,因此在解析之前不必将整个电子邮件加载到内存中。 TIdMessage
在内部使用TIdIOHandlerStreamMsg
作为其数据源。该特定错误意味着TIdIOHandler.ReadLn()
方法(默认情况下停止读取(CR)LF
换行符)遇到的行超过允许的行数。
Indy的默认最大行长度为16384个字符,TIdMessage
不会覆盖它。通常情况下,您看不到单个行长的电子邮件,由于历史原因,它们通常上限为70多个字符。如果MIME数据在达到16K限制之前没有任何LF
个字符,则会导致问题。例如,如果MIME数据使用设置为Content-Transfer-Encoding
或8bit
的{{1}}标头,则可能会发生这种情况,因此数据不必以7位安全的方式进行编码,大多数电子邮件传输使用。