2016-09-29 3 views
1

私は、Exchangeサーバーに接続しようとすると、私は401エラーを持っている:為替のWebサービス(EWS)は、Javaアピ:401権限

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

私は、同じユーザーID、userPwで(https://ewseditor.codeplex.com/でドメインをテストと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

それはあなたが別のエラーが返さなるだろうSSLた場合は、エラーが資格情報です。ユーザー名としてUPNを使用するだけの資格情報形式を確認し、資格情報のユーザー名、パスワードのみが必要です。 –

+0

解決済み:サーバーでインターネットインフォメーションサービス(IIS)マネージャーを開きます。左に展開してEWSを見つけます。 401で認証を取得し、すべてのlignesをアクティブにClic。 – Gabriel

答えて

0

それは良い質問ですが、私はそれを解決するための別の方法を発見したため

ありがとう!

まず、jar ews-java-api-2.0.jarをインポートする必要があります。あなたはMavenを使用する場合は、第二に、あなたのpom.xml

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

に次のコードを追加し、新しいJavaクラスの名前MailUtil.java .Some Exchangeサーバーは、デフォルトではSMTPサービスを開始していないはずですので、私たちはSMTPの代わりにMicrosoft Exchange WebServices(EWS)を使用しますサービス。

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(); 

    } 
} 
関連する問題