我想用Java在exchange服务器上读取一个非默认邮箱,但是我的代码有问题。以下是有关部分的摘录:
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)
顺便说一句。我可以读我的默认邮箱,发送电子邮件,等等.
你能告诉我吗?提前感谢!
发布于 2013-08-13 13:45:21
我相信您正在尝试访问一个邮箱,但使用另一个帐户的凭据。这可以通过模仿来解决。
在较新版本的EWS中,可以解决在交换服务器上的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的文档
据SP1称,这似乎也可以在EWS 2007的这篇文章中使用。请从这篇文章中注意到:
您必须设置为权限“ms-Exch-EPI-模拟”必须在服务帐户的客户端访问服务器上进行模拟。此外,服务帐户必须在它将模拟的每个邮箱上授予它“ms-Exch-EPI-5月-模拟”的权限。如果要在存储、存储组、服务器或组织级别设置此权限,则该权限将继承到邮箱中。
发布于 2020-07-04 05:28:44
此代码似乎是正确的,如果此代码适用于默认邮箱,则可能是某些权限错误。
我使用类似的代码来访问共享邮件组的邮件。
我看到的唯一不同是WellKnownFolderName.MsgFolderRoot而不是WellKnownFolderName.Root
https://stackoverflow.com/questions/18203782
复制相似问题