Outlook通过电子邮件线程获取其他电子邮件 - UniqueBody

as9*_*876 5 outlook vba

我在发送之前使用VBA以某种方式格式化所有出站电子邮件.例如,我想从电子邮件中嵌入的所有表中删除第一列.我使用以下代码:

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
    Dim wd As Word.Document
    Set wd = ActiveInspector.WordEditor
    Dim tb As Word.Table
    For Each tb In wd.Tables
        tb.Columns(1).Delete
    Next tb
End Sub
Run Code Online (Sandbox Code Playgroud)

上面的代码完美无缺.但问题是我只想格式化我的电子邮件文本.通常,我会回复或转发其他人的电子邮件,这意味着上一封电子邮件的文本将位于同一个"检查器"窗口中.我并不想格式化文字/图片/等.线程中以前的电子邮件.怎么能实现这一目标?

我知道一个帖子中的每封电子邮件 - 尽管它们都在同一个窗口中 - 是一个单独的单元.我知道这一点,因为在阅读作为线程一部分的电子邮件时,当你移动鼠标时,你会看到

在此输入图像描述

在屏幕的右侧,指示线程的下一部分的位置.在编写作为线程一部分的新电子邮件(回复或转发)时,上面的按钮不会显示,但您仍然会看到一条蓝色的水平线,将线程的不同部分相互分开.

我想也许我可以在电子邮件中搜索第一次出现的行,并且只应用格式直到那一点.但是,看起来该行不是真正的文本或任何常规格式,可以在正常意义上搜索.实际上,如果您复制电子邮件文本(在发送之前),然后粘贴到Word中,该行将消失.

有什么建议?谢谢!

更新

我的问题与版本2010及更高版本中的"对话视图"无关.Outlook 2010允许您在一个组中查看线程中的其他电子邮件.然而,我想要的是能够在同一电子邮件中循环(通过代码)线程中的电子邮件.所以,如果有一个电子邮件"a",然后是回复,"b",然后是另一个回复,"c",c也将包含b,然后在其下方,所有都在同一封电子邮件中.在伪代码中,我想要以下内容:

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
    Dim wd As Word.Document
    Dim smail as SubEmail
    Dim tb As Word.Table
    Set wd = ActiveInspector.WordEditor
    For Each smail in wd
        For Each tb In wd.Tables
            tb.Columns(1).Delete
        Next tb
        Exit For
    Next smail
End Sub
Run Code Online (Sandbox Code Playgroud)

更新

我在Exchange Web服务中找到了一个名为UniqueBody的类似功能.看到这里.这正是我正在寻找的,而不是Exchange.

Ste*_*Gon 1

为什么不直接查找 "From:" chr(13) "Sent:" ?Outlook 会将这些标签放入任何电子邮件中,无论其来自何处。

假设上面示例中的电子邮件 a、b、c 的整个正文都在 sBody 中:

Sub GetFirstThread()
    Dim olItem As Outlook.MailItem
    Dim sText As String

    Set olItem = ActiveExplorer.Selection.Item(1)
    sBody = olItem.Body
    i=1
    While i < Len(sBody)
        If Asc(Mid(sBody, i, 1)) = 13 Then 'Look for From:
            If Mid(sBody, i + 1, 5) = "From:" Then
                'we found the start of email b
                nPosEb = i
            End If
        End If
        i=i+1
    Wend
     '...do something with nPosEb
End Sub
Run Code Online (Sandbox Code Playgroud)