Outlook VBA 将富文本转换为 HTML 格式

2023-12-29

我的交换服务器空间有限,因此我想将 Outlook 2007 收件箱中所有选定的邮件转换为 HTML 格式,因为当涉及图像时,它们比富文本格式的等效内容小。我有下面的代码可以完成这项工作,但是格式到处都是,图像变成不可读的附件,并且大小没有改变。

Public Sub ConvertHTML()

    Dim selItems As Selection
    Dim myItem As Object

' Set reference to the Selection.
    Set selItems = ActiveExplorer.Selection

' Loop through each item in the selection.
    For Each myItem In selItems
        myItem.Display
        myItem.BodyFormat = olFormatHTML
        myItem.Close olSave
    Next

    MsgBox "All Done. Email converted to HTML.", vbOKOnly, "Message"

    Set selItems = Nothing

End Sub

如果我手动执行此操作:- 打开富文本电子邮件,编辑消息,更改为 HTML,保存并关闭,然后格式保留,图像保持嵌入状态并且消息大小减小。我怎样才能在VBA中复制这个? 我已经检查了 BodyFormat 文档,它确实警告格式丢失,因此它可能是不可能的。谢谢


如果有关于属性 BodyFormat 和三种正文格式的明确文档,我从未发现过。

从 Outlook 2003 甚至更早的版本开始,MailItem 就具有 Body 和 HtmlBody 属性。在 Outlook 2010 之前,我找不到任何提及 RTFBody 属性的内容。我检查过的大多数电子邮件都同时具有 Body 和 HtmlBody。我从未见过 RTFBody。 Outlook 2003 可以选择创建 RTF 正文,但显然除了将其存储为 Html 正文之外没有其他方法。我从未尝试过创建 RTF 正文,因为我的朋友很少使用 Outlook,而且我怀疑他们的电子邮件包是否支持 RTF。

我知道如果你修改HtmlBody,Outlook也会修改Body来匹配。这不是一个非常复杂的修正案;据我所知,新的 Body 只是删除了所有 Html 标签的新 HtmlBody。

将正文格式从 RTF 更改为 Html 时会发生什么? Outlook 是否会删除 RTF 正文,以便您看到始终在幕后存在的错误 Html 正文? Outlook 是否尝试从 RTF 正文创建 Html 正文?我不知道,但也许我们可以找到答案。

下面的宏将 Html 正文保存为桌面上的 Html 文件。我的浏览器完美地显示了这些文件。请在一些带有 RTF 正文的电子邮件上尝试此宏。目的是发现 RTF 正文后面是否隐藏着良好的 Html 正文。如果有的话,我建议你尝试一下:

  • 将 Html 正文保存到字符串中。
  • 将正文格式更改为 Html。
  • 清除 RTF 正文。
  • 从字符串中恢复 Html 正文。

.

Option Explicit
Sub CheckHtmlBody()

  ' Technique for locating desktop from answer by Kyle:
  ' http://stackoverflow.com/a/17551579/973283

  Dim Exp As Outlook.Explorer
  Dim InxS As Long
  Dim Path As String

  Path = CreateObject("WScript.Shell").SpecialFolders("Desktop")

  Set Exp = Outlook.Application.ActiveExplorer

  If Exp.Selection.Count = 0 Then
    Debug.Print "No emails selected"
  Else
    For InxS = 1 To Exp.Selection.Count
      With Exp.Selection(InxS)
        If .HtmlBody <> "" Then
          Call PutTextFileUtf8(Path & "\TestHtml" & InxS & ".htm", .HtmlBody)
        End If
      End With
    Next
  End If

End Sub
Public Sub PutTextFileUtf8(ByVal PathFileName As String, ByVal FileBody As String)

  ' Outputs FileBody as a text file (UTF-8 encoding without leading BOM)
  ' named PathFileName

  ' Needs reference to "Microsoft ActiveX Data Objects n.n Object Library"
  ' I have only tested with version 6.1.

  '  1Nov16  Copied from http://stackoverflow.com/a/4461250/973283
  '          but replaced literals with parameters

  Dim BinaryStream As Object
  Dim UTFStream As Object

  Set UTFStream = CreateObject("adodb.stream")

  UTFStream.Type = adTypeText
  UTFStream.Mode = adModeReadWrite
  UTFStream.Charset = "UTF-8"
  UTFStream.LineSeparator = adLF
  UTFStream.Open
  UTFStream.WriteText FileBody, adWriteLine

  UTFStream.Position = 3 'skip BOM

  Set BinaryStream = CreateObject("adodb.stream")
  BinaryStream.Type = adTypeBinary
  BinaryStream.Mode = adModeReadWrite
  BinaryStream.Open

   'Strips BOM (first 3 bytes)
  UTFStream.CopyTo BinaryStream

  UTFStream.Flush
  UTFStream.Close
  Set UTFStream = Nothing

  BinaryStream.SaveToFile PathFileName, adSaveCreateOverWrite
  BinaryStream.Flush
  BinaryStream.Close
  Set BinaryStream = Nothing

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

