电子邮件文件传输期间,换行符 (0x0A) 转换为回车符 (0x0D)

电子邮件文件传输期间,换行符 (0x0A) 转换为回车符 (0x0D)

我正在通过电子邮件从一台 Mac(Snow Leopard)向另一台 Mac(Lion)发送文件。

事实证明,文件中的所有换行符(0x0A)都变成了回车符(0x0D),从而实际上将原始文件变成了一个完全不同的文件。

你知道为什么会发生这样的事情吗?

如果发送者将文件上传到网络,然后收件人使用网络浏览器下载文件,则不会发生这种情况。如果发送者先将文件压缩并通过电子邮件发送,也不会发生这种情况;收件人在解压缩 ZIP 文件后会获得完整的原始文件。我应该了解有关电子邮件传输的哪些特殊信息?

答案1

关于电子邮件传输,您无需了解任何特别之处。

电子邮件客户端在传输文件时的正常功能是按原样传输。使用 base64 或其他任何方式对文件进行编码不应暗示对文件内容进行任何更改。

显然,您的电子邮件客户端工作过度了。它不仅分析了文件并确定其中包含文本,还自行规范了行尾。不幸的是,它把工作搞砸了。

根据维基百科,对于 Mac OS 9 及以下版本,回车符都是换行符。但对于 Snow Leopard 来说,情况肯定不是这样。

由于没有 Mac,我无法测试任何东西。而且由于我不知道使用的是哪个电子邮件客户端,因此无法通过 Google 查找问题。因此,我建议您查看该未知电子邮件客户端的设置,并尝试找到一些与 OS-9 兼容的选项(该选项被错误地打开),或者其他一些用于按原样传输文件的设置。

答案2

SMTP RFC2821,第 2.3.7 节(找到这里) 规定如下:

SMTP 命令和消息数据(除非被服务扩展更改)以“行”的形式传输。行由零个或多个数据字符组成,这些字符以 ASCII 字符“CR”(十六进制值 0D)序列结尾,后面紧接着 ASCII 字符“LF”(十六进制值 0A)。

因此,您的 MUA 必须在通过 SMTP 服务器发送之前转换它们。请记住,SMTP 是为文本数据设计的,因此不兼容二进制数据(有关发送二进制数据的更多信息,请参阅 base64 编码)

答案3

发送文件之前,请先使用 zip、tar、gzip、bzip 或上述方法的组合,或者寻找其他电子邮件客户端。显然,您使用的客户端工作量太大。

相关内容