我正在尝试创建一个简单的程序来阅读我公司的MS Exchange收件箱中的电子邮件。我写了一个简单的程序,如下所示,但它不工作。
有没有人能指引我,这里出了什么问题?我尝试了自动发现和URL模式。
当我运行该程序时,我看到以下输出:
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();
}
}
}发布于 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来匹配电子邮件地址。
https://stackoverflow.com/questions/25190531
复制相似问题