myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Gemeinschaft » .NET-Komponenten und C#-Snippets » Outlook: Via OLEDB schnell auf Outlook-Daten zugreifen
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Outlook: Via OLEDB schnell auf Outlook-Daten zugreifen

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Rainbird Rainbird ist männlich
myCSharp.de-Poweruser/ Experte

avatar-2834.jpg


Dabei seit: 28.05.2005
Beiträge: 3.723
Entwicklungsumgebung: Visual Studio 2012
Herkunft: Mauer


Rainbird ist offline

Outlook: Via OLEDB schnell auf Outlook-Daten zugreifen

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Beschreibung:

OLEDB-Datenzugriff ist ein effizienter Weg, um Daten aus Outlook abzurufen. Dieses Snippet ermöglicht sofortigen Zugriff auf das gesamte Outlook-Postfach.

C#-Code:
// using System.Data.OleDb; // Nicht vergessen!

/// <summary>
/// Gibt den Inhalt eines bestimmten Outlook-Ordners als Tabelle zurück.
/// (Wurde nur mit einer deutschen Outlook-version getastet!)
/// </summary>
/// <param name="mapiProfile">Name des MAPI-Profils (z.B. "MS Exchange-Einstellungen"), einzusehen in Systemsteuerung -> Mail</param>
/// <param name="displayUserName">Anzeigename des Benutzers (z.B. "Max Mustermann")</param>
/// <param name="folderName">Name des Ordners (z.B. "Posteingang")</param>
/// <returns>Inhalt des Outlook-Ordners</returns>
private DataTable GetOutlookFolderData(string mapiProfile, string displayUserName, string folderName)
{
    // Verbindungszeichenfolge erzeugen
    string connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Exchange 4.0;MAPILEVEL=Postfach - {0}|;PROFILE={1};TABLETYPE=0;DATABASE={2};", displayUserName, mapiProfile, Environment.GetEnvironmentVariable("TEMP"));

    // SQL-Abfrage erzeugen
    string sql = string.Format("SELECT * FROM {0}", folderName);

    // Neue Tabelle erzeugen
    DataTable result = new DataTable(folderName);

    // Verbindung zu Outlook herstellen
    using (OleDbConnection connection = new OleDbConnection(connectionString))
    {
        // Datenadapter bauen
        OleDbDataAdapter adapter = new OleDbDataAdapter(sql, connection);

        // Inhalt des Outlook-Ordners abrufen
        adapter.Fill(result);
    }
    // Tabelle mit Ordnerinhalt zurückgeben
    return result;
}

Schlagwörter: Outlook, OLEDB, Posteingang, Inbox, Exchange, Exchange Server

Quelle: .NET-Snippets
13.05.2007 12:19 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegen mehr als 4 Monate.
GTi-Schumi GTi-Schumi ist männlich
myCSharp.de-Mitglied

Dabei seit: 07.09.2007
Beiträge: 18
Entwicklungsumgebung: Visual Studio 2005
Herkunft: Murrhardt


GTi-Schumi ist offline MSN-Passport-Profil von GTi-Schumi anzeigen

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Kannst du mir sagen wie du auf die Unterordner des Posteingangs zugreifen kannst?

Gruß
14.09.2007 08:47 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Rainbird Rainbird ist männlich
myCSharp.de-Poweruser/ Experte

avatar-2834.jpg


Dabei seit: 28.05.2005
Beiträge: 3.723
Entwicklungsumgebung: Visual Studio 2012
Herkunft: Mauer

Themenstarter Thema begonnen von Rainbird

Rainbird ist offline

Zugriff auf Unterordner

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Dazu musst Du die Funktion nur geringfügig umbauen:

