我有一个要求。 我需要访问用户的电子邮件是对公司的具体领域。 我需要得到该用户的日历,并将其发布到Web应用程序。 我筋疲力尽发现任何API,可以帮助我做到这一点。 由公司使用的电子邮件客户端迅雷鸟,因此,在具体的,我需要从雷霆鸟进入压光机的针对特定用户。 任何一个可以告诉我一些这方面的建议。
Answer 1:
库马尔
你提的问题是非常unprecise(什么样的是提供电子邮件/日历服务器?是否有一个LDAP域?等等)。 我想你说的是因为某些域的旧Exchange Server和WebDAV和问题,同时搜索? 不过,我也许可以给你至少有点帮助,这可能导致你已经走过其他编码器的路径,所以,你会发现一个简单而快速的解决方案。
今天我完成了一个M $的Exchange 2003连接器作为证据的概念。 我告诉你,那是很艰难的 ,我作为一个同时实习的学生。 然而,我的研究和搜查,查询和烦恼等得到提示进行了有益的API,但没有实现我的目的。
一个小框架,我发现这是很好的使用被称为沙丁鱼WebDAV客户端的Java 。 该项目是非常重量轻,虽然这是有帮助的得到一个想法的WebDAV是如何工作的,甚至因来源,随时可以看。
所有其他解决方案针对许多不同的MAPI CC ++利布斯的Linux。 这对我来说没有任何选项。
所以,我也有什么选择? 没有直达客户的Exchange服务器2K3,但一个电子邮件帐户。 所以,你都可以原谅我,但我发现它更容易让一个POST请求,通过OWA的E2K3服务器,因为它不是试图访问的一些重型的lib支持的方式激活。
也许这涉及到你的利用 - 您可以通过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的基于表单的身份验证 。 正如你可以看到我从浏览器链接,用于与E2K沟通抓起。 下一步很简单 - 发送请求,并等待...
HttpResponse response = httpclient.execute(httpPost);
如果你得到的回报良好的反应,那么你就可以过滤掉的会话ID。 登录成功后,下一步是寻找约会。 因此,你应该找到一个合适的方法与已建立的WebDAV的连接上通过询问一些信息M $的工作: 搜索方法
然后,你看它能做什么。 我去一个知名查找-机和查询的搜索日历文件夹使用WebDAV 。
之后,你可以创建一个这样的POST请求:
HttpPost hp = new HttpPost(
"https://owa.SERVER.de/exchange/USER/Calendar") {
@Override
public String getMethod() {
return "SEARCH";
}
};
现在,您可以使用搜索方法。 这是一个好,因为你的程序已经准备好发送请求。
hp.setEntity(new StringEntity(QUERY, ContentType.TEXT_XML));
HttpResponse response = httpclient2.execute(hp);
我知道这是没有完美的解决方案。 因为有这让我怀疑两种情况。 首先:我检索到的会话ID,但我并不需要在任何地方重新使用它,只要我一直是在一个领域。 其次:我需要调用另一个HttpClient的。 我现在不能解释。 如果我用我用于登录同一HttpClient的,那么所有的请求都白费了。 这就是为什么我不得不打电话给另一个HttpClient的。
最后也是最困难的一步是要得到查询后面,因为只有调试帮助,我所做的是HTTP错误编号,并在MSDN坏的说明。 对不起,我这一点。 那么,这真的是工作的罚款。 我得到了它背后有试验和错误。
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>";
这是没有特定的查询。 我刚刚从另一个文档交替,并删除了所有的东西,我didnt't需要。
我希望这可以帮助你一点。 关于提供雷鸟约会/日历日期,我不能告诉任何东西,因为这又是超出了我的知识。
最好的问候,晚安,
塞莫