2017-07-28 6 views
0

使用するすべてのMailItemのモデルを保存する必要があります。これについては、次のように書いています。MailItemを一意に識別する

private readonly static Dictionary<string, PermitCustomPaneViewmodel> ViewmodelLookup = new Dictionary<string, PermitCustomPaneViewmodel>(); 

    public static PermitCustomPaneViewmodel CreateOrGet(MailItem c) 
    { 
     if (c.EntryID == null) 
      c.Save(); 
     if (!ViewmodelLookup.ContainsKey(c.EntryID)) 
     { 
      var vm = new PermitCustomPaneViewmodel(c); 
      c.Unload +=() => ViewmodelLookup.Remove(c.EntryID); 
      ViewmodelLookup.Add(c.EntryID, vm); 
     } 
     return ViewmodelLookup[c.EntryID]; 
    } 

モデルがすでに存在する場合は、それを探して返します。作成されていない場合は作成し、MailItemをアンロードした後にそのエントリを削除します。

ただし、アンロードが呼び出されるまで、MailItemオブジェクトは常にvailidされていないことがわかりました。 MailItemを確実に識別するために、私はEntryIDを使用しました。この問題は、Itemが保存されている場合にのみ有効です。

現在、EntryIDが見つからない場合、アイテムを保存します。しかし、これは自動的にアイテムをドラフトの下に保存します。

MailItemの方法は保存されていないので、Dictionary<,>で使用できます。

+0

[UserProperty](https://www.add-in-express.com/creating-addins-blog/2011/08/19/how-to-add-a-custom-property)を作成して設定することができますユニークなIDを格納するためのユーザプロファイル(電子メールアイテムイン・アウトルック)/)を含む。 –

+0

UserPropertyをパースするためにアイテムを保存する必要はありませんか? – lokimidgard

+0

メールアイテムがユーザーによって保存および保存されない場合、IDは未使用のままです。しかし、これは問題ではありません。 –

答えて

1

新しい作成アイテムにはEntryIDプロパティセットがありません。ストアプロバイダーによって割り当てられたIDを取得する必要があります。新しいMailItemオブジェクトを識別する必要がある場合は、UserProperties.Addメソッドを使用して、ユーザープロパティをアイテムに追加することを検討します。このメソッドは、UserPropertiesコレクションの新しいユーザープロパティを生成します。たとえば:

Sub AddUserProperty() 
Dim myItem As Outlook.ContactItem 
Dim myUserProperty As Outlook.UserProperty 

Set myItem = Application.CreateItem(olContactItem) 
Set myUserProperty = myItem.UserProperties _ 
.Add("LastDateSpokenWith", olDateTime) 
myItem.Display 
End Sub 

は注意して、エントリIDは、アイテムがMicrosoft Exchange Serverのパブリックフォルダに受信トレイから、例えば、別の店に移動したときに変化する、または1つの個人用フォルダ(.pst)ファイルから別の.pstファイルにコピーします。アイテムが移動されない限り、ソリューションはEntryIDプロパティに一意である必要がありません。基本的には、メッセージが親フォルダにある限り、正常に動作します。Outlookアイテムが別のフォルダに移動さ​​れた場合(ストアプロバイダによって異なります)、メッセージが変更されることがあります。

メッセージのMIMEヘッダー(PR_INTERNET_MESSAGE_IDおよびPR_TRANSPORT_MESSAGE_HEADERS)からのメッセージIDの使用を検討することもできます。しかし、新しく作成されたアイテムには設定されていません。これらのプロパティは、SMTPサーバーまたはSMTPコネクタから受信したメッセージで使用できます。

関連する問題