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

2023-11-26

当我尝试使用 VBScript 将 MHTML 文件作为电子邮件附件添加到电子邮件中时,ContentMediaType被错误地设置为"message/rfc822" (RFC 822)。据我了解,根据 Microsoft 的说法这是正确的,但根据RFC 2557其中指出应该是"multipart/related"。这是一个问题,因为大多数(如果不是全部)邮件客户端都会解释"message/rfc822"作为电子邮件消息。由于文件扩展名".mht" and ".mhtml"不匹配电子邮件的任何有效文件扩展名,邮件客户端会附加以下之一".msg", ".eml"等到文件名。当用户打开附件时,它会作为电子邮件打开,并且无法正确显示,因为 MHTML 文件和电子邮件的保存方式不同。

Sub SendEmail(FromAddress, ToAddress, Subject, Body, Attachment)
  Call Err.Clear
  On Error Resume Next

  Schema = "http://schemas.microsoft.com/cdo/configuration/"
  Set Configuration = Sys.OleObject("CDO.Configuration")
  Configuration.Fields.Item(Schema + "sendusing") = 2
  Configuration.Fields.Item(Schema + "smtpserver") = SMTPServer
  Configuration.Fields.Item(Schema + "smtpserverport") = 25
  Configuration.Fields.Item(Schema + "smtpauthenticate") = 1
  ' Configuration.Fields.Item(schema + "sendusername") = ""
  ' Configuration.Fields.Item(schema + "sendpassword") = ""
  Call Configuration.Fields.Update

  Set Message = Sys.OleObject("CDO.Message")
  Set Message.Configuration = Configuration
  Message.From = FromAddress
  Message.To = ToAddress
  Message.Subject = Subject
  Message.HTMLBody = Body
  If Not IsEmpty(Attachment) Then
    'CDO.Message.AddAttachment doesn't set the correct content media type for an MHTML file.
    Call Message.AddAttachment(Attachment)
  End If

  Call Message.Send
End Sub

当我运行这段代码时,Message.Attachments.Item(1).ContentMediaType被设定为"message/rfc822"。我需要它是"multipart/related" if Attachment(字符串)以以下结尾".mht" or ".mhtml"(不区分大小写)。我可以用下面的代码来做到这一点。

If Len(Attachment) >= 4 And InStr(Len(Attachment) - 3, Attachment, ".mht", vbTextCompare) Or Len(Attachment) >= 4 And InStr(Len(Attachment) - 5, Attachment, ".mhtml", vbTextCompare) Then
  Message.Attachments.Item(1).ContentMediaType = "multipart/related"
End If

由于某种未知的原因,这取消了附件的定义Message.Attachments.

我已经考虑过手动添加附件这些说明,但是当我打电话时Message.Attachments.Item(1).Fields.Update,该对象变得未定义。我想设置附件的ContentMediaType,隐式调用它的Fields's Update我认为这是造成这种意外行为的方法。

我怎样才能解决这个问题并发送带有以下内容的 MHTML 文件"multipart/related"内容类型,同时保持正确的文件扩展名?


因此,您的问题是,如果附件的内容类型设置为,至少某些电子邮件客户端会错误地保存 MHTML 附件content-type="message/rfc822".

首先,值得注意的是,你对问题根本原因的分析是有缺陷的。你似乎对哪里感到困惑multipart/relatedMIME 类型开始发挥作用。事实上,RFC 2557没有说明对应于 MHTML 附件的正文部分一定有content-type="multipart/related"。相反,MIME 多部分/相关是 MHTML 文件本身的内部结构。引用维基百科article:

MHTML 文件的内容使用 MIME 类型 multipart/lated 进行编码,就好像它是 HTML 电子邮件一样。

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

Content-Type: multipart/related; ...

微软声明 MHTML 文件应该与content-type="message/rfc822" in KB937912。这正是当您通过以下方式附加此类文件时 CDO 默认执行的操作:AddAttachment方法。我相信这种行为在任何方面都不违背 RFC 2557。根据 RFC:

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

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

回顾一下,您绝对不应该将 MHTML 附件的内容类型设置为multipart/related.

