在 Outlook 电子邮件回复中包含原始文本和格式

Posted

技术标签:

【中文标题】在 Outlook 电子邮件回复中包含原始文本和格式【英文标题】:Include the original text and formatting in Outlook email response 【发布时间】:2021-01-07 10:29:49 【问题描述】:

我有 Excel 代码来生成对所选电子邮件的响应。响应包括动态文本,基于 Excel 中完成的处理。

我希望回复包含原始电子邮件文本。我尝试了一些东西,但都没有保留原始电子邮件格式,使其看起来失真,例如表格正在分解。

Sub Send_Email()
    Dim emailApplication As Object
    Dim emailItem As Object

    Set emailApplication = CreateObject("Outlook.Application")
    Set emailItem = emailApplication.ActiveExplorer.Selection.Item(1).ReplyAll

    emailItem.SentOnBehalfOfName = "dummy@dummy.com"

    emailItem.Body = Sheets("Email").Range("A34")

    emailItem.Display

    Set emailItem = Nothing
    Set emailApplication = Nothing
End Sub

【问题讨论】:

查看datanumen.com/blogs/… 阅读.htmlBody 而不是.Body - 根据您的需要,有多种方法可以做到这一点。将 Body 视为纯文本,而 HTMLBody 允许 HTML 标记涵盖您需要的格式类型。很多例子和类似的问题。如果您遇到困难,我建议您尝试一下,然后再提出另一个问题。 Paste Excel range in Outlook的可能重复 【参考方案1】:

试试这个

With emailItem.ReplyAll
    .HTMLBody = "<p>" & Sheets("Email").Range("A34").Value & "</p><br>" & .HTMLBody

    .Display
End With

如果Sheets("Email").Range("A34").Value 具有您需要保留的格式,那么您还必须使用RangetoHTML(rng) 将其转换为html 文本。我在下面添加了相关代码,以防链接失效。

Function RangetoHTML(rng As Range)
    ' Changed by Ron de Bruin 28-Oct-2006
    ' Working in Office 2000-2016
    Dim fso As Object
    Dim ts As Object
    Dim TempFile As String
    Dim TempWB As Workbook

    TempFile = Environ$("temp") & "\" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"

    'Copy the range and create a new workbook to past the data in
    rng.Copy
    Set TempWB = Workbooks.Add(1)
    With TempWB.Sheets(1)
        .Cells(1).PasteSpecial Paste:=8
        .Cells(1).PasteSpecial xlPasteValues, , False, False
        .Cells(1).PasteSpecial xlPasteFormats, , False, False
        .Cells(1).Select
        Application.CutCopyMode = False
        On Error Resume Next
        .DrawingObjects.Visible = True
        .DrawingObjects.Delete
        On Error GoTo 0
    End With

    'Publish the sheet to a htm file
    With TempWB.PublishObjects.Add( _
        SourceType:=xlSourceRange, _
        Filename:=TempFile, _
        Sheet:=TempWB.Sheets(1).Name, _
        Source:=TempWB.Sheets(1).UsedRange.Address, _
        HtmlType:=xlHtmlStatic)
        .Publish (True)
    End With

    'Read all data from the htm file into RangetoHTML
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
    RangetoHTML = ts.readall
    ts.Close
    RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _
        "align=left x:publishsource=")

    'Close TempWB
    TempWB.Close savechanges:=False

    'Delete the htm file we used in this function
    Kill TempFile

    Set ts = Nothing
    Set fso = Nothing
    Set TempWB = Nothing
End Function

【讨论】:

有一个错误,其中 emailItem.ReplyAll 应该只是 emailItem。尽管如此,这还是一种享受。通过在 Excel 中就地编辑,我能够将范围内的文本转换为 HTML 格式。我实际上是使用 CHAR(10) 来换行,所以我只是根据需要用 或

替换它,现在一切正常。

以上是关于在 Outlook 电子邮件回复中包含原始文本和格式的主要内容,如果未能解决你的问题,请参考以下文章

使用 emacs 和 gnus 在引用的回复中包含原始消息的日期和时间

使用C#回复/回复所有特定的Outlook邮件

怎样在outlook中设置自动回复

在outlook中当别人给我回邮件时我怎样才能看到原始邮件?

Outlook2016回复邮件的时候不能插入链接解决办法

Exchange电子邮件是否始终在标头中包含SMTP地址?