代码之家  ›  专栏  ›  技术社区  ›  Sam Smyth

如何将选定的电子邮件从RichText转换为HTML格式?

  •  2
  • Sam Smyth  · 技术社区  · 6 年前

    背景: 我的工作地点的默认电子邮件格式为RichText。 许多人在电子邮件中添加图像。 带有图像的RichText电子邮件比带有图像的HTML电子邮件大得多。

    我可以手动打开、编辑、将格式更改为HTML,并进行保存,以大大减少电子邮件的大小。格式在转换过程中保持不变。

    但是,当我使用VBA打开邮件项目、更改格式并保存时,电子邮件不会转换。

    如何使用vba将一组Richtext电子邮件更改为格式正确的html电子邮件,从而获得与使用Ribbon手动编辑和保存相同的结果?

    下面是我的示例代码,我可以在运行代码时看到这一行:

    myMailItem.BodyFormat = olFormatHTML
    

    与功能区的转换方式不同。

    Public Sub myConvertHTML()
    
        Dim mySelectedItems As Selection
        Dim myMailItem As MailItem
        Dim myRichText As String
        Dim myHtmlText As String
    
    
        ' Set reference to the Selection.
        Set mySelectedItems = ActiveExplorer.Selection
    
        ' Loop through each item in the selection.
        For Each myMailItem In mySelectedItems
    
            'if the current format is RichText proceed
            If myMailItem.BodyFormat = olFormatRichText Then
    
                myMailItem.Display
    
                'this line does not convert the RichText to Html properly
                'it seems to convert the images into an attached file ATT#### that is an ole object
                'instead of converting the image and using it in html format
                'when using the Ribbon and changing the format to HTML,
                'the email is converted and formatting maintained
                myMailItem.BodyFormat = olFormatHTML
    
                myMailItem.Save
                myMailItem.Close olSave
    
    
            Else
                MsgBox "Already in RichText Format: " & myMailItem.Subject, vbInformation
    
            End If
    
        Next
    
        MsgBox "All Done. Email converted to HTML.", vbOKOnly, "Message"
    
        Set mySelectedItems = Nothing
        Set myMailItem = Nothing
    
    End Sub
    

    我试着从VBA内部操纵Ribbon,但我还没有弄清楚如何调用Ribbon元素

    (Format Text/Format/HTML).
    

    欢迎提出任何建议。


    感谢尼顿,这是我的最终解决方案。

    Public Sub myConvertHTML002()
    'takes selected list of items in Outlook and converts all mailItems that are RichText into HTML Format
    
        Dim mySelectedObjects As Selection
        Dim myObject As Object
        Dim myMailItem As MailItem
    
        Dim objItem As Object
    
        ' Set reference to the Selection.
        Set mySelectedObjects = ActiveExplorer.Selection
    
        ' Loop through each item in the selection.
        For Each myObject In mySelectedObjects
    
            If myObject.Class = olMail Then
    
                Set myMailItem = myObject
    
                'if the current format is RichText proceed
                If myMailItem.BodyFormat = olFormatRichText Then
    
                    'have to display the email so we can use the command bars
                    myMailItem.Display
    
                    'special code because we can't change the format of the item from within the item
                    'we have to use the ActiveInspector
                    On Error Resume Next
                    Set objItem = ActiveInspector.CurrentItem
                    On Error GoTo 0
    
                    If Not objItem Is Nothing Then
                        If objItem.Class = olMail Then
                            ActiveInspector.CommandBars.ExecuteMso ("EditMessage")
                            ActiveInspector.CommandBars.ExecuteMso ("MessageFormatHtml")
                        End If
                    End If
    
                    myMailItem.Close olSave
    
                Else
    
                    'MsgBox "Already in RichText Format: " & myMailItem.Subject, vbInformation
    
                End If
    
            End If
    
        Next
    
        MsgBox "All Done. Email converted to HTML.", vbOKOnly, "Message"
    
        Set mySelectedItems = Nothing
        Set myMailItem = Nothing
    
    End Sub
    
    1 回复  |  直到 4 年前
        1
  •  1
  •   niton    6 年前

    您可以使用ExecuteMso单击按钮。

    CommandBars.ExecuteMso Method “使用内置按钮的控件…”

    Sub ChangeToHTML()
    Dim objItem As Object
    Dim objMail As mailitem
    
    On Error Resume Next
    Set objItem = ActiveInspector.currentItem
    On Error GoTo 0
    
    If Not objItem Is Nothing Then
        If objItem.Class = olMail Then
            ActiveInspector.CommandBars.ExecuteMso ("MessageFormatHtml")
        End If
    End If
    
    End Sub
    

    在为快速访问工具栏或功能区添加内置按钮时,将鼠标悬停在所选内容上,可以将MessageFormatHtml(IdMso)视为最后一位文本。