Domanda

Sto cercando di ottenere tutti i nomi / valori delle proprietà da un elemento di Outlook. Ho proprietà personalizzate oltre alle proprietà degli oggetti di Outlook predefinite. Sto usando redemption per aggirare gli avvisi di Outlook ma sto riscontrando alcuni problemi con il metodo GetNamesFromIDs su un elemento Redemption.RDOMail ....

Sto usando la mia sessione di riscatto per ottenere il messaggio e sto provando a usare il messaggio per ottenere i nomi di tutte le proprietà.

Dim rMessage as Redemption.RDOMail = _RDOSession.GetMessageFromID(EntryID, getPublicStoreID())
Dim propertyList As Redemption.PropList = someMessage.GetPropList(Nothing)
For i As Integer = 1 To propertyList.Count + 1
    Console.WriteLine(propertyList(i).ToString())
    Console.WriteLine(someMessage.GetNamesFromIDs(________, propertyList(i)))
Next

Non sono del tutto sicuro di cosa passare come primo parametro a getNamesFromIDs. La definizione di GetNamesFromIDs è la seguente:

GetNamesFromIDs(MAPIProp as Object, PropTag as Integer) As Redemption.NamedProperty

Non sono del tutto sicuro di cosa debba essere passato come oggetto MAPIProp. Non vedo questa proprietà referenziata nella documentazione. http://www.dimastr.com/redemption/rdo/MAPIProp.htm# proprietà

Qualsiasi aiuto o approfondimento sarebbe molto apprezzato.

È stato utile?

Soluzione

Penso di averlo capito. Ho usato solo VBA, quindi devi " pensare in giro " sono limitazioni, seguirà lo stesso schema in VB.NET.

La firma della funzione è questa:

Function GetNamesFromIDs(MAPIProp As Unknown, PropTag As Long) As NamedProperty

Come primo parametro richiede un oggetto che supporti l'interfaccia IUnknown . Guardando i documenti di Redenzione è diventato chiaro che esiste un'interfaccia chiamata _MAPIProp , da cui derivano molti altri oggetti RDO ( IRDOMail è tra questi). Quindi questo deve essere il RDOMail dal quale stai provando a ottenere i dati.

Sapendo che, bastava un altro sottile suggerimento dai documenti per farlo funzionare:

  

Dato un tag prop (> = 0x80000000),   restituisce il GUID e l'id del nome   Proprietà.

Quindi il tag della proprietà deve essere > = 0x80000000 , questo significa che non funzionerà per tutte le proprietà, ma solo per quelle personalizzate (immagino che in questo caso sia la distinzione, correggimi se sbaglio.) Il passaggio di tag di proprietà che non soddisfano questa condizione genera un messaggio di errore (0x8000ffff "risultati inattesi").

Ecco il mio codice. È VBA, quindi perdonami l'errore Hex (), poiché il numero intero lungo VBA trabocca per numeri così grandi. Sono sicuro che otterrai l'immagine.

Sub GetNamesFromIds()

  Dim rSession As New Redemption.RDOSession
  Dim rMessage As Redemption.RDOMail
  Dim PropertyList As Redemption.PropList
  Dim PropTag As Long
  Dim EntryId As String
  Dim i As Integer

  rSession.MAPIOBJECT = Application.Session.MAPIOBJECT

  ' retrieve first random mail for this example '
  EntryId = ActiveExplorer.CurrentFolder.Items(1).EntryId
  Set rMessage = rSession.GetMessageFromID(EntryId)
  Set PropertyList = rMessage.GetPropList(0)

  For i = 1 To PropertyList.Count
    PropTag = PropertyList(i)
    If "0x" & Right("00000000" & Hex(PropTag), 8) > "0x80000000" Then
      Debug.Print
      If IsArray(rMessage.Fields(PropTag)) Then
        Debug.Print Hex(PropTag), "(Array:", UBound(rMessage.Fields(PropTag)), "items)"
      Else
        Debug.Print Hex(PropTag), "(", rMessage.Fields(PropTag), ")"
      End If
      Debug.Print "    GUID:", rMessage.GetNamesFromIds(rMessage, PropTag).GUID
      Debug.Print "      ID:", rMessage.GetNamesFromIds(rMessage, PropTag).ID
    End If
  Next

End Sub

Primo frammento dall'output:

8041001E      (             urn:content-classes:message )
    GUID:     {00020386-0000-0000-C000-000000000046}
      ID:     content-class

Altri suggerimenti

Bene, per informazioni di base, l'autore suggerisce di usare qualcosa come OutlookSpy per vedere come Outlook memorizza le proprietà.

Guardando questo scambio (assicurati di leggere tutte le risposte di follow-up), non c'è molto di più (in effetti, a un certo punto penso che i tipi MVP di Outlook GetNamesFromIDs quando lui significa GetIDsFromNames ).

Quello che potresti provare è usare GetIDsFromNames per vedere cosa restituisce, quindi usarlo per passare a GetNamesFromIDs .

Ho usato Redemption prima, ma non in questo modo particolare, quindi è tutto ciò che ho per te ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top