Tie*_*rcq 5 outlook vba outlook-2010
当一条消息得到回复或转发时,前一个线程会通过将 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
Run Code Online (Sandbox Code Playgroud)
所以我需要一些“令牌”来拆分,正确..但是这个令牌是什么?myMsg 和旧的 msg 之间只有一个 double vbCrLf。与我在消息中输入新行时相同.. 没有任何独特之处!
答案取决于用户发送的是 HTML 还是富文本电子邮件。(这通常取决于他们是否以 HTML 或 RTF 格式回复/转发消息,除非他们手动更改格式。)
\n\n无论哪种情况,您都需要寻找指示您感兴趣的消息结尾的模式,并在那里停止。用于Instr()确定您需要停止的位置。然后,当您解析文本以查找“某些单词”时,请跟踪您已阅读的字符数,并在到达标记时停止。
富文本
\n\n查找Item.Body“^p^p_ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ ___ ^ p”。
这是 VbCrLf 的 2 个实例、Chr(95) 的 46 个实例、一个空格,然后是 VbCrLf 的另一个实例。
\n\n超文本标记语言
\n\n在 中Item.Body,标记为“^p\xc2\xa0 _ \xc2\xa0^p”。
这是一个 VbCrLf、2 个空格、5 个 Chr(95) 实例、另外 2 个空格和另一个 VbCrLf。
\n\n在 中Item.HTMLBody,令牌是
<DIV dir=ltr lang=en-us class=OutlookMessageHeader align=left>\n<HR tabIndex=-1>\nRun Code Online (Sandbox Code Playgroud)\n\n该标记在其前面、两行之间以及末尾处都有一个 VbCrLf。
\n