且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

修改CDO.Message对象中附件的内容类型

更新时间:2023-01-17 10:47:32

所以你的问题是如果附件的内容类型设置为 content-type =message / rfc822,则至少有一些电子邮件客户端会错误地保存MHTML附件。

So your problem is that at least some email clients save MHTML attachment incorrectly if content type for the attachment is set as content-type="message/rfc822".

首先,值得注意的是,您对该问题的根本原因的分析是有缺陷的。您似乎感到困惑,因为 multipart / related MIME类型发挥作用。事实上, RFC 2557 并不表示对应于MHTML附件的正文部分必须有 content-type =multipart / related。相反,MIME multipart / related是MHTML文件本身的内部结构。引用***文章

First, it is worth noting that your analysis of a root cause of the issue is flawed. You appear to be confused by where multipart/related MIME type comes into play. As a matter of fact, RFC 2557 does NOT state that body part corresponding to MHTML attachment must have content-type="multipart/related". Instead, MIME multipart/related is internal structure of MHTML file itself. Quoting Wikipedia article:


MHTML文件的内容被编码为使用MIME类型multipart /相关的HTML电子邮件消息。

The content of an MHTML file is encoded as if it were an HTML e-mail message, using the MIME type multipart/related.

也就是如果您使用文本编辑器打开MHTML文件,您应该看到以下内容:

I.e. if you open MHTML file with text editor, you should see the following:

Content-Type: multipart/related; ...

Microsoft声明MHTML文件应以内容类型= KB937912 中的message / rfc822。当您通过 AddAttachment 方法附加此类文件时,这正是CDO默认执行的。我认为这样的行为与RFC 2557无关。根据RFC:

Microsoft states that MHTML files should be served with content-type="message/rfc822" in KB937912. This is exactly what CDO does by default when you attach such file via AddAttachment method. I believe such behavior does not contradict RFC 2557 in any way. As per the RFC:


有许多文档格式...指定
文档,包括根资源和一些由该根资源中的URI引用的不同
辅助资源。
显然需要能够在电子邮件[SMTP],[RFC822]消息中发送这样的多资源
文件。

There are a number of document formats... that specify documents consisting of a root resource and a number of distinct subsidiary resources referenced by URIs within that root resource. There is an obvious need to be able to send such multi-resource documents in e-mail [SMTP], [RFC822] messages.

本文档中定义的标准规定了如何聚合MIME格式的[MIME1至MIME5]消息
中的
多资源文档,正是为此目的。

The standard defined in this document specifies how to aggregate such multi-resource documents in MIME-formatted [MIME1 to MIME5] messages for precisely this purpose.

要概述,绝对不应该将MHTML附件的内容类型设置为 multipart / related

To recap, you definitely should not set content type of MHTML attachment to multipart/related.

虽然 message / rfc822 似乎是与MHTML文件一起使用的方式,但它显然会触发您所描述的问题在这个问题。我使用Outlook 2010和OWA 2010进行了测试,并能够复制它。

While message/rfc822 seems to be the way to use with MHTML files, it obviously triggers the problem you described in the question. I tested with Outlook 2010 and OWA 2010, and was able to reproduce it.

各种电子邮件客户端用于MHTML附件的替代内容类型为 application / octet-stream application / x-mimearchive 。这两个在我的测试中没有出现问题。

Alternative content types that are used by various email clients for MHTML attachments are application/octet-stream and application/x-mimearchive. These two didn't exhibit the problem in my tests.