Zugriff auf Outlook Kontakte

tactar

Grünschnabel
Hallo Leute,

ich habe in diesem Thema (http://www.tutorials.de/forum/java/206568-outlook-steuern-mit-java-2.html) gelesen, wie man prinzipiell auf Outlookdaten zugreifen kann. Dabei habe ich mich entschieden, mit dem JACOB-Tool zu arbeiten und habe folgenden Sourcecode heruntergeladen und getestet:
Java:
import java.io.*; 
import com.jacob.activeX.*;
import com.jacob.com.*;

public class Uebung01 {
public static void main(String[] args) throws IOException {
final int olFolderContacts = 10;


//output logfilename mit path
String file = "c:\\temp\\logfile.txt";
BufferedWriter out = new BufferedWriter(
	  new OutputStreamWriter(
		new FileOutputStream( file ) ) );

ActiveXComponent ol = new ActiveXComponent("Outlook.Application");
Dispatch dsp = new Dispatch();

Object olo = ol.getObject();
Object myNamespace = Dispatch.call(olo, "GetNamespace", "MAPI").toDispatch();
Object myFolder = Dispatch.call(myNamespace, "GetDefaultFolder", new Integer(olFolderContacts)).toDispatch();

Object items = Dispatch.get(myFolder, "Items").toDispatch();

int count = Dispatch.call(items, "Count").toInt();

for (int i = 1; i <= count; i++) {
Object item;
item = Dispatch.call(items, "Item", new Integer(i)).toDispatch();

String firstname = Dispatch.get(item, "firstname").toString();
String lastname = Dispatch.get(item, "lastname").toString();
String fullName = Dispatch.get(item, "Fullname").toString();
String emailAddress = Dispatch.get(item, "Email1Address").toString();
String addressStreet = Dispatch.get(item, "BusinessAddressStreet").toString();
String addressCity = Dispatch.get(item, "BusinessAddressCity").toString();
String addressCountry = Dispatch.get(item, "BusinessAddressCountry").toString();
String addressPostalCode = Dispatch.get(item, "BusinessAddressPostalCode").toString();
String addressState = Dispatch.get(item, "BusinessAddressState").toString();
String title = Dispatch.get(item, "Title").toString();
String phone = Dispatch.get(item, "BusinessTelephoneNumber").toString();
String fax = Dispatch.get(item, "BusinessFaxNumber").toString();
String privat = Dispatch.get(item, "HomeTelephoneNumber").toString();
String mobil = Dispatch.get(item, "MobileTelephoneNumber").toString();
String webpage = Dispatch.get(item, "Webpage").toString();

	logData( firstname, out );
	logData( lastname, out );
	logData( addressStreet, out );
	logData( addressCity, out );
	logData( addressState, out );
	logData( addressPostalCode, out );
	logData( addressCountry, out );
	logData( phone, out );
	logData( fax, out );
	logData( privat, out );
	logData( mobil, out );
	logData( emailAddress, out );
	logData( webpage, out );
	out.newLine();
	
}										
out.close();

}										


public static void logData(String value, BufferedWriter out ) throws IOException {
		out.write( value );
		out.write( ";" );
									}										
}

Allerdings wirft der Code eine Exception:
Exception in thread "main" com.jacob.com.ComFailException: Can't map name to dispid: firstname

Dabei wird zuersten eine gewisse Anzahl Kontakte korrekt ausgegeben. Aber jedes Mal, wenn er auf eine Verteilerliste stößt (die sich ja auch im Kontakt-Ordner befindet), kommt dieser Fehler.

Weiß jemand eine Möglichkeit, um abzufragen, ob das Item in den Kontakten einen Kontakt oder eine Verteilerliste darstellt?
 
Falls dazu niemand eine Lösung weiß, was gibt es für Alternativen? ADO? Gibt es eine Möglichkeit, den Outlook-Export zu automatisieren? Dh. ich hätte dann die CSV-Datei und kann mit einem Tool diese in ein XML umwandeln (csv2xml oder sowas ähnliches gibt es sicher), das ich dann mit Java dom4j einlese?
 
Vielen Dank für den Hinweis, aber das ist nicht das Problem.
Mittlerweile gebe ich nur noch eine einzige Variable aus, und zwar so:

Java:
			String sName = Dispatch.get(item, "LastNameAndFirstName").toString();
			System.out.println(sName);

Und eigentlich funktioniert der Code ja, bis zu einem gewissen Punkt. Er gibt ca. 50 Namen aus, genau so lange bis er auf eine Verteilerliste stößt (Kontakte und Verteilerlisten werden ja gleichermaßen im Ordner Kontakte gespeichert). Und da kommt die Exception...
 
Hallo,

Und eigentlich funktioniert der Code ja, bis zu einem gewissen Punkt. Er gibt ca. 50 Namen aus, genau so lange bis er auf eine Verteilerliste stößt (Kontakte und Verteilerlisten werden ja gleichermaßen im Ordner Kontakte gespeichert). Und da kommt die Exception...
Da gibts sicherlich ein Property was als Diskriminator-Wert zu Unterscheidung verwendet werden kann.

-> http://www.datalife.com/yitz/automation/ol_constants.html

Gruß Tom
 
Zurück