7

我编写了一个发送带有附件的电子邮件的 SMTP 客户端。一切都很好,除了当 Outlook 接收到我的程序发送的电子邮件时,它会显示两个附件 - 实际发送的文件和一个包含两个字符 CR 和 LF 的文件,该文件的名称为 ATT?????.txt。

我已经完成了搜索 - 找到了很多类似问题的匹配项并检查了我能做的一切。甚至更多 - 我比较了两封电子邮件 - 由我的程序发送和由 Opera 发送,我无法推断出差异。但是 Opera 发送的内容被正确解释,但我的程序发送的内容却不是。我的程序发送的内容由一组其他邮件客户端正确解释,但不是由 Outlook。

我已经远程登录到 SMTP 服务器,将两封电子邮件检索到一个文本文件中——一封来自我的程序,另一封来自 Opera,然后并排比较它们。我没有看到任何可能影响电子邮件客户端解释的差异。

这是一个示例消息(地址被替换,文件内容被裁剪,空白行与真实消息中的完全一样,行数从不超过 80 个字符):

收件人:user1@host.com、user2@host.com
主题:主题
内容类型:多部分/混合;边界="------------边界"
MIME 版本:1.0

-  -  -  -  -  -  - 边界
内容类型:文本/纯文本;字符集="utf-8"
内容传输编码:base64

这里是 Base64 编码的文本部分 - 它可能是本地化的,所以
最好是 UTF8 并做 Base64

-  -  -  -  -  -  - 边界
内容处置:附件;文件名="文件.jpg"
内容类型:应用程序/八位字节流;名称="文件.jpg"
内容传输编码:base64

这是 Base64 编码的文件数据

-  -  -  -  -  -  - 边界

我尝试在最后一个边界之后使用换行符 - 尝试无,一,二,三,但这并没有改善情况。

邮件客户端是否必须遵循一些奇怪的限制才能生成 Outlook 正确解释的邮件?

4

1 回答 1

13

MIME 部分的最后一个边界必须通过附加两个破折号来表示:

MIME 版本:1.0
内容类型:多部分/混合;边界="------------边界"

-  -  -  -  -  -  - 边界
...

-  -  -  -  -  -  - 边界
...

-  -  -  -  -  -  - 边界 - 

更多阅读:RFC1341 / 7.2 The Multipart Content-Type

于 2009-03-27T17:36:26.653 回答