2012-01-10 14 views
5

Tôi muốn giúp Outlook 2010 chuỗi email của tôi. Sự hiểu biết của tôi là nó dựa vào chế độ xem cuộc hội thoại của thuộc tính conversationTopic của số MailItem. Tôi đã viết phương pháp sau và tạo quy tắc để nó kích hoạt trên các chủ đề email như "Đơn đặt hàng số 345 - Trả lời từ nhà cung cấp" và "Đơn đặt hàng số 345 - Trả lời từ khách hàng" và đặt chúng trong cùng một chuỗi. Rất tiếc, conversationTopic là thuộc tính chỉ đọc.Làm cách nào để tôi có thể sửa đổi cuộc trò chuyệnTopic để các email có chủ đề khác nhau được đặt trong cùng một chuỗi?

Có ai biết cách này hay có thể là cách tốt hơn để hoàn thành cùng một nhiệm vụ? Cảm ơn!

Sub ModifyConversationTopic(Item As Outlook.MailItem) 
    Dim regex As RegExp 
    Dim newMailItem As Outlook.MailItem 
    newMailItem = Item.Copy 
    Set regex = New RegExp 
    regex.IgnoreCase = False 
    regex.Global = True 
    regex.Pattern = "(Order# [0-9]+) .*" 
    If regex.Test(newMailItem.Subject) Then 
     Dim matches As MatchCollection 
     Set matches = regex.Execute(newMailItem.Subject) 
     Set topic = matches.Item(0) 
     MsgBox ("OH YEAH" + topic) 
     newMailItem.ConversationTopic = topic 
     newMailItem.Save 
    End If 
End Sub 
+2

Bạn đã bao giờ làm việc này? Tôi đang cố gắng làm một điều tương tự với thành công tối thiểu! – swiss196

Trả lời

4

Đang tìm kiếm khá nhiều điều tương tự, điều này dường như không thể với các đối tượng thường tiếp xúc như bạn chỉ ra, nhưng macro VBA + Outlook Redemption cho phép trò chuyện chủ đề phải được tinh chỉnh một cách dễ dàng. Tiền thưởng, chủ đề thư gốc không thay đổi, nhưng các tin nhắn vẫn hiển thị trong một nhóm trò chuyện gọn gàng đẹp mắt.

Something như thế này, ném vào VBA Macro và sau đó chạy kịch bản này là một hành động Rule khi thông điệp được nhận với bất cứ tiêu chí mà bạn xác định:

Sub MsgProcess(msg As MailItem) 
    Dim oNS As Object 
    Dim oRDOSess As Object 
    Dim oRDOItem As Object 
    Dim sEntryID As String 
    Dim sStoreID As String 

    Dim NewConversationTopic As String 


    Set oRDOSess = CreateObject("Redemption.RDOSession") 
    Set oNS = Nothing 
    Set oNS = Outlook.GetNamespace("MAPI") 
    oNS.Logon 
    oRDOSess.MAPIOBJECT = oNS.MAPIOBJECT 

    sEntryID = msg.EntryID 
    sStoreID = msg.Parent.StoreID 
    Set oRDOItem = oRDOSess.GetMessageFromID(sEntryID, sStoreID) 

    'Apply what modifications to topic you want here - dumb example string manipulation shown 
    NewConversationTopic = Replace(oRDOItem.ConversationTopic, "BLACK", "WHITE") 

    oRDOItem.ConversationTopic = NewConversationTopic 
    oRDOItem.Save 
End Sub 
+0

Thử điều này trong các phiên bản mới nhất của Outlook họ đã thêm nhiều thuộc tính trò chuyện hơn - trực quan họ có cùng tiêu đề cuộc trò chuyện nhưng họ không nhóm đúng cách nữa. Bất kỳ ý tưởng nào về cách cập nhật câu trả lời này (hoặc câu trả lời mới) cho các phiên bản Outlook sau này? – Krease

+1

Thực ra, tôi đã tự tìm ra nó - bạn cũng phải cung cấp cho họ cùng một thuộc tính ConversationIndex, cụ thể là một vài byte đầu tiên giống nhau cho tất cả các thư trong cùng một cuộc hội thoại, và các byte sau là để xác định thứ tự trong cuộc hội thoại. Bạn có thể tìm thêm chi tiết bằng cách gỡ lỗi thông qua VBA và xem/sửa đổi thuộc tính này. – Krease

0

Sử dụng Outlook Redemption, tôi có thể hợp nhất các mục thư đã chọn vào một cuộc trò chuyện duy nhất với mã sau. Tôi đã mô hình hóa nó khỏi câu trả lời của @ fredless ở trên cho các nhu cầu của tôi.

Public Sub MergeConversations() 

Dim NewConversationTopic As String 
Dim msg As MailItem 
Dim msgSel As Selection 
Dim oRDOSess, oNS, objRDOitem As Object 

Set msgSel = Nothing 
Set msgSel = Application.ActiveExplorer.Selection 

If msgSel.Count <= 1 Then 
    MsgBox ("Multiple Mail Items have not been selected!") 
    Set msgSel = Nothing 
    Exit Sub 
End If 

Set msg = msgSel.Item(1) 

NewConversationTopic = msg.ConversationTopic 

Set msg = Nothing 

Set oRDOSess = CreateObject("Redemption.RDOSession") 
Set oNS = Nothing 
Set oNS = Outlook.GetNamespace("MAPI") 
oNS.Logon 
oRDOSess.MAPIOBJECT = oNS.MAPIOBJECT 

For Each msg In msgSel 
    Set objRDOitem = oRDOSess.GetMessageFromID(msg.EntryID, msg.Parent.StoreID) 
    objRDOitem.ConversationTopic = NewConversationTopic 

'dòng sau là từ này answer

objRDOitem.Fields("http://schemas.microsoft.com/mapi/proptag/0x00710102") = Null 
    objRDOitem.Save 
    Set objRDOitem = Nothing 
Next msg 

Set msgSel = Nothing 
Set msg = Nothing 

End Sub