Hi,
ich stehe mal wieder vor einem Problem.
Ich habe ein Outlook Addin mit VSTO für Outlook2010 geschrieben.
Das Addin verarbeitet die selektierte E-Mail und soll diese anschließend verschieben.
Wenn nur ein Postfach vorhanden ist, funktioniert das auch mit folgendem Code:
Outlook.MAPIFolder inBox =
Globals.ThisAddIn.Application.Application.ActiveExplorer().Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
Danach wird irgendwann die Move Methode des MailItems aufgerufen. Das glaube ich ist hier nicht relevant.
Das Problem tritt auf, wenn mehrere Postfächer existieren.
Es wird eine E-Mail aus dem Postfach 2 ausgewählt und verarbeitet. Es wird aber immer in den Ordner des Postfachs 1 verschoben.
Nach etwas Debuggen habe ich rausgefunden, dass die Methode ActiveExplorer noch das richtige Postfach (also in diesem Bsp Postfach 2) zurück gibt. Bei der Session Property wird aber immer das Postfach 1 verwendet.
Wie kann ich denn eine E-Mail innerhalb eines Postfachs verschieben?
Ich hoffe ihr versteht was ich meine.
Ich habe dazu auch leider nichts gefunden, sondern nur die oben genannte Möglichkeit, wie ich an den Posteingang-Ordner komme.
Danke
caldi
Hi,
so ich bin's nochmal.
Ich habe inzwischen selber eine Lösung gefunden.
Wenn ihr mal das selbe Problem haben solltet, ich habe es so gelöst:
using Outlook = Microsoft.Office.Interop.Outlook;
public static Outlook.MAPIFolder GetInbox()
{
Outlook.Application app = Globals.ThisAddIn.Application;
Outlook.MAPIFolder currentFolder = app.ActiveExplorer().CurrentFolder;
Outlook.Account account = GetAccountForFolder(currentFolder);
Outlook.MAPIFolder inbox = account.DeliveryStore.GetDefaultFolder (Outlook.OlDefaultFolders.olFolderInbox);
}
private static Outlook.Account GetAccountForFolder(Outlook.MAPIFolder folder)
{
// Obtain the store on which the folder resides.
Outlook.Store store = folder.Store;
// Enumerate the accounts defined for the session.
return
Globals.ThisAddIn.Application.Session.Accounts.Cast<Outlook.Account>().FirstOrDefault(
account => account.DeliveryStore.StoreID == store.StoreID);
}
Die GetAccountForFolder Methode gibt's von MS. Ich habe die For Schleife mittels LINQ ausgedrückt.
Viele Grüße
caldi