2009-03-08 6 views
1

Ich möchte ein einfaches Outlook 2007 AddIn schreiben, mit dem ich E-Mails manuell archivieren kann. Das heißt, ich klicke mit der rechten Maustaste auf eine Mail, wähle Auto-Archive und sie wird in meinen Archivordner verschoben.Erkennen von AutoArchivierungseinstellungen/Speichern in Outlook 2007

Leider scheint ich nicht in der Lage zu erkennen, welcher der Archivspeicher ist. Ich weiß, dass Application.GetNamespace ("MAPI"). Stores ist eine Liste aller meiner Geschäfte, und das schließt meinen Archivspeicher ein. Aber ich finde keinen Weg zu erkennen, ob ein Geschäft der Archivspeicher ist oder nicht.

Bevor Sie einen einfachen String-Abgleich mit store.DisplayName empfehlen, sollten Sie sich die Lokalisierung merken (auf Deutsch ist der Store "Archivordner", der sich offensichtlich vom englischen unterscheidet).

Ich dachte, dass es möglich sein könnte, auf die Auto-Archiveinstellung zuzugreifen, um den Dateinamen abzurufen und dann mit store.FilePath abzugleichen, aber ich kann diese Einstellung nirgends finden.

Irgendwelche Vorschläge?

Antwort

2

Okay, gefunden. Das Geheimnis ist IPC.MS.Outlook.AgingProperties und es ist ein bisschen komisch und undokumentiert, aber es ist gut genug für mich.

private bool GetArchiveFilename(MAPIFolder fld, out string archiveFileName) 
    { 
     bool result = false; 
     archiveFileName = string.Empty; 
     if (fld != null) 
     { 
      StorageItem si = fld.GetStorage("IPC.MS.Outlook.AgingProperties", OlStorageIdentifierType.olIdentifyByMessageClass); 

      try 
      { 
       archiveFileName = si.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x6859001E").ToString(); 
       result = true; 
      } 
      catch (COMException) 
      { 
       return GetArchiveFilename(fld.Parent as MAPIFolder, out archiveFileName); 
      } 
     } 
     return result; 
    }