While message/rfc822似乎是the与 MHTML 文件一起使用的方式,它显然会触发您在问题中描述的问题。我用 Outlook 2010 和 OWA 2010 进行了测试,并且能够重现它。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

修改 CDO.Message 对象中附件的内容类型 的相关文章

  • perl:正确的“内容类型”格式以返回“图像数据 uri”

    我有一个模板angularjs期待着image data uri由通过调用的服务器调用返回src的属性img模板的元素 img width 200px height 200px src http localhost 3000 returni
  • 从其他域发送电子邮件而不是垃圾邮件

    这个问题问了一遍又一遍 仍然没有好的解决方案 当有人使用 php 发送电子邮件并将另一个域放在 from 中时 它最终会成为垃圾邮件 解决方案通常是 使用您的 发件人 并将您想要的域名放入 回复 中 将您的域列入主要邮件服务的白名单 第一个
  • Excel VBA 根据条件通过电子邮件发送每一行

    我正在尝试得到这个 因此 发送如下所示的电子邮件 然后就变成这样 我需要它跳过空白电子邮件地址 在发送时将已发送插入到第五列 并在有可用电子邮件时为每一行创建一封新电子邮件 新电子邮件需要与该单独行相关的特定信息 我正在使用 Ron de
  • GetRef 来捕获方法?

    我刚刚发现了 VBScript 的 GetRef 函数 它获取对其参数命名的函数的引用 有没有办法以这种方式获取对方法的引用 我有一种预感 VBScript 不提供这样做所需的复杂绑定 但它肯定会很好 No GetRef不支持类方法
  • 使用 utf-8 文件名发送 MIME 编码的电子邮件附件

    你好亲爱的人们 我花了三天时间在网上搜索答案 但没有找到任何答案 我发现了很多 几乎 的案例 但没有一个正是我正在寻找的 我能够获取希伯来语的主题和正文消息 但无法获取希伯来语的附加文件名 顺便说一句 我对 PHPMailer 等第三方程序
  • 打印出按文件名排序的目录中的文件

    我正在尝试打印目录中的文档 按文件名升序排序 我有下面的脚本来打印文档 它可以工作 但它是随机顺序的 有什么方法可以根据名称对 文件 集合进行排序吗 Set the TargetFolder TargetFolder C Temp Hewi
  • 我无法使用 Codeigniter 发送任何电子邮件

    我创建了一个控制器 并在控制器中做了一个测试函数来测试电子邮件是否发送 我检查了不同的电子邮件地址 但没有成功 这是我的代码示例 public function sendmail config protocol sendmail confi
  • 下订单时如何在 Magento 中触发电子邮件?

    我需要以下问题的解决方案 1 客户下订单 2 店主收到没有价格信息的电子邮件 例如装箱单 我需要编辑哪些文件 我读过很多帖子 但他们似乎没有提到文件路径 Thx 实现这一目标的两种可能方法 您可以为该类创建模型重写Mage Sales Mo
  • 如何在VBS中使用Excel内置常量[重复]

    这个问题在这里已经有答案了 我想使用VBScript而不是VBA来处理EXCEL 但是我在调 用Range Find方法时遇到了代码错误 见下文 Function find range wb domain var Dim sheet Dim
  • 从资产文件夹加载时,电子邮件意图中的图像预览未显示

    我有类似以下代码 public void shareImageInEmail String imageUri Intent emailIntent new Intent Intent ACTION SEND emailIntent setT
  • 验证电子邮件地址是否包含“@”和“.”

    我需要验证插入的电子邮件地址是否包含 和 没有正则表达式 有人能给我 java代码 和 结构图 的例子吗 I suspect你正在追求类似的东西 if address contains address contains Handle bad
  • 如何重写或设置cakePHP电子邮件组件中的返回路径?

    我正在使用 cakePHP 电子邮件组件从我的应用程序发送邮件 现在返回路径有类似的东西 电子邮件受保护 cdn cgi l email protection 使用 cakePHP 组件时 如何设置或重写电子邮件中的 Return Path
  • 将变量从 vbscript 传递到批处理文件

    我正在使用 vbscript 调用批处理文件 我的脚本如下所示 dim shell set shell createobject wscript shell shell run a bat set shell nothing 我的批处理文件
  • 如何使用 rspec 测试 mandrill api

    因此 我的客户报告说 许多电子邮件都发给了错误的人 我想编写一些功能测试来查找并确保他们收到电子邮件以及我的规格中的内容 我有 mandrill mailer 它使用 mandrill api 在它发送之前我想看看消息是什么 例如 创建新用
  • 有没有办法获得给定内容类型的扩展?

    有没有办法做到相反的事情 按扩展名划分的内容类型 https stackoverflow com questions 1910097 content type by extension 1910179 1910179 我有一个WebResp
  • PHP:使用西里尔字母发送电子邮件(乌克兰语文本)

    使用 PHP 发送西里尔字母电子邮件时出现问题 我这边 服务器 IIS 数据库 MsSQL 电子邮件服务器 Exchange 2010 通过 PHP EWS 进行通信 Receiver 是一家政府拥有的公司 拥有用于接收电子邮件的特定软件
  • 从服务器发送大量电子邮件时限制您遇到的情况

    从服务器发送大量电子邮件存在哪些实际问题 例如 如果我只是盲目地调用 PHP 中的 mail 函数数万次 那么收到该电子邮件的可能性是否与从 g mail 或个人电子邮件帐户发送的可能性相同 一天 注意 您在这里不是在帮助垃圾邮件发送者 这
  • 电子邮件地址是 URI 吗?

    我试图弄清楚电子邮件地址的格式是否可以说符合 URI 的定义 但到目前为止我还没有发现对此的明确确认 我希望有人可以在这里为我提供一些见解 提前致谢 是的 但带有 mailto 前缀 URI 具有以下形式
  • Web 交付的 Excel 2003 SpreadsheetML 文件的最佳内容类型和扩展名

    我正在使用具有报告 URL 调用的 API 该报告有一个 Excel 2003 XML 格式选项 选择后 他们将其交付为 Content Type application vnd ms excel content disposition i
  • 如何禁用 iPhone 邮件应用程序中的电话号码链接?

    我的公司正在发送数字电子邮件收据 但遇到了 iPhone Mail 检测数字数据并将其自动链接为电话号码的问题 我已经看到元标记应该可以解决 iPhone 上的 Mobil Safari 中的问题 但该技巧似乎不适用于 Mail 有谁知道如

