2016-09-29 158 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(); 

    } 
}