2013-04-02 39 views
4

當郵件得到回覆或回覆時,通過將----原始郵件----置於其前面,將前一個線索附加到新郵件上。在電子郵件對話正文中檢測新消息的結尾

展望做同樣與tekst消息,但與HTML郵件它顯示了一個線,隨後與來自:..

由於前景顯示了這些消息,我相信這是可能減去使用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

你嘗試過什麼?如果您發佈現有的代碼,則更有可能獲得幫助。 –

+0

使用'Split'來根據你正在查找的分隔符標記消息正文;第一個元素(元素零)是它前面的文本,第二個元素(元素一)是它後面的文本。 – JimmyPena

回答

3

答案取決於用戶是否發送HTML或富文本電子郵件。 (這通常取決於他們是否以HTML或RTF格式回覆/轉發郵件,除非他們手動更改格式。)

無論哪種情況,都需要查找指示郵件結尾的模式你有興趣,並在那裏停下來。使用Instr()來確定您需要停止的地方。然後,當你正在解析文本尋找你的「某些單詞」時,記住你讀到標記的時候已經讀了多少個字符並停下來。

富文本

查找範圍Item.Body爲「^ P^P_ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ ___^p「。

這是VbCrLf的2個實例,Chr(95)的46個實例,一個空間,然後是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在它之前,兩線之間,並在結束。

+0

感謝您的輸入,但我無法在myMail.Body和myMailHTMLBody中找到任何Chr(95).. –

+0

我剛用OutlookSpy瀏覽此MailItem的所有屬性..但我在主體中找不到任何圖案, HTMLBody屬性。我也不能找到任何線索:-( –

+0

啊,你發送的是HTML郵件,我發送的是富文本郵件,在HTML郵件中,你應該在Item中尋找「'_____'」 .Body或「'HR tabIndex = -1」'「在Item.HTMLBody中 – user2185045

0

如何將您的InStr功能更改爲EndOfMsg = InStr(1, Item.Body, "From:")

2

您可以創建消息的數組如下:

Dim arr() As String 

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

然後遍歷消息:

Dim varElement as variant 

for each varElement in arr() 

next varElement 
相關問題