【发布时间】:2011-05-17 10:02:12
【问题描述】:
我正在使用 perl 组合一个多部分 MIME 电子邮件,然后在 Windows 环境中使用 sendmail 发送该电子邮件。不理想,我知道。
其中一部分是收集文件,将它们压缩,然后将压缩文件编码为 Base64 并将其作为附件写入电子邮件。我的问题是,每当我发送超过一定大小的文件(我不确切知道那是什么大小;介于 20 KB 和 2 MB 之间)时,zip 文件最终会在收到时损坏。 (在 WinRAR 中打开时,它会提示“存档意外结束”,并且 CRC 值都是零值,如果有任何线索的话)。
我怀疑我可能只是将其写入电子邮件的方式是让垃圾或重复进入,但我看不到它发生在哪里。这是我用来读取/编码/写入的 sn-p;它使用 MIME::Base64,显然有一个开放的 Sendmail 句柄。
open(FILE, "c:\\temp\\$uid.zip") or die "$!";
while (read(FILE, $buffer, 60*57))
{
printf SENDMAIL encode_base64($buffer);
}
即使我在没有任何缓冲的情况下读入它(我当然应该有足够的内存来存储一个微不足道的 2mb 文件),我最终仍然会收到一个损坏的 zip 文件。尺寸绝对是令人困惑的因素,但我正在努力弄清楚为什么或如何解决它。
【问题讨论】: