2015-01-03 39 views
0

我有解析電子郵件並添加「tel:」鏈接到電話號碼的代碼,但修改的電子郵件正文不會顯示在Outlook閱讀窗格中,直到用戶手動重新加載它(查看另一封電子郵件,回到這一個)。如何在Outlook後顯示修改的主體項目加載

我已經嘗試了一些黑客,如Inspector.DisplayActiveExplorer.ClearSelection ActiveExplorer.AddToSelection,但我無法獲得一致的結果(顯示器將爲某些用戶打開新的檢查器,非常不可取)。

我還打算調查事件越早掛鉤。在Outlook呈現之前以某種方式訪問​​電子郵件正文,以避免刷新。我對VSTO非常陌生,所以我不知道什麼事件可以訪問MailItem,但是在用戶選擇它之後並且在它被呈現之前發生。我曾經想過只處理新郵件,但是當我推出這個插件時,這隻會向前發展。

這是我目前的ItemLoad子:

Private Sub Application_ItemLoad(Item As Object) 
    Dim myObj As Outlook.MailItem 
    Dim ob As Object 
    ob = GetCurrentItem() 
    If TypeOf ob Is Outlook.MailItem Then 
     myObj = ob 
     Dim oldbody As String = myObj.Body 
     If myObj.HTMLBody.Length > 0 Then 
      myObj.HTMLBody = RegularExpressions.Regex.Replace(myObj.HTMLBody, "(?<!tel:)(?<![2-9\.])(?<!\>\)[+]?(1-)?(1)?[\(]?(?<p1>\d{3})[\)]?[\.\- ]?(?<p2>\d{3})[\.\- ]?(?<p3>\d{4})(?=[^\d])", "<a href=""tel:${p1}${p2}${p3}""> ${p1}-${p2}-${p3}</a>") 
     Else 
      myObj.Body = RegularExpressions.Regex.Replace(myObj.Body, "(?<!tel:)(?<![2-9\.])[+]?(1-)?(1)?[\(]?(?<p1>\d{3})[\)]?[\.\- ]?(?<p2>\d{3})[\.\- ]?(?<p3>\d{4})(?=[^\d])", "tel:${p1}.${p2}.${p3}") 
     End If 
     myObj.Save() 
     refreshCurrentMessage() 
    End If 
End Sub 

GetCurrentItem()剛剛返回要麼objApp.ActiveExplorer.Selection.Item(1)objApp.ActiveInspector.CurrentItem基於TypeName(objApp.ActiveWindow)

回答

0

展望並不反映通過OOM立即做出改變。您需要切換到另一個文件夾/電子郵件才能刷新項目,因爲無法即時更新該項目。

您可以使用Explorer類的CurrentFolder屬性,該類允許設置表示瀏覽器中顯示的當前文件夾的Folder對象。因此,該視圖將切換到另一個文件夾。然後,您可以將CurrentFolder文件夾設置爲初始文件夾。

另外我會建議立即釋放所有底層的COM對象。使用System.Runtime.InteropServices.Marshal.ReleaseComObject在您完成使用後釋放Outlook對象。然後在Visual Basic中將變量設置爲Nothing(C#中的空值)以釋放對該對象的引用。

+0

感謝您的提示。我希望有比加載其他電子郵件更好的答案,因爲如果掛鉤ItemLoad事件,這可能會創建一個循環,而且看起來效率很低。有一種叫做teletrigger的產品,它能以某種方式只修改顯示的內容,而不改變電子郵件正文。我不知道該怎麼做。 – QuickDanger

相關問題