当在Outlook中收到电子邮件时,ATTnnnnn.txt附件是什么?

7
我编写了一个SMTP客户端,可以发送带附件的电子邮件。一切都很好,但是当我的程序发送的电子邮件被Outlook接收时,它会显示两个附件 - 实际发送的文件和一个内部包含两个字符CR和LF的文件,而这个文件的名称为ATT?????.txt。
我进行了搜索-找到了很多类似于此类问题的匹配项,例如这个,并检查了我所能找到的所有内容。更重要的是,我比较了由我的程序和Opera发送的两封电子邮件,但我无法推断出差异。然而,Opera发送的内容被正确解释,但我的程序发送的则没有。我的程序发送的内容被一组其他邮件客户端正确解释,但在Outlook中不行。
我已经使用telnet连接到SMTP服务器,将两封电子邮件检索到文本文件中-一封来自我的程序,另一封来自Opera,并将它们并排进行了比较。我没有看到任何可能影响电子邮件客户端解释的差异。
以下是示例消息(地址替换,文件内容裁剪,空行与实际消息中完全相同,行不超过80个字符):
To: user1@host.com, user2@host.com
Subject: subject
Content-Type: multipart/mixed; boundary="------------boundary"
MIME-Version: 1.0
--------------boundary Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64
这里放置Base64编码的文本部分-它可能是本地化的,因此最好将其转换为UTF8并进行Base64编码
--------------boundary Content-Disposition: attachment; filename="file.jpg" Content-Type: application/octet-stream; name="file.jpg" Content-Transfer-Encoding: base64
这里放置Base64编码的文件数据
--------------boundary
我尝试调整最后一个边界后的换行符-尝试了零个、一个、两个、三个,但这并没有改善情况。
是否有一组奇怪的限制,邮件客户端必须遵循才能正确解释Outlook的消息?

你能发布一下你的SMTP客户端生成的确切消息吗?我相当确定你在消息头中犯了一个错误。 - Tomalak
在结尾处不应该有一个“--------------boundary--”吗?(注意多了两个破折号) - Tomalak
是的,没错,就是结尾多了两个破折号!!!我从来没有在任何文档中看到过这个,这对我来说是一个完全的惊喜。 - sharptooth
Outlook 简单地看到了一个不正确的消息结尾,并预期另一个实际上不存在的附件。 - Tomalak
1
最具讽刺意味的是,我已经非常仔细地阅读了RFC,但完全跳过了最后一个边界额外破折号部分。 - sharptooth
显示剩余3条评论
1个回答

13

每个MIME部分的最后一个边界必须通过添加两个连字符来指示:

MIME版本:1.0
内容类型:multipart/mixed; boundary="------------boundary"
--------------boundary ...
--------------boundary ...
--------------boundary--

更多阅读资料,请参见:RFC1341 / 7.2 多组分内容类型


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接