我有解析電子郵件並添加「tel:」鏈接到電話號碼的代碼,但修改的電子郵件正文不會顯示在Outlook閱讀窗格中,直到用戶手動重新加載它(查看另一封電子郵件,回到這一個)。如何在Outlook後顯示修改的主體項目加載
我已經嘗試了一些黑客,如Inspector.Display
和ActiveExplorer.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)
感謝您的提示。我希望有比加載其他電子郵件更好的答案,因爲如果掛鉤ItemLoad事件,這可能會創建一個循環,而且看起來效率很低。有一種叫做teletrigger的產品,它能以某種方式只修改顯示的內容,而不改變電子郵件正文。我不知道該怎麼做。 – QuickDanger