检测电子邮件会话正文中新消息的结束

时间:2013-04-02 16:02:13

标签: vba outlook outlook-2010 outlook-vba

当邮件得到回复或被删除时,前一个帖子会在你的新邮件上附加一个---- ----原始邮件----在它前面。

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之间的所有内容都是双vbCrLf。就像我在邮件中输入一个新行一样......没有什么是独一无二的!

3 个答案:

答案 0 :(得分:3)

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

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

富文本

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

这是VbCrLf的2个实例,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,两行之间,最后一个。

答案 1 :(得分:2)

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

Dim arr() As String

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

然后循环显示消息:

Dim varElement as variant

for each varElement in arr()

next varElement

答案 2 :(得分:0)

如何将InStr功能更改为EndOfMsg = InStr(1, Item.Body, "From:")