C#-Code:
/// <summary>
/// Gibt den Inhalt eines bestimmten Outlook-Ordners als Tabelle zurück.
/// (Wurde nur mit einer deutschen Outlook-version getastet!)
/// </summary>
/// <param name="mapiProfile">Name des MAPI-Profils (z.B. "MS Exchange-Einstellungen"), einzusehen in Systemsteuerung -> Mail</param>
/// <param name="displayUserName">Anzeigename des Benutzers (z.B. "Max Mustermann")</param>
/// <param name="rootFolder">Stammordner</param>
/// <param name="folderName">Name des Ordners (z.B. "Posteingang")</param>
/// <returns>Inhalt des Outlook-Ordners</returns>
private DataTable GetOutlookFolderData(string mapiProfile, string displayUserName,string rootFolder, string folderName)
{
    // Verbindungszeichenfolge erzeugen
    string connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Exchange 4.0;MAPILEVEL=Postfach - {0}|{3};PROFILE={1};TABLETYPE=0;DATABASE={2};", displayUserName, mapiProfile, Environment.GetEnvironmentVariable("TEMP"),rootFolder);

    // SQL-Abfrage erzeugen
    string sql = string.Format("SELECT * FROM {0}", folderName);

    // Neue Tabelle erzeugen
    DataTable result = new DataTable(folderName);

    // Verbindung zu Outlook herstellen
    using (OleDbConnection connection = new OleDbConnection(connectionString))
    {
        // Datenadapter bauen
        OleDbDataAdapter adapter = new OleDbDataAdapter(sql, connection);

        // Inhalt des Outlook-Ordners abrufen
        adapter.Fill(result);
    }
    // Tabelle mit Ordnerinhalt zurückgeben
    return result;
}

Um z.B. auf den Ordner "Posteingang\Archiv\Faxe" zuzugreifen, wäre folgender Aufruf nötig:

C#-Code:
DataTable result=GetOutlookFolderData("Outlook","Max Muster","Posteingang","Archiv\Faxe");
18.09.2007 09:22 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Alastair Alastair ist männlich
myCSharp.de-Mitglied

Dabei seit: 19.09.2007
Beiträge: 4
Entwicklungsumgebung: c#
Herkunft: Frankfurt


Alastair ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Kann ich auf diesem Weg auch auf einen Öffentlichen Ordner zugreifen? Z.B. durch Veränderung des Mapilevels? Hab ein bissel mit deinem Code experimentiert, es aber nicht zustande gebracht.

Viele Grüße
19.09.2007 18:00 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
GTi-Schumi GTi-Schumi ist männlich
myCSharp.de-Mitglied

Dabei seit: 07.09.2007
Beiträge: 18
Entwicklungsumgebung: Visual Studio 2005
Herkunft: Murrhardt


GTi-Schumi ist offline MSN-Passport-Profil von GTi-Schumi anzeigen

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

C#-Code:
private DataTable GetOutlookFolderData(string mapiProfile, string rootFolder, string folderName)
{
    // Verbindungszeichenfolge erzeugen
    string connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Exchange 4.0;MAPILEVEL="Öffentliche Ordner"|{2};PROFILE={0};TABLETYPE=0;DATABASE={1};", mapiProfile, Environment.GetEnvironmentVariable("TEMP"),rootFolder);//beachte das MAPILEVEL und im Rootfolder kannst dann die unterordner angeben

    // SQL-Abfrage erzeugen
    string sql = string.Format("SELECT * FROM {0}", folderName);

    // Neue Tabelle erzeugen
    DataTable result = new DataTable(folderName);

    // Verbindung zu Outlook herstellen
    using (OleDbConnection connection = new OleDbConnection(connectionString))
    {
        // Datenadapter bauen
        OleDbDataAdapter adapter = new OleDbDataAdapter(sql, connection);

        // Inhalt des Outlook-Ordners abrufen
        adapter.Fill(result);
    }
    // Tabelle mit Ordnerinhalt zurückgeben
    return result;
}

Versuch es mal so

jeder weitere Unterordner wird mit einem ' | ' getrennt

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von GTi-Schumi am 20.09.2007 08:46.

20.09.2007 08:19 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Alastair Alastair ist männlich
myCSharp.de-Mitglied

Dabei seit: 19.09.2007
Beiträge: 4
Entwicklungsumgebung: c#
Herkunft: Frankfurt


