Conectare la Office365 Exchange Server cu ews-java-api-2.0.jar în Core JAVA (Programare, Java, Office365, Exchangewebservices)

Dhananjay Kashyap a intrebat.

Folosesc ews-java-api-2.0.jar, pentru a mă conecta la Office365 și mai jos este codul de probă:

package javaapplication6;

import java.net.URI;
import microsoft.exchange.webservices.data.autodiscover.IAutodiscoverRedirectionUrl;

import microsoft.exchange.webservices.data.credential.ExchangeCredentials;
import microsoft.exchange.webservices.data.core.ExchangeService;
import microsoft.exchange.webservices.data.core.enumeration.property.WellKnownFolderName;
import microsoft.exchange.webservices.data.core.service.folder.Folder;
import microsoft.exchange.webservices.data.credential.WebCredentials;

public class JavaApplication6 {

    public static class RedirectionUrlCallback implements IAutodiscoverRedirectionUrl {
        public boolean autodiscoverRedirectionUrlValidationCallback(String redirectionUrl) {
          return redirectionUrl.toLowerCase().startsWith("https://");
        }
    }

    public static ExchangeService connectViaExchangeManually(String email, String password)
      throws Exception {
        ExchangeService service = new ExchangeService();
        ExchangeCredentials credentials = new WebCredentials(email, password);
        service.setUrl(new URI("https://outlook.office365.com/EWS/Exchange.asmx"));
        service.setCredentials(credentials);
        service.setTraceEnabled(true);
        Folder inbox = Folder.bind(service, WellKnownFolderName.Inbox);
        System.out.println("messages: " + inbox.getTotalCount());
        return service;
    }

    public static ExchangeService connectViaExchangeAutodiscover(String email, String password) {
        ExchangeService service = new ExchangeService();
        try {
            service.setCredentials(new WebCredentials(email, password));
            service.autodiscoverUrl(email, new RedirectionUrlCallback());
            service.setTraceEnabled(true);
            Folder inbox = Folder.bind(service, WellKnownFolderName.Inbox);
            System.out.println("messages: " + inbox.getTotalCount());
        }
        catch (Exception e){
            e.printStackTrace();
        }
        return service;
    }
    public static void main(String[] args) {
      try {
        ExchangeService service = connectViaExchangeManually("<name>@<company>.onmicrosoft.com", "<password>");
      } catch (Exception e) {
        e.printStackTrace();
      }
    }

}

Când execut acest cod din Netbeans IDE, primesc eroarea de mai jos:

run:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/config/Lookup
    at javaapplication6.JavaApplication6.connectViaExchangeAutodiscover(JavaApplication6.java:33)
    at javaapplication6.JavaApplication6.main(JavaApplication6.java:48)
Caused by: java.lang.ClassNotFoundException: org.apache.http.config.Lookup
    at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 2 more
C:UsersBrijesh JalanAppDataLocalNetBeansCache8.1executor-snippetsrun.xml:53: Java returned: 1
BUILD FAILED (total time: 0 seconds)

Sunt blocat aici de 2 zile, orice ajutor ar fi apreciat!!!

Comentarii

  • Eroarea este foarte clară: ClassNotFoundException:org.apache.http.config.Lookup –  > Por Matt.
  • după ce am făcut referire la următoarele JAR-uri, s-a rezolvat. EWSJavaAPI_1.2original.jar, EWSJavaAPIWithJars_1.2.1.jar, httpclient-4.2.5.jar, httpcore-4.2.4.jar, jcifs-1.3.17.jar, commons-codec-1.7.jar, commons-logging-1.1.1.1.jar –  > Por Dhananjay Kashyap.
  • Jan 27, 2016 8:23:03 PM org.apache.commons.httpclient.auth.AuthChallengeProcessor selectAuthScheme INFO: Basic authentication scheme selected Jan 27, 2016 8:23:09 PM org.apache.commons.httpclient.HttpMethodDirector processWWWAuthChallenge INFO: Eșec autentificare cu BASIC ”@outlook.office365.com:443 microsoft.exchange.webservices.data.EWSHttpException: Conexiunea nu a fost stabilită at microsoft.exchange.webservices.data.HttpClientWebRequest.throwIfConnIsNull(Unknown Source) at microsoft.exchange.webservices.data.HttpClientWebRequest.getResponseCode(Unknown Source) –  > Por Dhananjay Kashyap.
  • Primesc acum eroarea de mai sus. care ar putea fi eroarea? –  > Por Dhananjay Kashyap.
  • Cum ați rezolvat asta? Folosesc exact același lucru, dar tot primesc 401 –  > Por roger_that.
