首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Java EWS阅读来自MS Exchange的电子邮件

使用Java EWS阅读来自MS Exchange的电子邮件
EN

Stack Overflow用户
提问于 2014-08-08 03:22:06
回答 1查看 2.3K关注 0票数 0

我正在尝试创建一个简单的程序来阅读我公司的MS Exchange收件箱中的电子邮件。我写了一个简单的程序,如下所示,但它不工作。

有没有人能指引我,这里出了什么问题?我尝试了自动发现和URL模式。

当我运行该程序时,我看到以下输出:

代码语言:javascript
复制
111111111111111 Aug 08, 2014 12:37:12 AM
org.apache.commons.httpclient.auth.AuthChallengeProcessor
selectAuthScheme INFO: NTLM authentication scheme selected Aug 08,
2014 12:37:12 AM org.apache.commons.httpclient.HttpMethodDirector
processWWWAuthChallenge INFO: Failure authenticating with NTLM <any
realm>@autodiscover.<cmpany>:443

程序:

代码语言:javascript
复制
package com.experiment;

import microsoft.exchange.webservices.data.ExchangeCredentials;
import microsoft.exchange.webservices.data.ExchangeService;
import microsoft.exchange.webservices.data.ExchangeVersion;
import microsoft.exchange.webservices.data.FindItemsResults;
import microsoft.exchange.webservices.data.Item;
import microsoft.exchange.webservices.data.ItemView;
import microsoft.exchange.webservices.data.WebCredentials;
import microsoft.exchange.webservices.data.WellKnownFolderName;

public class MSOutlookIntg {
    private static final String EMAIL_ID = "myid@company.com";
    private static final String EMAIL_PWD = "mypwd";

    public static void main(String[] args) {
        ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
        ExchangeCredentials credentials = new WebCredentials(EMAIL_ID, EMAIL_PWD);
        service.setCredentials(credentials);



        try {
            System.out.println("111111111111111");
            service.autodiscoverUrl(EMAIL_ID);
            //service.setUrl(new URI("https://<email-server>/EWS/Exchange.asmx"));
            service.setTraceEnabled(true);
            System.out.println("222222222222222");
            ItemView view = new ItemView(10);
            FindItemsResults<Item> findResults;

            findResults = service.findItems(WellKnownFolderName.Inbox, view);

            for(Item item : findResults.getItems())
            {
                item.load();
                System.out.println(item.getSubject());
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2014-08-08 03:50:57

您应该将service.setTraceEnabled移到ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2)之后的第一行。完整的跟踪是成功调试问题的关键。

顺便说一句。我必须自己实现一个跟踪侦听器。您是否具有附加到服务的工作跟踪侦听器?如果没有这一点,setTraceEnabled将不会有太多帮助。

你试过"EnableScpLookup“吗?

在我的例子中,将EnableSCPLookup设置为True从来都不是问题。它可能需要几毫秒才能返回适当的SCP记录,但大多数情况下它为我节省了20秒(!)等待https://autodiscover.company.com上的web服务器因https证书而超时(服务器等待客户端证书,客户端等待服务器回复...)。

此外,URL模式中出现了什么错误?它不能是相同的,因为当绕过自动发现时,你不应该得到一个“自动发现”错误...

EDITh说,你应该检查你的电子邮件是否与你的用户名相同。我认为你的证书必须包含UPN名称,而不是电子邮件?从Microsoft文档中并不完全清楚,因为Microsoft选择了UPN来匹配电子邮件地址。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25190531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档