-->

检测新邮件的末尾电子邮件对话体(Detect end of new message in email

2019-08-19 01:51发布

当消息被放置即----原始邮件----在它前面的回答或forwared前一个线程被你的新邮件追加。

展望做同样与tekst消息,但与HTML邮件它显示了一个线,随后与来自:..

由于前景显示了这些消息之间的线我相信这是可能减去使用VBA这些消息。 但如何?

目标:当用户发送邮件(实现Application_ItemSend)我要扫描的消息的某些词。 但我不在乎,如果在先前的消息出现时,我只想要扫描的新键入的消息。

这个例子在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之间与老味精的是双vbCrLf 。 同样的,当我在我的消息,进入一个新的行..没有什么都没有独一无二的!

Answer 1:

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

在这两种情况下,你需要寻找,表示你有兴趣在消息的最后一个模式,并停在那里。 使用Instr()以确定你需要停下来。 然后,当你正在分析寻找你的“某些词”一文,跟踪你有多少个字符阅读,当你到达标记停止。

富文本

看在Item.Body为“^ P ^ _ P_ _ __ __ _ __ _ __ __ _ _ _ __ __ _ ___ ^ P”。

这是VbCrLf的2个实例,CHR(95)的46分的情况下,一个空格,VbCrLf的再另一个实例。

HTML

Item.Body ,令牌是“^ P _ ^ P”。

这是一个VbCrLf,2位,CHR 5个实例(95),2多个空格,和另一个VbCrLf。

Item.HTMLBody ,令牌

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

该令牌面前有一个VbCrLf,两线之间,并在结束。



Answer 2:

你可以创建如下消息的数组:

Dim arr() As String

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

然后通过邮件循环:

Dim varElement as variant

for each varElement in arr()

next varElement


Answer 3:

怎么样改变你的InStr功能EndOfMsg = InStr(1, Item.Body, "From:")



文章来源: Detect end of new message in email conversation body