![电子邮件文件传输期间,换行符 (0x0A) 转换为回车符 (0x0D)](https://linux22.com/image/1297386/%E7%94%B5%E5%AD%90%E9%82%AE%E4%BB%B6%E6%96%87%E4%BB%B6%E4%BC%A0%E8%BE%93%E6%9C%9F%E9%97%B4%EF%BC%8C%E6%8D%A2%E8%A1%8C%E7%AC%A6%20(0x0A)%20%E8%BD%AC%E6%8D%A2%E4%B8%BA%E5%9B%9E%E8%BD%A6%E7%AC%A6%20(0x0D).png)
我正在通过电子邮件从一台 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 或上述方法的组合,或者寻找其他电子邮件客户端。显然,您使用的客户端工作量太大。