IMAP协议是否支持多部分体内的二进制文件?

时间:2016-10-20 14:40:12

标签: http imap mime mime-message

IMAP RFC:

  

通过使用一个支持8位文本和二进制邮件   [MIME-IMB]内容传输编码。 IMAP4rev1实现可以   在文字中传输8位或多位八位字符,但应该这样做   只有在识别出[CHARSET]时才会这样。

     

虽然定义了BINARY正文编码,但是未编码的二进制编码   字符串是不允许的。 “二进制字符串”是任何字符串   NUL字符。实现必须将二进制数据编码为   在传输数据之前,文本形式,例如BASE64。一个   具有过多CTL字符的字符串也可以是   被认为是二元的。

  1. 如果实现必须转换为base64,为什么RFC会说“定义了BINARY主体编码”。由于每次我们需要以base64(或其他某种格式)发送数据,因此不支持二进制文件。或者我读错了什么?

  2. IMAP支持MIME多部分,这里面的部分可以有二进制数据吗?那是content-transfer-encoding?

  3. 我是IMAP / HTTP的新手,有人问这个问题的原因是,我必须开发一个支持HTTP和IMAP的服务器,在HTTP服务器中以二进制方式重新接收数据(HUGE多部分数据,内容传输编码作为二进制),FETCH可以在IMAP中完成。问题是,如果IMAP不支持二进制文件,我需要解析数据并将multipart内的每个部分转换为base64。我认为这是严重的性能问题。

1 个答案:

答案 0 :(得分:1)

不幸的是答案可能"可能"。

MIME RFC支持二进制文件,但IMAP RFC明确禁止发送NULL个字符。这很可能是因为它们可能会混淆基于文本的解析器,尤其是那些用C语言编写的解析器,其中NULL具有字符串结尾的含义。

有些IMAP服务器只是认为主体是一个字节包"我怀疑很少,如果有的话,实际上重新编码。因此,如果您要求输入整个消息,您可能会得到它的文字内容。

如果您的客户可以处理MIME-Binary,您可能会没事的。

IMAP扩展RFC 3516可以正常支持BINARY,但这种情况并未广泛部署。

作为旁注:您为什么使用Multipart MIME?这是HTTP的一个奇怪的实现选择。