Java liest Mails

Es gibt Tage, da wird einem die Trennung zwischen der Berufswelt und dem Leben als Java-Programmierer so recht bewusst. Während man in seinem beruflichen Umfeld eifrig mit der Office-Suite (Word, Excel, Powerpoint) arbeitet, beschäftigt man sich bei der Java-Programmierer eher mit XML-Dokumenten und SVG-Grafiken.

Besonders offensichtlich ist aber der Unterschied, sobald man sich mit dem Senden und Empfangen von eMails beschäftigt. Hier ist in der UNIX und Java Welt ein IMAP oder POP Server das Mittel der Wahl. Gesendet wird die Mail dann natürlich wie selbstverständlich an einen SMTP Server. Das Mittel der Wahl für die Kommunikation mit diesen Systemen ist dabei das altbewährte JavaMail API. Dieses unterstützt die meisten Operationen, die für das Senden und Empfangen von eMails benötigt werden. Aber eben leider nur für IMAP, POP und SMTP Server.

Im Büroalltag sieht das aber ganz anders aus. Hier wird Outlook genutzt und die Mails werden - branchenüblich - durch einen Exchange Server gehostet. Die Möglichkeiten des JavaMail APIs reichen für diesen Server allerdings leider nicht.

moyosoft Java Bridge to Exchange

Das Unternehmen moyosoft hat mit jbex ein API für den Zugriff auf Exchange Server bereitgestellt. Für meine ersten Tests habe ich die frei erhältliche Demo-Version genutzt. Diese ist vom Funktionsumfang leicht eingeschränkt 30 Tage lang nutzbar. Danach ist mindestens eine Entwicklerlizenz für 199$ zu erwerben.

Bereits mit der Demo-Version konnte ich die gewünschte Funktionen in einer Web-Anwendung umsetzen:

  • Empfang und Auswertung von Excel-Dateien, die per eMail zugestellt werden.
  • Aussenden einer automatischen Bestätigung nach Verarbeitung der Informationen.

Für den Empfang der eMail ist nur ein Zugriff auf die INBOX des Exchange Servers notwendig. Dazu wird in der Web-Anwendung ein regelmäßig ablaufender Service aktviert, der den Exchange Server auf neu empfangene eMails hin untersucht.

	Exchange exchange = new Exchange(
			serverHost, user,
			password, domain);
	ExchangeFolder inbox = exchange.getInboxFolder();
	ItemsCollection collection = inbox.getItems();
	for (ExchangeItem item : collection) {
		ExchangeMail mail = (ExchangeMail) item;
		...
	}

Da für die gewünschte Funktionalität insbesondere die an die eMail angehängten Dokumente interessant sind, müssen diese aus der Mail abgefragt werden:

	AttachmentsCollection attachments = mail.getAttachments();
	for (ExchangeAttachment attachment : attachments) {
		if (attachment instanceof ExchangeFileAttachment) {
			ExchangeFileAttachment file = (ExchangeFileAttachment) attachment;
			String fileName = file.getName();
			String mimeType = file.getContentType
			InputStream stream = file.getContentAsStream();
			...
		}
	}

Die Prüfung auf den Type ExchangeFileAttachment ist notwendig, da mit Outlook und Exchange auch Kontakte und Termine verschickt werden können. Diese Objekte sind zwar auch als Attachment modelliert, habe aber keine dezidierte, austauschbare Repräsentation als Datei.

Über den InputStream kann die Datei in der gewohnten Art und Weise durch die Anwendung weiter verarbeitet werden. In diesem Fall bedeutet das, dass in diesem Stream eine Excel-Datei enthalten ist, die mit der POI Bibliothek analysiert und weiter verarbeitet wird. Diese Schritte unterscheiden sich jedoch nicht wesentlich von der bisherigen Lösung, die den Upload dieser Dateien in die Anwendung erforderte.

Mein aktuelles Fazit

Mit diesen wenigen Funktionen kann in einer unserer firmeninternen Web-Anwendungen ein Datenaustausch per eMail realisiert werden der ein umständlicheres Verfahren ersetzen wird. Die so vereinfachte Nutzung der Anwendung wird dann hoffentlich künftig in einer verstärkten Nutzung münden.

Doch auch neben dem aktuellen Anwendungsfall ermöglicht diese jbex Bibliothek aufgrund ihrer einfachen Struktur, künftig verstärkt eMail-basierte Workflows aufzubauen und interne Dienste stärker miteinander zu verknüpfen. Hier ergeben sich auch neue Szenarien für Kundenprojekte, in denen vielfach auch heute noch ein manuell geprägter Datenaustausch per eMail verwendet wird. Eine automatisierte Verarbeitung von eMails und die Nutzung der vorhandenen Exchange Infrastruktur kann die Durchlaufzeiten und die Anzahl der Bedienfehler reduzieren.

Eigentlich ein ziemlicher großer Effekt, der für die vergleichsweise günstige 199$ Investition erzielt werden kann.

Weitere Artikel: