2016-09-29 231 views
1

當我嘗試連接到Exchange服務器,我有一個401錯誤:交換網絡服務(EWS)的Java 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/測試(有相同的用戶id,userPw,域和網址),它完美的作品。

這是我的實際代碼:

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

已解決:在服務器上,打開Internet信息服務(IIS)管理器。在左側部署以查找EWS。點擊身份驗證並使用401來激活所有的ligne。 – Gabriel

回答

0

這是一個很好的問題,但我已經找到另一種方式來解決吧!

首先,您應該導入罐子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。有些Exchange服務器默認不啓動SMTP服務,所以我們使用Microsoft Exchange WebServices(EWS),而不是SMTP服務。

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

    } 
}