Laden...

outlook kontakte auslesen geht nicht!?

Erstellt von tomschrot vor 18 Jahren Letzter Beitrag vor 18 Jahren 2.983 Views
T
tomschrot Themenstarter:in
73 Beiträge seit 2004
vor 18 Jahren
outlook kontakte auslesen geht nicht!?

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

MS

gehalten

oder was übersehen???

C
156 Beiträge seit 2004
vor 18 Jahren

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

T
tomschrot Themenstarter:in
73 Beiträge seit 2004
vor 18 Jahren

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

-
885 Beiträge seit 2004
vor 18 Jahren

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.

C
156 Beiträge seit 2004
vor 18 Jahren

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

-
885 Beiträge seit 2004
vor 18 Jahren

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...

200 Beiträge seit 2004
vor 18 Jahren

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

T
tomschrot Themenstarter:in
73 Beiträge seit 2004
vor 18 Jahren

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.

200 Beiträge seit 2004
vor 18 Jahren

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();
}
}


T
tomschrot Themenstarter:in
73 Beiträge seit 2004
vor 18 Jahren

Tom_MUE:

yeah! funzt. -so was beknacktes, die unergründlichen weiten des .net....

danke!

4.506 Beiträge seit 2004
vor 18 Jahren

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!”