1 răspunsuri
Vipin Singh

Bună ziua, adăugați următoarele fișiere jar

EWSJavaAPI_1.2original.jar
EWSJavaAPIWithJars_1.2.1.jar
httpclient-4.2.5.jar
httpcore-4.2.4.jar
jcifs-1.3.17.jar
commons-codec-1.7.jar
commons-logging-1.1.1.jar

pentru a rezolva toate dependențele .Trebuie să deschideți URL-ul în browserul Chrome –

https://outlook.office365.com/EWS/Exchange.asmx

Apoi introduceți UserName și parola acreditărilor de autentificare pe care le veți folosi în codul de mai jos.

package EWSJavaAPI;

import java.net.URI;

import microsoft.exchange.webservices.data.ExchangeCredentials;
import microsoft.exchange.webservices.data.ExchangeService;
import microsoft.exchange.webservices.data.ExchangeVersion;
import microsoft.exchange.webservices.data.Folder;
import microsoft.exchange.webservices.data.IAutodiscoverRedirectionUrl;
import microsoft.exchange.webservices.data.WebCredentials;
import microsoft.exchange.webservices.data.WellKnownFolderName;

public class EWSJavaAPI {

    public static class RedirectionUrlCallback implements IAutodiscoverRedirectionUrl {
        public boolean autodiscoverRedirectionUrlValidationCallback(String redirectionUrl) {
          return redirectionUrl.toLowerCase().startsWith("https://");
        }
    }

    public static ExchangeService connectViaExchangeAutodiscover(String email, String password) {
        ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
        try {

            service.setCredentials(new WebCredentials(email, password));
            service.autodiscoverUrl(email, new RedirectionUrlCallback());
            service.setTraceEnabled(true);
            Folder inbox = Folder.bind(service, WellKnownFolderName.Inbox);
            System.out.println("messages: " + inbox.getTotalCount());
        }
        catch (Exception e){
            e.printStackTrace();
        }
        return service;
    }
    public static void main(String[] args) {
      try {
          System.out.println("Hello World");
          ExchangeService service = connectViaExchangeAutodiscover("[email protected]", "xxxxxx");

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

Funcționează destul de bine la sfârșitul meu cu Office365.

Comentarii

  • Sunt capabil să mă conectez la Office365 exchange și să leg Inbox. Apreciat!!! –  > Por Dhananjay Kashyap.
  • Bună, am încercat codul de mai sus pentru a comunica cu serverul Office 365, dar primesc „(401) neautorizat”. Aceleași acreditări funcționează atunci când accesăm contul folosind aplicația web. Puteți să ne spuneți când apare această eroare? –  > Por Rohan Kadu.
  • Încercați cu descoperirea manuală și anunțați-mă dacă obțineți succes: public Static void connectViaExchangeManually(String email, String password) { try { ExchangeCredentials credentials = new WebCredentials(email, password); service.setUrl(new URI(„outlook.office365.com/EWS/Exchange.asmx”)); service.setCredentials(credentials); EWSResponse = „SUCCESS”; } catch (Exception ex) { ex.printStackTrace(); EWSResponse = „FAILURE: Serviciul Autodiscover nu a putut fi localizat”; } } –  > Por Dhananjay Kashyap.
  • Bună ziua Dhananjay, Vă mulțumim pentru răspuns. Da, primesc „Succes”, dar în momentul în care încerc să îl leg cu căsuța poștală pentru a efectua orice activitate legată de poștă, se afișează „401 Unauthorized” Îmi puteți spune ce îmi scapă? –  > Por Rohan Kadu.
  • Rohan, vă rugăm să adăugați codul inline și să-mi spuneți ce rezultate obțineți. De asemenea, trebuie să folosiți exact 7 borcane menționate în răspunsul de mai sus. Tocmai am testat că funcționează bine la mine.private static ExchangeService service;service.setTraceEnabled(true); System.out.println(„|———————> service = ” + service);Folder inbox = Folder.bind(service, WellKnownFolderName.Inbox); System.out.println(„messages: ” + inbox.getTotalCount()); -.  > Por Dhananjay Kashyap.