2012-04-09 5 views
1

私には要件があります。会社固有のドメインにあるユーザーのメールにアクセスする必要があります。そのユーザーのカレンダーを取得してWebアプリケーションに公開する必要があります。私はそれをするのに役立つAPIを見つけるのに疲れている。会社によって使用される電子メールクライアントはThunder Birdです。具体的には、特定のユーザーのためにThunder Birdからカレンダーにアクセスする必要があります。誰にでも私にこのことに対するいくつかの示唆を伝えることができます。Javaを使用しているユーザの電子メールアドレスのカレンダーにアクセスする

答えて

0

クマール

は、あなたの質問は非常にunpreciseです(電子メール/カレンダーを提供するサーバでのどのような?LDAPドメインはありますか?などなど)。検索中にドメインやWebDAVと問題があるため、古いExchange Serverについて話していると思いますか?しかし、多分あなたに少しでも助けを与えることができます。それはあなたがすでに他のコーダーの道を踏ん張っている可能性があるので、簡単で迅速な解決策を見つけることができます。

今日、私は、概念実証としてM $ Exchange 2003コネクタを完成させました。そして、私はあなたに教えてください、それは本当に私はインターンシップの間学生として私には難しいと言いました。それにもかかわらず、有用なAPIのヒントを得るために他の人を研究し、検索し、質問し、悩ませましたが、私の目的を達成したものはありませんでした。

使用するのがいい小さなフレームワークは、Sardine WebDAV Client for Javaと呼ばれています。このプロジェクトは非常に軽量ですが、いつでも見ることができるソースのために、WebDAVのしくみを理解することが役に立ちました。

他のすべてのソリューションは、さまざまなMAPI CC++ Libs for Linuxを対象としています。それは私のための選択肢でした。

どのようなオプションがありますか?お客様のExchange 2k3サーバーに直接アクセスするのではなく、1つの電子メールアカウント。だから皆さんは私を許してもらえるかもしれませんが、OWA経由でE2k3サーバーにPOST要求をするほうがはるかに簡単です。

OWAフォームからフォームフィールド情報を取得し、サーバーに投稿する接続文字列を作成することがあります。おそらくこれはあなたにアイデアを与える文字列です。ですから、このようなDLLを呼び出す必要があります:

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")); 

フォームベースの認証を行うためにどのような情報はこちらから来た:Exchange 2003 Forms-Based Authentication。あなたが見ることができるように、私はブラウザからE2kと通信するために使用されるリンクをつかんだ。次のステップは簡単です。リクエストを送信してお待ちください...

返信で良好な回答が得られた場合は、セッションIDを除外することができます。ログインに成功した後の次のステップは、予定を検索することです。したがって、いくつかの情報についてM $に問い合わせることによって、確立されたWebDAV接続で適切な方法を見つける必要があります。SEARCH Method

次に、できることを読んでください。私はよく知られているFind-Machineに行き、Searching Calendar Folders with WebDAVの質問をしました。

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

は今、あなたは検索方法を利用することができます:

は、その後、あなたは、このようなPOSTリクエストを作成することができます。あなたのプログラムが要求を送る準備が整っているので、それは良いことです。

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

私はそれが完璧な解決策ではないことを知っています。私には2つの状況があったので、私は不思議に思った。まず、私はセッションIDを取得しましたが、フィールドに保管していればどこでも再利用する必要はありませんでした。もう一つは、別のHttpClientを呼び出す必要がありました。私は今説明することができません。ログオンに使用したのと同じHttpClientを使用した場合、すべてのリクエストは無駄でした。だから私は別のHttpClientを呼び出さなければならなかったのです。

最後に難しいのは、私が行った唯一のデバッグヘルプは、MSDNのHTTPエラー番号と悪い記述だったので、クエリーを取り消すことでした。そのために残念。さて、これは本当にうまくいきました。私はTrial and Errorでそれを後にしました。

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>"; 

これは特定のクエリではありません。私はちょうど別のドキュメントからそれを交替し、私が必要としなかったすべてのものを取り除いた。

私はこれが少し助けてくれることを願っています。 Thunderbirdのアポイントメント/カレンダーの日付の提供についてこれは私の知るところではないので何も言いません。

敬具と良い夜、

セモ

+1

感謝。私はあなたの助けに感謝することをほとんど忘れています。 –

関連する問題