Alastair ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Vielen Dank für deine Antwort. Hat genauso funktioniert.
20.09.2007 15:06 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
GTi-Schumi GTi-Schumi ist männlich
myCSharp.de-Mitglied

Dabei seit: 07.09.2007
Beiträge: 18
Entwicklungsumgebung: Visual Studio 2005
Herkunft: Murrhardt


GTi-Schumi ist offline MSN-Passport-Profil von GTi-Schumi anzeigen

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi hast du ne idee wie die ordnerstruktur auslessen kann? Aslo z.b das ich sehen kann welche ordner alle in diesem Postfach angehängt sind z.b Postfach von - ... , Alle öffentliche Ordner oder Archivordner das muss ich noch auslesen

Vielen Dank schon mal

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von GTi-Schumi am 24.09.2007 12:37.

24.09.2007 12:36 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Alastair Alastair ist männlich
myCSharp.de-Mitglied

Dabei seit: 19.09.2007
Beiträge: 4
Entwicklungsumgebung: c#
Herkunft: Frankfurt


Alastair ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Da war ich wohl etwas schnell mit meinem "Hat alles funktioniert"^^

Auf meinem Vista-Rechner funktioniert der Zugriff auf die Öffentlichen Ordner einwandfrei.

Aber auf meinem XP-Rechner bekomme ich eine Fehlermeldung. Die Exception wird immer bei adapter.Fill(result); ausgelöst

"Es wurde versucht im geschützten Speicher zu schreiben oder zu lesen. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist"

Google weiss nichts dazu.


Dann habe ich mir mal den Spass gemacht und das ganze auf unserem Terminal Server probiert und da bekomme ich dann folgende Meldung:

"Für mindestens einen erforderlichen Parameter wurde kein Wert angegeben."

Das spricht eigentlich für einen fehlerhaften SQLString, der aber auf dem anderen Rechner ja einwandfrei funktioniert.



Hat jemand von euch schon mal solche Fehlermeldungen in diesem Zusammenhang gehabt?
26.09.2007 10:09 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegt mehr als ein Monat.
Travin Travin ist männlich
myCSharp.de-Mitglied

Dabei seit: 16.11.2007
Beiträge: 16
Entwicklungsumgebung: C#, Delphi


Travin ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

also bei mir funktioniert das wunderbar. danke für die hilfe

eine kleine frage hätt ich da noch... wenn ich die mails abfrage, zeigt er mir nicht den text der mail an. wie kann ich das ändern?
16.11.2007 16:11 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Rainbird Rainbird ist männlich
myCSharp.de-Poweruser/ Experte

avatar-2834.jpg


Dabei seit: 28.05.2005
Beiträge: 3.723
Entwicklungsumgebung: Visual Studio 2012
Herkunft: Mauer

Themenstarter Thema begonnen von Rainbird

Rainbird ist offline

Sensibles Outlook

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Outlook ist ziemlich sensibel und außerdem die Office-Anwendung mit den meisten Bugs. Der OLEDB-Zugriff auf Outlook wird von Microsoft auch eher stiefmütterlich behandelt.