随机推荐

  • MySQL:存储过程中的事务

    我的存储过程的基本结构是 BEGIN Declare statements START TRANSACTION Query 1 Query 2 Query 3 COMMIT END MySQL版本 5 1 61 0ubuntu0 11 10
  • 将图像放入 BUTTON 元素内(HTML 和 CSS)

    我有一个简单的按钮 如下所示 我需要在其上显示两张图片 一张位于按钮文本的两侧 我正在努力创建可在 Firefox 和 Internet Explorer 中使用的 CSS 按钮图像来自 JQuery UI 皮肤文件 CSS button
  • 在 Javascript 中生成 4 个随机数并与某个值相加

    我想要一些 javascript 它可以让我生成 4 个随机数 这些数字加起来等于某个值 例如 if max 20 then num1 4 num2 4 num3 7 num4 5 or max 36 then num1 12 num2 5
  • 如何添加左栏按钮而不覆盖自然后退按钮?

    我有一个使用嵌入在导航视图控制器中的 UIViewController 的项目 因此每当我进入表格视图的任何细节时 都会自动为我设置后退按钮 现在我想在后退按钮旁边添加一个编辑按钮 我已经在右侧放置了一个 取消分配 按钮 并且由于 取消分配
  • addEventListener 与 onclick

    有什么区别addEventListener and onclick var h document getElementById a h onclick dothing1 h addEventListener click dothing2 上
  • WPF ToggleButton IsChecked 触发器

    这让我抓狂 我有一个简单的 WPF 切换按钮 有两个 IsChecked 触发器 一个表示值为 true 另一个表示值为 false 当未选中按钮时它工作正常 应用了我的 false 样式 但是 系统从不应用 IsChecked 为 tru
  • 是否可以将 OpenCV GpuMat 绑定为 OpenGL 纹理?

    除了以下内容之外 我找不到任何参考 http answers opencv org question 9512 how to bind gpumat to texture 其中讨论了 CUDA 方法 理想情况下 我想用以下内容更新 Open
  • 重复的 GetAccessRules、FileSystemAccessRule 条目

    我从下面的代码中得到了重复的 FileSystemAccessRule C inetpub wwwroot AspInfo Account BUILTIN IIS IUSRS Allow ReadAndExecute Synchronize
  • 要求作者为帖子设置特色图片

    我已经自定义了我的 WordPress 网站设计 以过度使用特色图像来发布帖子 这就是为什么我需要要求非管理员发布的所有帖子都需要一组特色图像 这怎么可能 您需要将发布操作挂接到您编写的自定义插件中 虽然这需要一个标题 但这应该可以帮助您开
  • 如何创建仅 alpha 位图上下文

    苹果技术说明QA1037说 要创建仅 alpha 位图上下文 只需为颜色空间参数传递 NULL 即可 但是 我不确定该传递什么bitmapInfo范围 我正在尝试这样的事情 使用 kCGImageAlphaOnly CGContextRef
  • 当存在另一个属性时,将可选属性设为必需

    我有如下所示的 proptypes interface Props resource string create boolean route string 从上面可以看出 create 和route 是可选的props 但是 我想实现这样的
  • 在 C# 中获取下载文件夹? [复制]

    这个问题在这里已经有答案了 我编写了一些代码来搜索目录并在列表框中显示文件 DirectoryInfo dinfo2 new DirectoryInfo C Users Hunter Downloads FileInfo Files2 di
  • ld:找不到框架 Flutter

    当我在 iOS 模拟器上构建 iOS 的 flutter 项目时 出现错误 ld framework not found Flutter 并且构建失败 这是当我尝试从 xcode 构建 flutter 项目时出现的错误消息 export I
  • ASP.NET MVC 2 - HTML.EditorFor() 和自定义编辑器模板

    随着 MVC 2 添加 HtmlHelper EditorFor 不可能为给定的 Model 对象创建强类型的 Display 和 Editor 模板 在摆弄它之后 我有点困惑如何将额外的 Model 数据传递到编辑器而不丢失编辑器控件的强
  • HTML5 数据列表值与内部文本

    我遇到了 Chrome 和 Firefox 对 HTML5 datalist 元素的处理之间出现的问题 我可能滥用了它 Firefox 正在按照我期望的方式处理它 但 Chrome 却不是 我还没有在 Opera 上尝试过 这是针对内部页面
  • 使用 FILTER_VALIDATE_REGEXP 的 filter_var

    我正在练习我的 PHP 初学者技能 想知道为什么这个脚本总是返回 FALSE 我究竟做错了什么 namefields a zA Z s value john if filter var value FILTER VALIDATE REGEX
  • 打印n层调用堆栈?

    在 Visual Studio 中使用 C 我想知道是否有一个 API 可以为我打印调用堆栈 最好 我想打印 5 层深度的调用堆栈 Windows 是否提供了一个简单的 API 来允许我执行此操作 看起来 Microsoft 的 DbgHe
  • Xcode 7:链接器命令再次失败,退出代码为 1(使用 -v 查看调用)

    我在 Xcode 7 的 iOS 模拟器上测试我的应用程序 但当我尝试在我的 iOS 设备 带有 iOS 9 的 iPhone 5S 中测试时 我今天 09 16 2015 更新了 xcode 7 和 iOS9 在此之前使用 iOS 8 4
  • 如何从主机外部(同一网络)连接到 docker 容器 [OSX 10.11]

    设置 计算机 A 这是 Docker 机器 默认 运行的地方 虚拟盒子 default 正在运行一个名为 Odoo 的容器 默认 是使用创建的Docker的安装过程 奥杜 是 创建使用Odoo的安装过程 计算机 B 这是同一局域网 LAN
  • 修改 CDO.Message 对象中附件的内容类型

    当我尝试使用 VBScript 将 MHTML 文件作为电子邮件附件添加到电子邮件中时 ContentMediaType被错误地设置为 message rfc822 RFC 822 据我了解 根据 Microsoft 的说法这是正确的 但根