我正在用java开发一个应用程序,以从交换服务器(版本10)获取电子邮件附件,我有Windows 7(32位)电脑。我的代码编译成功,但在运行时出错,说-
May 20, 2013 5:58:46 PM org.apache.commons.httpclient.auth.AuthChallengeProcessor selectAuthScheme
INFO: NTLM authentication scheme selected
May 20, 2013 5:58:47 PM org.apache.commons.httpclient.HttpMethodDirector processWWWAuthChallenge
INFO: Failure authenticating with NTLM <any realm>@autodiscover.mydomain.com:443
我的代码是-
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010);
ExchangeCredentials credentials;
credentials = new WebCredentials("myuser", "mypwd","mydomain");
service.setCredentials(credentials);
service.autodiscoverUrl("[email protected]");
如何解决此 NTLM 身份验证错误?
启用跟踪:
service.setTraceEnabled(true);
您确定您的 Exchange 版本是 2010 吗?使用这个指南来检查
也尝试删除
service.autodiscoverUrl("[email protected]");
就我而言,这是身份验证首选项的错误顺序。 我只是通过编辑代码来更改它们。 我正在使用 EX_2007_SP3。
在
microsoft.exchange.webservices.data.HttpClientWebRequest:prepareConnection()
和 prepareAsyncConnection()
方法中,我更改了身份验证偏好顺序
来自,
authPrefs.add(AuthPolicy.NTLM);
authPrefs.add(AuthPolicy.BASIC);
authPrefs.add(AuthPolicy.DIGEST);
到,
authPrefs.add(AuthPolicy.BASIC);
authPrefs.add(AuthPolicy.NTLM);
authPrefs.add(AuthPolicy.DIGEST);
而且它仍然有效:) 我看到一些开发人员也使用 NEGOTIATE。
希望这有帮助。