当一个消息得到回复或转发时,前一个线程被附加到你的新邮件中,即在它前面放置----原始消息----。
Outlook对测试邮件也做同样的事情,但是对于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
。就像我在我的消息中输入新的一行一样。没有什么是独一无二的!
答案取决于用户发送的是HTML邮件还是富文本邮件。(这通常取决于他们是用HTML还是RTF回复/转发消息,除非他们手动更改格式。)
无论哪种情况,您都需要寻找指示您感兴趣的消息结尾的模式,并在此停止。使用Instr()
来确定需要停止的位置。然后,当你在解析文本寻找你的"特定单词"时,记录你读了多少个字符,当你到达标记处时停止。
富文本
p看Item.Body
"^ ^ p_ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ ___ ^ p"。
这是2个VbCrLf实例,46个Chr(95)实例,一个空格,然后是另一个VbCrLf实例。