5

当一条消息被回复或转发时,前一个线程会被附加到您的新邮件中,方法是在它前面放置 ie ----Original Message---- 。

Outlook 对 tekst 邮件执行相同的操作,但对于 HTML 邮件,它会显示一行,后跟 From:..

由于 Outlook 在这些消息之间显示了一条线,我相信可以使用 VBA 减去这些消息。但是如何?

目标:当用户发送邮件(Application_ItemSend)时,我想扫描邮件中的某些单词。但我不在乎它是否出现在以前的消息中,我只想扫描新输入的消息。

下面的示例将在 Outlook 中以文本形式回复电子邮件时起作用(并且 Outlook 是英文的!)。但它在发送 HTML 电子邮件时不起作用。

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
  Dim EndOfMsg As Integer
  Dim myMsg as String

  EndOfMsg = InStr(Item.Body, "-----Original Message-----")
  If EndOfMsg = 0 Then 
    myMsg = Item.Body
  Else 
    myMsg = Left(Item.Body, EndOfMsg)
  End If

  MsgBox myMsg
End Sub

所以我需要一些“令牌”来分裂,正确..但是这个令牌是什么?myMsg 和旧的 msg 之间只有一个 double vbCrLf。就像我在消息中输入新行时一样.. 没有什么独特的!

4

3 回答 3

3

答案取决于用户是发送 HTML 电子邮件还是富文本电子邮件。(这通常取决于他们是用 HTML 还是 RTF 回复/转发消息,除非他们手动更改格式。)

在任何一种情况下,您都需要寻找一种模式来指示您感兴趣的消息的结尾,然后停在那里。用于Instr()确定您需要停止的位置。然后,当您解析文本以查找“某些单词”时,请跟踪您已阅读的字符数并在到达标记时停止。

富文本

查找Item.Body“^p^p_ _ __ _ __ _ __ _ _ _ __ _ __ _ __ _ ___ ^p”。

那是 2 个 VbCrLf 实例,46 个 Chr(95) 实例,一个空格,然后是另一个 VbCrLf 实例。

HTML

Item.Body中,记号是“^p  _  ^p”。

那是一个 VbCrLf、2 个空格、5 个 Chr(95) 实例、另外 2 个空格和另一个 VbCrLf。

Item.HTMLBody中,令牌是

<DIV dir=ltr lang=en-us class=OutlookMessageHeader align=left>
<HR tabIndex=-1>

该标记在其前面、两行之间和末尾都有一个 VbCrLf。

于 2013-04-03T06:16:51.320 回答
2

您可以创建一个消息数组,如下所示:

Dim arr() As String

arr() = Split(Item.Body, "From:")

然后遍历消息:

Dim varElement as variant

for each varElement in arr()

next varElement
于 2016-08-30T08:50:08.543 回答
0

What about changing your InStr function to EndOfMsg = InStr(1, Item.Body, "From:")?

于 2013-04-03T15:54:48.740 回答