如何验证 EWS Java API

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/15841767/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-31 21:01:18  来源:igfitidea点击:

How to authenticate EWS Java API

javaexchangewebservicesewsjavaapi

提问by leventgo

We are using EWS Java API to use the outlook calendar on our Java application. I am having authentication issues on EWS.

我们正在使用 EWS Java API 在我们的 Java 应用程序上使用 Outlook 日历。我在 EWS 上遇到身份验证问题。

I tried the application on the cloud outlook account that's supplied by rackspace and everything worked just fine so I know the credentials are accurate.

我在由 rackspace 提供的 cloud Outlook 帐户上尝试了该应用程序,一切正常,所以我知道凭据是准确的。

Here is the code:

这是代码:

import java.net.URI;
import java.net.URISyntaxException;
import microsoft.exchange.webservices.data.*;

public class TestClass {

    public static void main(String[] args) {
        TestClass obj = new TestClass();
        obj.testMethod();
    }

    public void testMethod() {
        ExchangeService service = new ExchangeService(
                ExchangeVersion.Exchange2007_SP1);
        ExchangeCredentials credentials = new WebCredentials("username",
                "password");

        service.setCredentials(credentials);

        try {
            service.setUrl(new URI("https://domain/EWS/Exchange.asmx"));
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }

        EmailMessage msg;
        try {
            msg = new EmailMessage(service);
            msg.setSubject("hello world");
            msg.setBody(MessageBody
                    .getMessageBodyFromText("Sent using the EWS API"));
            msg.getToRecipients().add("[email protected]");
            msg.send();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

The url for rackspace is:https://connect.emailsrvr.com/EWS/Exchange.asmxWhen I put the username and password for this account and it works, I see the console spitting out this one:

rackspace 的 url 是:https://connect.emailsrvr.com/EWS/Exchange.asmx当我输入这个帐户的用户名和密码并且它工作时,我看到控制台吐出这个:

Apr 05, 2013 1:40:28 PM org.apache.commons.httpclient.auth.AuthChallengeProcessor selectAuthScheme
INFO: NTLM authentication scheme selected

Our client is using ExchangeVersion.Exchange2007_SP1 whereas Rackspace is using ExchangeVersion.Exchange2010 But when I use the credentials(username, password and url) that our client provided, I am getting this error:

我们的客户端使用 ExchangeVersion.Exchange2007_SP1 而 Rackspace 使用 ExchangeVersion.Exchange2010 但是当我使用我们的客户端提供的凭据(用户名、密码和 url)时,我收到此错误:

Apr 05, 2013 1:49:13 PM org.apache.commons.httpclient.auth.AuthChallengeProcessor selectAuthScheme
INFO: Basic authentication scheme selected
Apr 05, 2013 1:49:13 PM org.apache.commons.httpclient.HttpMethodDirector processAuthenticationResponse
SEVERE: Invalid challenge: Basic
org.apache.commons.httpclient.auth.MalformedChallengeException: Invalid challenge: Basic
at org.apache.commons.httpclient.auth.AuthChallengeParser.extractParams(AuthChallengeParser.java:98)
at org.apache.commons.httpclient.auth.RFC2617Scheme.processChallenge(RFC2617Scheme.java:94)
at org.apache.commons.httpclient.auth.BasicScheme.processChallenge(BasicScheme.java:112)
at org.apache.commons.httpclient.auth.AuthChallengeProcessor.processChallenge(AuthChallengeProcessor.java:162)
at org.apache.commons.httpclient.HttpMethodDirector.processWWWAuthChallenge(HttpMethodDirector.java:694)
at org.apache.commons.httpclient.HttpMethodDirector.processAuthenticationResponse(HttpMethodDirector.java:668)
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:193)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)
at microsoft.exchange.webservices.data.HttpClientWebRequest.executeRequest(HttpClientWebRequest.java:358)
at microsoft.exchange.webservices.data.ServiceRequestBase.getEwsHttpWebResponse(ServiceRequestBase.java:930)
at microsoft.exchange.webservices.data.ServiceRequestBase.validateAndEmitRequest(ServiceRequestBase.java:825)
at microsoft.exchange.webservices.data.SimpleServiceRequestBase.internalExecute(SimpleServiceRequestBase.java:46)
at microsoft.exchange.webservices.data.MultiResponseServiceRequest.execute(MultiResponseServiceRequest.java:144)
at microsoft.exchange.webservices.data.ExchangeService.internalCreateItems(ExchangeService.java:464)
at microsoft.exchange.webservices.data.ExchangeService.createItem(ExchangeService.java:535)
at microsoft.exchange.webservices.data.Item.internalCreate(Item.java:215)
at microsoft.exchange.webservices.data.EmailMessage.internalSend(EmailMessage.java:125)
at microsoft.exchange.webservices.data.EmailMessage.send(EmailMessage.java:253)
at com.aurora.trials.TestClass.testMethod(TestClass.java:43)
at com.aurora.trials.TestClass.main(TestClass.java:17)

microsoft.exchange.webservices.data.EWSHttpException: Connection not established
at microsoft.exchange.webservices.data.HttpClientWebRequest.throwIfConnIsNull(HttpClientWebRequest.java:394)
at microsoft.exchange.webservices.data.HttpClientWebRequest.getResponseHeaders(HttpClientWebRequest.java:280)
at microsoft.exchange.webservices.data.ExchangeServiceBase.processHttpResponseHeaders(ExchangeServiceBase.java:1045)
at microsoft.exchange.webservices.data.SimpleServiceRequestBase.internalExecute(SimpleServiceRequestBase.java:58)
at microsoft.exchange.webservices.data.MultiResponseServiceRequest.execute(MultiResponseServiceRequest.java:144)
at microsoft.exchange.webservices.data.ExchangeService.internalCreateItems(ExchangeService.java:464)
at microsoft.exchange.webservices.data.ExchangeService.createItem(ExchangeService.java:535)
at microsoft.exchange.webservices.data.Item.internalCreate(Item.java:215)
at microsoft.exchange.webservices.data.EmailMessage.internalSend(EmailMessage.java:125)
at microsoft.exchange.webservices.data.EmailMessage.send(EmailMessage.java:253)
at com.aurora.trials.TestClass.testMethod(TestClass.java:43)
at com.aurora.trials.TestClass.main(TestClass.java:17)

I couldn't find any solution for this issue. Please provide any info that you think I can get authenticated for EWS. What is causing these Exceptions?

我找不到此问题的任何解决方案。请提供您认为我可以获得 EWS 身份验证的任何信息。是什么导致这些异常?

回答by Eric Leschinski

I had your exact same errors and wasted 5 hours trying to fix it. My conclusion is that you should not waste more time on trying to get the EWS codebase to work, the EWS code is confused and you'll have to go in under the hood to fix bugs in that library.

我遇到了与您完全相同的错误,并浪费了 5 个小时试图修复它。我的结论是,您不应该浪费更多时间来尝试让 EWS 代码库工作,EWS 代码很混乱,您必须深入研究以修复该库中的错误。

I settled on using javax.mail implementation which does what I need. https://stackoverflow.com/a/18043717/445131

我决定使用 javax.mail 实现来满足我的需求。 https://stackoverflow.com/a/18043717/445131