2016-09-29 1 views
1

내가 Exchange 서버에 연결하려고하면, 내가 401 오류가 : 같은 userId를 함께 (교환 웹 서비스 (EWS) 자바 API 광고 : 401 권한이

microsoft.exchange.webservices.data.core.exception.service.remote.ServiceRequestException: The request failed. The request failed. The remote server returned an error: (401)Unauthorized 

내가 https://ewseditor.codeplex.com/ 테스트를 userPw, 도메인 및 URL) 그리고 그것은 완벽하게 작동합니다.

이 내 실제 코드 :

public static void main(String[] args) 
{ 
    try { 
     CustomExchangeService service = new CustomExchangeService(version); 
     ExchangeCredentials credentials = new WebCredentials(userId, userPw,domain); 
     service.setUrl(new URI(url)); 
     service.setCredentials(credentials); 
     service.setTraceEnabled(true); 
     Folder.bind(getInstance().service, WellKnownFolderName.Inbox, PropertySet.IdOnly); 

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

그리고이 방법 클래스 CustomExchangeService :

protected Registry<ConnectionSocketFactory>  createConnectionSocketFactoryRegistry() { 
    try { 
     return RegistryBuilder.<ConnectionSocketFactory>create() 
      .register(EWSConstants.HTTP_SCHEME, new PlainConnectionSocketFactory()) 
      .register(EWSConstants.HTTPS_SCHEME, EwsSSLProtocolSocketFactory.build(
       null, NoopHostnameVerifier.INSTANCE 
     )) 
      .build(); 
    } catch (GeneralSecurityException e) { 
     throw new RuntimeException(
      "Could not initialize ConnectionSocketFactory instances for HttpClientConnectionManager", e 
    ); 
    } 
} 

가 왜이 오류가 있나요? 어쩌면 SSL 때문에?

도움을 주셔서 감사합니다.

+0

오류는 자격 증명입니다. 사용자 이름으로 UPN을 사용하려는 자격 증명 형식을 확인한 다음 자격 증명에 대한 사용자 이름, 암호 만 필요합니다. –

+0

해결 : 서버에서 인터넷 정보 서비스 (IIS) 관리자를 엽니 다. EWS를 찾으려면 왼쪽에 배치하십시오. 401 인증. – Gabriel

답변

0

좋은 질문이지만 해결할 다른 방법을 찾았습니다.

먼저, ews-java-api-2.0.jar을 가져와야합니다. 당신이 받는다는을 사용하는 경우, 당신은 둘째로 당신의 pom.xml

<dependency> 
    <groupId>com.microsoft.ews-java-api</groupId> 
    <artifactId>ews-java-api</artifactId> 
    <version>2.0</version> 
</dependency> 

에 다음 코드를 추가합니다, 당신은 새로운 자바 클래스라는 이름의 MailUtil.java K2661에 Exchange 서버는 기본적으로 SMTP 서비스를 시작하지 마십시오한다, 그래서 우리는 SMTP 대신 Microsoft Exchange WebServices(EWS)를 사용 서비스. SSL을 사용하면 다른 오류가 반환 얻을 것 인 경우

MailUtil.java

package com.spacex.util; 


import microsoft.exchange.webservices.data.core.ExchangeService; 
import microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion; 
import microsoft.exchange.webservices.data.core.service.item.EmailMessage; 
import microsoft.exchange.webservices.data.credential.ExchangeCredentials; 
import microsoft.exchange.webservices.data.credential.WebCredentials; 
import microsoft.exchange.webservices.data.property.complex.MessageBody; 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

import java.net.URI; 

/** 
* Exchange send email util 
* 
* @author vino.dang 
* @create 2017/01/08 
*/ 
public class MailUtil { 

    private static Logger logger = LoggerFactory.getLogger(MailUtil.class); 



    /** 
    * send emial 
    * @return 
    */ 
    public static boolean sendEmail() { 

     Boolean flag = false; 
     try { 
      ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP1); // your server version 
      ExchangeCredentials credentials = new WebCredentials("vino", "abcd123", "spacex"); // change them to your email username, password, email domain 
      service.setCredentials(credentials); 
      service.setUrl(new URI("https://outlook.spacex.com/EWS/Exchange.asmx")); //outlook.spacex.com change it to your email server address 
      EmailMessage msg = new EmailMessage(service); 
      msg.setSubject("This is a test!!!"); //email subject 
      msg.setBody(MessageBody.getMessageBodyFromText("This is a test!!! pls ignore it!")); //email body 
      msg.getToRecipients().add("[email protected]"); //email receiver 
//  msg.getCcRecipients().add("[email protected]"); // email cc recipients 
//  msg.getAttachments().addFileAttachment("D:\\Downloads\\EWSJavaAPI_1.2\\EWSJavaAPI_1.2\\Getting started with EWS Java API.RTF"); // email attachment 
      msg.send(); //send email 
      flag = true; 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return flag; 

    } 


    public static void main(String[] args) { 

     sendEmail(); 

    } 
}