Outlook VBA 将富文本转换为 HTML 格式 的相关文章

  • 在Excel VBA中将图像(jpg)转换为base64?

    我需要在 Excel 中转换图像 或通过VBA 转为base64 最后我将进行XML输出 我怎样才能做到这一点 我需要引用 DOM 吗 我一直在读书这个问题 https stackoverflow com questions 169907
  • Excel 2007 从 C# get_Value 始终返回 -2146826265

    我有一个引用 Microsoft Excel 12 0 对象库的小型 C 应用程序 除此之外 它还从 Excel 单元格读取值 它从一些较旧的 Excel xls 文件和一些 2007 文件 xlsx 中读取此值 所有 xls 文件的值都会
  • 使用宏从 Excel 电子表格中删除任何非指定字符

    我正在尝试通过删除任何非标准字符来清理 Excel 中的 CSV 文件 我唯一关心保留的字符是 A Z 0 9 和一些标准标点符号 任何其他字符 我想删除 当它找到包含我未指定的任何字符的单元格时 我已经得到了以下宏来删除整行 但我不确定如
  • 使用 Python Win32Com.Client 发送电子邮件发送错误

    我有我的脚本通过 Python win32com client 在 Outlook 上发送消息 我可以创建电子邮件并格式化我的正文 但是当我尝试这样做时newmail Send 我收到一个我无法弄清楚的错误 下面是我的代码以及错误 obj
  • 使用 VBA 跟踪 Excel 2007/2010 中的样式更改

    我需要跟踪某些工作表中的单元格样式变化 我无法在 Excel 2007 2010 中使用内置跟踪 因为我需要自定义某些内容 我尝试通过 Workbook SheetChange 跟踪样式更改但失败了 当我将单元格从一种样式更改为另一种样式时
  • 宏在第二张幻灯片上不起作用的 Powerpoint 进度

    我正在尝试创建一个宏 它将在 powerpoint 演示文稿中的幻灯片中运行 我本来可以工作 但现在停止工作了 我不知道为什么 运行幻灯片和动画的 vbscript 是 Private Sub PPTEvent SlideShowNextB
  • 以编程方式阻止 Vista 桌面搜索 (WORDS) 对映射网络驱动器上的 pst 文件建立索引

    经过几天的多次尝试 我没有找到任何 100 的解决方案来解决这个问题 我的搜寻和调查范围 直接访问注册表 HKLM SOFTWARE Microsoft Windows Search CrawlScopeManager Windows Sy
  • 如何在Excel自定义功能区控件的下拉控件中设置默认值

    我为 Excel 2010 创建了一个自定义 Fluent Ribbon 界面 其中包含一个下拉菜单 相关XML代码 简化
  • 使用 VBA 和 Selenium 驱动网站,pt2

    In 这个问题 https stackoverflow com questions 43808508 driving a website using vba and selenium在推动我的 VBA Selenium 项目前进方面 我收到
  • VBA:使用 Windows 身份验证登录

    我有一个 Access 应用程序 要求用户输入其 Windows 域用户和密码才能进入 我使用以下 VBA 代码来完成此任务 Function WindowsLogin ByVal strUserName As String ByVal s
  • Excel 表格:识别未使用的代码

    我正在更新一个excel questions tagged excel由其他人编写的应用程序 当然 我发现很多没用过的Sub CommandButtonXX Click subs 而且我并不总是确定该按钮是否仍然存在 有没有办法 程序 VB
  • 使用查找函数未找到值的错误消息

    我使用此代码来检查条形码是否在数据库中 但每次条形码不在列表中时 它都会提示一条错误消息 运行时错误 91 未设置对象变量或 With 块变量 是否有一行我可以像消息框一样添加 表明输入的条形码无效 我知道这就是我所需要的 但显然 我不知道
  • 有一个更好的方法吗? VBA脚本

    我这里有一份供料泵的跟踪清单 我们必须考虑库存水平 所以我做了这个 当您将泵输入表中时 什么也没有发生 当您将患者姓名放在上面时 该行会变成粉红色 表明该泵已离开我们的库存 我试图将一个脚本 宏放在一起 可以计算我们仍然拥有的泵 即白色行
  • VBA cDate 无法在 Mac excel 2011(14.7.1) 上运行

    我正在尝试使用 VBA 脚本将日期转换为长日期 下面是代码片段 Sub test Dim str as string Dim d as variant str 1 1 2016 d cdate str end sub 上面的代码片段在 Wi
  • 如何使用 VBA 在 Excel 2010 工作表中添加选项按钮以进行分组?

    I want to add many option button to an excel worksheet not to a VBA form and want to group them by row The result should
  • 在vba中为图例设置颜色代码

    我在每个工作表中都有数据透视表 我必须对它们进行比较 但每个工作表中图例的颜色都不同 如何设置颜色 例如 如果我的图例条目是 ISO 我希望它始终为 蓝色 如果它是 LAT 我希望它在每张纸中都为 红色 这可以通过操纵来完成Series中的
  • Worksheet_Change 事件未触发

    我的 Excel 项目在家中可以正常运行 带有Excel 2010 但不能在两台工作计算机上 使用Excel 2016 并且我怀疑Worksheet Change事件就是问题 当用户进行更改时 黄色条 屏幕截图中 应再次变为白色 但事实并非
  • VBA:如何从 MS Access 运行另一个应用程序

    我一直在试图解决这个问题 但似乎我在任何地方都找不到解决该问题的方法 这是第一部分 VBA Shell 命令始终返回 找不到文件 https stackoverflow com questions 10439024 vba shell co
  • 修剪工作簿中的所有单元格(VBA)

    我尝试向一直在开发的 Excel 加载项添加功能 该功能会修剪已用单元格末尾的前导空格 甚至可能解析文本 我需要这样做的原因只是为了将其变成超链接我已经在工作了 但是那部分很好 这是我到目前为止所尝试的 我已经修剪了active works
  • 有没有办法破解 Excel VBA 项目的密码?

    我被要求更新一些 Excel 2003 宏 但 VBA 项目受密码保护 而且似乎缺少文档 没有人知道密码 有没有办法删除或破解 VBA 项目上的密码 你可以直接尝试这个VBA不需要十六进制编辑的方法 它适用于任何文件 xls xlsm xl

随机推荐