Android IMAP客户端无关的附件大小

时间:2014-01-10 14:17:22

标签: android exchange-server imap

如果附件超过10 MB,则邮件客户端显示的大小(13.4 MB)大于实际附件大小(10 MB)。我甚至在(S3)设备中的默认Google邮件客户端中也观察到了这个问题。

我正在修改k-9邮件客户端。即使在默认的k9邮件应用程序中也会出现此问题。请告诉我这种行为可能是什么原因。

2 个答案:

答案 0 :(得分:1)

附件是BASE64编码的,因此它们实际占用的空间比您想象的要多。如果你查看任何二进制文件,例如JPG,附加的大小比磁盘上的文件大很多。较大的大小实际上非常准确,这是附件在附件形式中占用的实际字节数。

下载后,附件当然不再采用BASE64(或类似)格式,并且将再次符合预期的大小。

从我所看到的电子邮件格式来看,没有简单的方法来检索附件的大小而不首先解码BASE64字符串。

答案 1 :(得分:1)

首先,附件可以很容易地编码在base64之外的其他编码中,就像quoted-printable一样。盲目地应用基于启发式的任何转换,例如“它是一个大的附件,它必须是bas64”将是完全错误的。也没有理由这样做;只需查看已解析的BODYSTRUCTURE即可查看每个部分的内容传输编码。

基于这一点,base64实际上是一个非常方便的编码 - 它总是将三个八位字节的序列编码为四个字节。但是,MIME对传输(线路长度等)施加了额外的限制,并且还添加了一些必需的标头。 The Wikipedia article on Base64有一个很好用的公式:bytes = (string_length(encoded_string) - 814) / 1.37