2012-04-09 4 views
1

Ich habe eine Anforderung. Ich muss auf die E-Mail-Adresse eines Benutzers zugreifen, die sich in einer unternehmensspezifischen Domäne befindet. Ich muss den Kalender dieses Benutzers abrufen und in der Webanwendung veröffentlichen. Ich bin erschöpft, wenn ich irgendeine API finde, die mir dabei helfen kann. Der von der Firma verwendete E-Mail-Client ist Thunder Bird, also muss ich speziell auf die Kalender von Thunder Bird für diesen bestimmten Benutzer zugreifen. Kann mir jemand dazu ein paar Vorschläge machen?Ein Kalender von Benutzer E-Mail-Adresse mit Java

Antwort

0

Kumar

Ihre Frage sehr ungenau ist (was für ist der Server die E-Mails/Kalender bereitstellt? Gibt es eine LDAP-Domain? Und so weiter). Ich nehme an, Sie sprechen über einen alten Exchange Server wegen einer Domain und WebDAV und Probleme bei der Suche? Aber ich kann dir vielleicht wenigstens ein bisschen Hilfe geben, die dich zu bereits ausgetretenen Pfaden anderer Programmierer führen kann, damit du eine einfache und schnelle Lösung finden kannst.

Heute habe ich einen M $ Exchange 2003 Connector als Proof-of-Concept beendet. Und ich sage dir, dass es wirklich hart für mich als Student während eines Praktikums war. Nichtsdestotrotz recherchierte und durchforstete und suchte ich andere, um Hinweise für eine nützliche API zu bekommen, aber keine erfüllte meine Ziele.

Ein kleiner Rahmen, den ich gefunden habe, der schön zu verwenden ist, heißt Sardine WebDAV Client for Java. Das Projekt ist sehr leichtgewichtig, obwohl es hilfreich war, eine Idee zu bekommen, wie WebDAV funktioniert, sogar aufgrund von Quellen, die Sie immer betrachten können.

Alle anderen Lösungen für viele verschiedene MAPI CC++ - Bibliotheken für Linux. Das war keine Option für mich.

Also, welche Möglichkeiten hatte ich? Kein direkter Zugriff auf die Kunden Exchange 2k3 Server, aber ein E-Mail-Konto. Ihr mögt mir also vergeben, aber ich fand es viel einfacher, eine POST-Anfrage über OWA an den E2k3-Server zu stellen, weil es aktiviert wurde, als einige der von der lib-Seite unterstützten Möglichkeiten des Zugriffs auszuprobieren.

Vielleicht kommt dies zu Ihrem Vorteil- Holen Sie sich die Formularfeldinformationen aus dem OWA-Formular und erstellen Sie eine Verbindungszeichenfolge Sie Post auf dem Server. Vielleicht ist dies eine Zeichenfolge, die Ihnen eine Idee geben könnte. Sie müssen also, wie dies eine DLL nennen:

HttpPost httpPost = new HttpPost("https://" + getUrl() 
     + "/exchweb/bin/auth/owaauth.dll"); 

httpPost.setEntity(new StringEntity("destination=https%3A%2F%2F" 
    + getUrl() + "%2Fexchange%2F&flags=0&username=" + getUser() 
    + "&password=" + getPassword() 
    + "&SubmitCreds=Log+On&trusted=4&flags=4", "UTF-8")); 

Die Informationen, wie Sie eine formularbasierte Authentifizierung machen kam von hier: Exchange 2003 Forms-Based Authentication. Wie Sie sehen können, habe ich aus dem Browser den Link genommen, mit dem man mit dem E2k kommunizieren kann. Der nächste Schritt ist einfach - die Anfrage senden und warten ...

HttpResponse response = httpclient.execute(httpPost); 

Wenn Sie eine gute Antwort dafür zu bekommen, dann können Sie die Session ID herauszufiltern. Der nächste Schritt nach einer erfolgreichen Anmeldung ist die Suche nach Terminen. Daher sollten Sie eine geeignete Methode finden, um mit einer bestehenden WebDAV-Verbindung zu arbeiten, indem Sie M $ nach einigen Informationen fragen: SEARCH Method

Dann lesen Sie, was es tun kann. Ich ging mit einer bekannten Find-Machine weiter und fragte nach Searching Calendar Folders with WebDAV.

Danach können Sie eine POST-Anforderung wie folgt erstellen:

HttpPost hp = new HttpPost(
    "https://owa.SERVER.de/exchange/USER/Calendar") { 
    @Override 
    public String getMethod() { 
     return "SEARCH"; 
    } 
    }; 

Jetzt können Sie die Verwendung des Suchverfahrens machen. Das ist gut, weil Ihr Programm bereit ist, die Anfrage zu senden.

hp.setEntity(new StringEntity(QUERY, ContentType.TEXT_XML)); 
HttpResponse response = httpclient2.execute(hp); 

Ich weiß, es ist keine perfekte Lösung.Weil es zwei Umstände gab, die mich wundern ließen. Erstens: Ich habe eine Sitzungs-ID abgerufen, aber ich brauchte sie nicht überall wieder zu verwenden, solange ich sie in einem Feld aufbewahrte. Und zweitens: Ich musste einen anderen HttpClient anrufen. Ich kann es jetzt nicht erklären. Wenn ich denselben HttpClient benutzt habe, den ich für die Anmeldung benutzt habe, waren alle Anfragen umsonst. Deshalb musste ich einen anderen HttpClient anrufen.

Der letzte und schwierigste Schritt war, hinter die Abfrage zu kommen, weil die einzige Debugging-Hilfe, die ich hatte, HTTP-Fehlernummern und die schlechten Beschreibungen in der MSDN waren. Das tut mir leid. Nun, das hat wirklich gut funktioniert. Ich bin mit Trial and Error dahintergekommen.

private final static String QUERY = "<?xml version=\"1.0\"?><g:searchrequest 
    xmlns:g=\"DAV:\"><g:sql> Select \"DAV:href\", \"urn:schemas:calendar:dtstart\", 
    \"urn:schemas:calendar:dtend\", \"urn:schemas:mailheader:subject\", 
    \"urn:schemas:calendar:duration\" FROM Scope('SHALLOW TRAVERSAL OF 
    \"/exchange/USER/Calendar\"')</g:sql></g:searchrequest>"; 

Dies ist keine bestimmte Abfrage. Ich wechselte es einfach von einem anderen Dokument und entfernte alles Zeug, das ich nicht brauchte.

Ich hoffe, das hilft Ihnen ein bisschen. Über die Bereitstellung von Thunderbird Termin/Kalenderdaten kann ich nichts sagen, da dies meines Wissens noch nicht bekannt ist.

Mit freundlichen Grüßen und gute Nacht,

Semo

+1

Dank. Ich vergesse fast, deine Hilfe zu schätzen. –

Verwandte Themen