当邮件得到回复或被删除时,前一个帖子会在你的新邮件上附加一个---- ----原始邮件----在它前面。
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
。就像我在邮件中输入一个新行一样......没有什么是独一无二的!
答案 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:")
?