1

我想使用 Java EWS API 读取交换服务器上的非默认邮箱,但我的代码有问题。以下是相关部分的摘录:

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
ExchangeCredentials credentials = new WebCredentials("<user>", "<pass>");
service.setCredentials(credentials);
service.setUrl(new URI("https://<URL>/EWS/Exchange.asmx"));
ItemView iview = new ItemView(3);
Mailbox mb = new Mailbox();
mb.setAddress("<mailbox_address>");
FolderId folderId = new FolderId(WellKnownFolderName.Root, mb);
FindItemsResults<Item> findResults = service.findItems(folderId, iview);

错误信息是:

Exception in thread "main" microsoft.exchange.webservices.data.EWSHttpException: Connection not established
    at microsoft.exchange.webservices.data.HttpClientWebRequest.throwIfConnIsNull(Unknown Source)
    at microsoft.exchange.webservices.data.HttpClientWebRequest.getResponseHeaders(Unknown Source)
    at microsoft.exchange.webservices.data.ExchangeServiceBase.processHttpResponseHeaders(Unknown Source)
    at microsoft.exchange.webservices.data.SimpleServiceRequestBase.internalExecute(Unknown Source)
    at microsoft.exchange.webservices.data.MultiResponseServiceRequest.execute(Unknown Source)
    at microsoft.exchange.webservices.data.ExchangeService.findItems(Unknown Source)
    at microsoft.exchange.webservices.data.ExchangeService.findItems(Unknown Source)

顺便提一句。我可以阅读我的默认邮箱、发送电子邮件等...

您能否提一些建议?提前致谢!

4

2 回答 2

0

我相信您正在尝试访问一个邮箱,但使用的是另一个帐户的凭据。这可以通过模仿来解决。

在较新版本的 EWS 中,这可以在 Exchange 服务器上的 AD中解决,也可以通过以编程方式设置 ConnectingSID 属性来解决。我可能会依靠第二个,并为不同的环境配置主 SMTP 地址。

以下是在 C# 中使用 EWS 2010 的代码示例,因此您可能必须setCredentials(credentials)改用,依此类推:

代码示例 EWS 2010

ExchangeServiceBinding binding = new ExchangeServiceBinding();
// Use this class instead of ExchangeService (!)
binding.Credentials = credentials;  
// etc    

binding.ExchangeImpersonation = new ExchangeImpersonationType();
binding.ExchangeImpersonation.ConnectingSID = new ConnectingSIDType();
binding.ExchangeImpersonation.ConnectingSID.PrimarySmtpAddress = "<mailbox_address>";

EWS 2007 文档

根据这篇文章,这似乎也应该在 EWS 2007 SP1 中可用。请注意,从文章中,:

您必须设置权限“ms-Exch-EPI-Impersonation”必须位于将进行模拟的服务帐户的客户端访问服务器上。此外,服务帐户必须在它要模拟的每个邮箱上授予“ms-Exch-EPI-May-Impersonate”权限。如果您要在存储、存储组、服务器或组织级别设置此权限,则会向下继承到邮箱。

于 2013-08-13T13:45:21.543 回答
0

此代码似乎是正确的,如果这适用于您的默认邮箱,则可能是一些权限错误。

我正在使用类似的代码来访问共享邮件组的邮件

我看到的唯一区别是 -> WellKnownFolderName.MsgFolderRoot而不是WellKnownFolderName.Root

于 2020-07-04T05:28:44.753 回答