Ошибка запроса при попытке отправить почту на Exchange Server с помощью веб-служб Exchange

Мой код для отправки почты

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
ExchangeCredentials credentials = new WebCredentials("shiva@shiva.com","pwd");
service.setCredentials(credentials);
service.setUrl(new URI("C:/shiva/Services.asmx"));
EmailMessage msg = new EmailMessage(service);
msg.setSubject("Hello world!");
msg.setBody(MessageBody.getMessageBodyFromText("Sent using the EWS Java API."));
msg.getToRecipients().add("shiva@shiva.com");
msg.send();

Я получаю следующее сообщение об ошибке при запуске выше кода

microsoft.exchange.webservices.data.core.exception.service.remote.ServiceRequestException: The request failed. Protocol C isn't supported for service request.
    at microsoft.exchange.webservices.data.core.request.SimpleServiceRequestBase.internalExecute(SimpleServiceRequestBase.java:74).
.
.
.
.
Caused by: microsoft.exchange.webservices.data.core.exception.service.local.ServiceLocalException: Protocol C isn't supported for service request.
    at microsoft.exchange.webservices.data.core.ExchangeServiceBase.prepareHttpWebRequestForUrl(ExchangeServiceBase.java:322).
.
.
.

Пожалуйста, помогите мне.

1 ответ

Решение

Проблема заключается в том, что вы не указываете на URI, где размещен ваш экземпляр веб-службы Exchange (EWS). Вместо этого вы просто указываете на местоположение в файловой системе:

service.setUrl(new URI("C:/shiva/Services.asmx"));

Таким образом, URI-класс пытается интерпретировать C:/ как протокол, который не будет работать в этой ситуации.

Вам нужно будет сделать следующее: разместить свой экземпляр EWS на веб-сервере (обычно в данном случае Microsoft IIS. Я думаю, что вам понадобится Windows Server с установленными необходимыми ролями сервера и т. Д.). И пусть ваш код указывает на этот URI вместо этого:

service.setUrl(new URI("http://localhost:1234/someWhere/Services.asmx"));
Другие вопросы по тегам