Hallo Community,
ich schreibe mit C# auf Basis von .NET 4.5 eine kleine Anwendung,(nur eine .EXE Datei, weil es auch von Stick startbar bleiben soll) die auf store-Object von Outlook zugreift und Pfade der pst-Dateien ausliest. Es klappt auch ohne Probleme sobald ich Microsoft.Office.Interop.Outlook Assembly der jeweiligen Version referenziere. Allerding soll es möglich sein, verschiedene Outlook Versionen, sprich Outlook 2010, 2013, 365, abzufragen und auf dem Zielrechner vorhandene Assembly zu nutzen. Das Problem ist also, dass ich nur eine interop Assembly referenzieren kann.
Gibt es Möglichkeit es zu umgehen? Denn mit meiner Funktion und verschiedenen Assembleys klappt soweit alles.
Danke in Voraus!!
Willkommen.
Bitte - vor allem als Neuling - wenigstens ein paar Minuten die Forensuche verwenden.
NetOffice - Ein versionsunabhängiger Wrapper für MS-Office
Das Projekt ist gut, der Macher aber von unserer Seite bewusst nicht mehr in diesem Forum vertreten.
Der Quellcode liegt auf CodePlex, das in Kürze jedoch offline geht.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Danke schon Mal. Allerdings sollen keine Produkte von Drittanbieter verwendet werden. Sonst wäre es kein Problem.
PS:
Habe bloß vergessen es zu erwähnen.
Wenn Du absolut gar keine externen Bibliotheken nutzen willst, dann wirst Du nicht sehr schnell sehr weit kommen.
So funktioniert moderne Software Entwicklung einfach nicht mehr (vor allem nicht im .NET Bereich).
Ansonsten schau Dir halt an, wie es NetOffice macht.
Ist schließlich Open Source.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Du könntest mit Late-Binding arbeiten. Damit entfällt das direkte Referenzieren der Assembly 😉
Hier ist ein kleines Code-Snippet:
public static void SendMail(string subject, string body, List<string> recipients)
{
const int olMailItemType = 0;
const int olMailHtmlBodyType = 2;
dynamic oApp = null;
dynamic oNameSpace = null;
dynamic oMail = null;
dynamic oRecips = null;
dynamic oRecip = null;
try
{
// get a new instance of Outlook
Type objClassType = Type.GetTypeFromProgID("Outlook.Application");
oApp = Activator.CreateInstance(objClassType);
oNameSpace = oApp.GetNamespace("MAPI");
if (oNameSpace != null)
{
oNameSpace.Logon();
}
// create a new mail item
oMail = oApp.CreateItem(olMailItemType);
if (oMail != null)
{
// set the mail properties
oMail.BodyFormat = olMailHtmlBodyType;
oMail.HTMLBody = body;
oMail.Subject = subject;
// add the recipients
if (recipients != null && recipients.Count > 0)
{
oRecips = oMail.Recipients;
if (oRecips != null)
{
foreach (string recAddress in recipients)
{
oRecip = oRecips.Add(recAddress);
if (oRecip != null)
{
oRecip.Resolve();
}
}
}
}
// display the new message
oMail.Display();
}
}
finally
{
if (null != oRecip)
{
Marshal.ReleaseComObject(oRecip);
}
if (null != oRecips)
{
Marshal.ReleaseComObject(oRecips);
}
if (null != oMail)
{
Marshal.ReleaseComObject(oMail);
}
if (null != oNameSpace)
{
Marshal.ReleaseComObject(oNameSpace);
}
if (null != oApp)
{
Marshal.ReleaseComObject(oApp);
}
}
}