Deshalb bin ich davon mittlerweile eher abgekommen. Als Alternative gibt es z.B. Redemption RDO ( http://www.dimastr.com/redemption/rdo/default.htm). Ist zwar eine COM-Komponente, funktioniert aber auch sehr gut mit .NET.
Natürlich kann man auch direkt auf den Exchange Server zugreifen. Beim Exchange Server 2000/2003 geht das übers WebDAV-Protokoll (http) und beim Exchange Server 2007 über dessen SOAP-Webservices.

Bevor also jemand graue Haare wegen des OLEDB-Zugriffs auf Outlook bekommt, sollte er lieber einen anderen Weg nehmen. Das soll nicht heißen, dass OLEDB-Zugriff grundsätzlich schlecht ist, aber ich würde es z.B. nie für eine Anwendung einsetzen, die bei vielen verschiedenden Kunden mit unterschiedlichen Konfigurationen, Office-Versionen und dergleichen laufen muss.
19.11.2007 08:16 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Travin Travin ist männlich
myCSharp.de-Mitglied

Dabei seit: 16.11.2007
Beiträge: 16
Entwicklungsumgebung: C#, Delphi


Travin ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

hm... merkwürdige sache das...

wenn ich mir selbst eine mail schreibe, kann ich den text sehen...
bei nem auto delivery seh ich den text nicht... warum?

ich benutze zum filtern des nachrichtentextes die eigenschaft NAchrichtentext (hm macht sinn oder Augenzwinkern warum dieser unterschied?)
20.11.2007 10:06 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Travin Travin ist männlich
myCSharp.de-Mitglied

Dabei seit: 16.11.2007
Beiträge: 16
Entwicklungsumgebung: C#, Delphi


Travin ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

ok. grad rausgefunden warum.... bei den normalen mails ist der text tatsächlich text.. bei den anderen ist der text anhang, der im textfeld eingeblendet ist... erklärt einiges... nur wie greife ich darauf zu?
20.11.2007 11:08 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
|Thomas|
myCSharp.de-Mitglied

Dabei seit: 03.12.2007
Beiträge: 3


|Thomas| ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

hallo!

Wie würde das aussehen wenn ich nicht auf die EMails zugreifen will sondern auf die Kontaktdaten?
03.12.2007 15:46 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegen mehr als 3 Monate.
Nergal Nergal ist männlich
myCSharp.de-Mitglied

Dabei seit: 06.03.2008
Beiträge: 59
Entwicklungsumgebung: VisualStudio 2005
Herkunft: Hiddenhausen


Nergal ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zu welcher Variante würdet ihr greifen, wenn ihr die Email mit allen Formatierungen (Schriftart, Fett, Kursiv, ...) auslesen wollt? Geht das überhaupt?

/edit

hat sich erledigt

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Nergal am 11.03.2008 08:55.

10.03.2008 17:49 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegen mehr als 3 Monate.
Spikocalypse Spikocalypse ist männlich
myCSharp.de-Mitglied

Dabei seit: 01.07.2008
Beiträge: 21
Entwicklungsumgebung: Visual Studio 2008, Blend 3
Herkunft: ER


Spikocalypse ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi zusammen

ich habe den Code bei mir auch abgewandelt im Einsatz, angepasst auf meine Bedürfnisse, funktioniert auch wunderbar für das was ich brauche.

Allerdings: Ich habe das Problem, dass ich die Spalte "Ungelesen" nicht gefüllt bekomme. Weiß jemand, wie ich über diesen Weg an die Info komme, ob eine Mail im gelesenen oder ungelesenen Zustand ist?

Exchange-Server 2003

Ich brauche nur die Ungelesenen Mails eigentlich

Wäre schön wenn jemand was weiss, oder nen alternativen Weg, wie ich in einer C#(WPF)-Anwendung an die ungelesenen Mails des Posteingangs eines Postfaches (Exchange) komme. Ich hab mich mit der Sache befasst, und die Lösung "Redemption" ist als Fremd-Dll bei mir in der Firma eher nicht angesagt, leider. Alles so stocksteif :-(


gruß
01.07.2008 15:53 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegen mehr als 9 Monate.
Blackhawk50000 Blackhawk50000 ist männlich
myCSharp.de-Mitglied

Dabei seit: 29.04.2008
Beiträge: 58
Entwicklungsumgebung: Visual Studio 2008
Herkunft: Sachsen-Anhalt


Blackhawk50000 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi, ich habe zu diesem Programm auch einige Fragen!

1. Greife ich damit wirklich auf Outlook zu? oder auf den Exchange Server???
2. Wie kann ich auf den Exchangeserver zugreifen falls ich das nicht schon tue?
3. Wie kann ich einen einen Servernamen auswählen und kann ich das Überhaupt?
4. Kann ich das auch so machen, dass ich Username und Passwort über eine Form eingeben muss? Wenn ja, wie in etwa?
03.04.2009 11:18 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 13 Jahre.
Der letzte Beitrag ist älter als 11 Jahre.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 22.09.2020 09:45