hallo,
habe ein outlook 2002 (outlook 10.0 lib dll) installiert und möchte die kontakte auslesen:
using System;
using System.Runtime.InteropServices;
using Outlook;
namespace XChange
{
class MainClass
{
public static void Main(string[] args)
{
Console.WriteLine("Hello Outlook!");
Application app = (Outlook.Application)new Application() ;
NameSpace ns = app.GetNamespace("MAPI");
MAPIFolder tk = ns.GetDefaultFolder( OlDefaultFolders.olFolderContacts );
ns.Logon(null, null, true, true);
foreach(ContactItem cont in tk.Items)
{
//...
}
ns.Logoff();
}
}
}
gibt aber schon beim kompilieren immer den fehler
1579: foreach statement cannot operate on variables of type outlook.items ...does not contain GetEnumerator....
??
habe mich aber an die vorgehensweise von
gehalten
oder was übersehen???
Hallo,
also erstmal dein Code funktioniert. 🙂 Hab mir gerade die Vor und Nachnamen meines Outlook Adressbuches ausgelesen.
Ich habe allerding Outlook 2003 im Einsatz und "nur" ca. 250 Kontakte.
Ausserdem habe ich mir einen Verweis auf dem Outlook Automation Server gelegt.
Projekt--> Verweis hinzufügen--> COM--> Microsoft Outlook XX.
Hoffe ich konnte ein bißchen helfen.
Gruß
chaossurfer
chaossurfer:
stimmt, sollte auch funktionieren, code stammt ja von ms. bei mir, wie gesagt, gehts schon beim compilieren in die hose!? ich hab ja auch eine referenz auf die outlook com dll eingetragen. allerdings ist auf meinem rechner nur (!!!) outlook installiert, kein komplettes office.
wer weiss ob office evtl. einen wrapper installiert der zusätzlich installiert werden muß?
hilfe wäre echt nett.
grüße,
ts
mach dir doch mal einen systemwiederherstellungspunkt und installier mal office ums zu testen... ich hatte das auch mal so ähnlich und es funktionierte erst, nachdem office installiert war bzw. ein teil davon installiert war.
Da es am Code nicht liegt... gehe ich auch davon aus das irgenwas von Outlook bzw. Office fehlt...
Vieleicht kann es ja jemand hier probieren der auch nur Outlook installiert hat.
Gruß
CS
Hm leider hab ich das nicht sonst würde ich dir helfen. Kenne auch keinen der sowas hat. Schau doch mal bei VMWare vorbei sowas ist echt gut...
Hallo @tomschrot,
Das was Du versuchst ist mit einem VW golf vom Typ eins gegen einen Baum zu fahren und Dich darauf zu verlassen das der Airbag aufgeht weil es ja ein Golf ist. Kann er aber nicht da der Golf eins vom Werk aus keinen Airbag eingebaut bekommen hat. OK 😉 bisschen weit hergeholt.
Das Beispiel das Du als reference genommen hast, ist expliziet für Oulook 2003. Steht auch ganz oben auf der Seite die Du als Link hinzugefügt hast. Du selbst hast aber die ObjectLib von Outlook 2000 genommen und die implementiert keine GetEnumerator() Methode. Schau mal nach ob "MAPIFolder.Items" eine get_... Methode hat. Dann kannst Du sicher ein Array erstellen durch das Du dann iterieren kannst. Oder, Du referenzierst dir die ObjectLib von Office 11.
HTH
TOM_MUE
TOM_MUE:
airbag rulez....
hab aber trotzdem ein outlook 2002, und ne 10er dll -also nicht 2000. soweit ich das bei ms gelesen habe sollten praktisch kaum unterschiede zur 11er dll der 2003 version sein. hab natürlich auch schon nach einer get_ methode geschaut is aber nich...??
klar, wenn ich ein array hätte könnte ich auch mit for drüber gehen.
p.s. Items.Count geht und liefert einen zähler von 160 = anzahl der adressen in meinem outlook. kann mit dem debugger auch einen blick in die Items tun, sieht aber irgendwie komisch aus.
hi @tomschrot,
hm, leider habe ich keine Outlook Lib 10.0 sondern nur die 11.x. darum kann ich Dir kein direktes Sample leifern. Aber wenn es keine "get_..." Methode gibt, dann solltest Du vielleicht mal nachsehen ob Du eine GetNext() Emthode findest die Du dann in Verbindung mit einer while Schleife verwenden könnteest.
Ich denke wenn Du dabei nichts findest, das ich mir mal die 10.0 Lib von Outlook besorge und ein Sample schneider.
Gruß
TOM_MUE
PS: Habe gerade ein Sample für den InboxFolder von Outlook gefunden. Ist auch für die Lib Version 10.0 geschrieben.
First, be sure to add the "Microsoft Outlook 10.0" reference to your project.
Then, try this code snippet:
private void Spy()
{
Outlook.Application outlookApp;
Outlook.NameSpace outlookNamespace;
outlookApp = new Outlook.ApplicationClass();
outlookNamespace = outlookApp.GetNamespace("MAPI");
outlookNamespace.Logon("your_profile","your_password",true,true);
Outlook.MAPIFolder mapiFolder = outlookNamespace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
Outlook.Items oItems = mapiFolder.Items;
Outlook.MailItem mailItem = (Outlook.MailItem)oItems.GetFirst();
while (mailItem != null)
{
string strEmailContent = mailItem.Body;
mailItem = (Outlook.MailItem)oItems.GetNext();
}
}
Tom_MUE:
yeah! funzt. -so was beknacktes, die unergründlichen weiten des .net....
danke!
Hallo tomschrot!
Die Fehlermeldung
1579: foreach statement cannot operate on variables of type outlook.items ...does not contain GetEnumerator.... sagt doch eigentlich alles, oder?
Wenn Du foreach benutzt, muss das Objekt auch das Interface IEnumerable implementiert haben, dann ist es durchiterierbar.
Hat das Objekt das nicht, dann benutze doch anstatt foreach eine einfache while oder for Schleife, dann funktioniert das auch wieder.
Deshalb funktioniert auch der Code von TOM_MUE.
Ciao
Norman-Timo
A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”