使用Java EWS从MS Exchange读取电子邮件

时间:2014-08-07 19:22:06

标签: java exchangewebservices

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

有人可以指导我,这里有什么问题吗? 我尝试了自动发现和网址模式。

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

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

该计划:

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();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

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

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

您是否尝试过&#34; EnableScpLookup&#34;?

在我的情况下,将EnableSCPLookup设置为True从来都不是问题。它可能需要几毫秒,直到没有返回适当的SCP记录,但大部分时间它都节省了我20秒(!)等待https://autodiscover.company.com的Web服务器超时因为https证书(服务器等待)客户端证书和客户端等待服务器的回复...)。

此外,URL模式出现了什么错误?它可以是相同的,因为你不应该得到一个&#34;自动发现&#34;绕过自动发现时的错误...

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