From d8000b6497b4b905f0843b996bba6e180cb46a84 Mon Sep 17 00:00:00 2001 From: mguessan Date: Sun, 19 Jan 2014 23:04:07 +0000 Subject: [PATCH] EWS: in direct EWS mode, try to use ResolveNames to get current user email address git-svn-id: http://svn.code.sf.net/p/davmail/code/trunk@2212 3d1905a2-6b24-0410-a738-b14d5a86fcbd --- .../exchange/ews/EwsExchangeSession.java | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/java/davmail/exchange/ews/EwsExchangeSession.java b/src/java/davmail/exchange/ews/EwsExchangeSession.java index 10cd9fac..391a7441 100644 --- a/src/java/davmail/exchange/ews/EwsExchangeSession.java +++ b/src/java/davmail/exchange/ews/EwsExchangeSession.java @@ -211,7 +211,13 @@ public class EwsExchangeSession extends ExchangeSession { } else { // userName or domain\\username, rebuild email address alias = getAliasFromLogin(); - email = getAliasFromLogin() + getEmailSuffixFromHostname(); + + // try to get email address with ResolveNames + email = resolveEmailAddress(userName); + // failover, build from host name + if (email == null) { + email = getAliasFromLogin() + getEmailSuffixFromHostname(); + } } } @@ -287,6 +293,29 @@ public class EwsExchangeSession extends ExchangeSession { LOGGER.debug("Current user email is " + email + ", alias is " + alias + " on " + serverVersion); } + public String resolveEmailAddress(String userName) { + String email = null; + String searchValue = userName; + int index = searchValue.indexOf('\\'); + if (index >= 0) { + searchValue = searchValue.substring(index+1); + } + ResolveNamesMethod resolveNamesMethod = new ResolveNamesMethod(searchValue); + try { + // send a fake request to get server version + internalGetFolder(""); + executeMethod(resolveNamesMethod); + List responses = resolveNamesMethod.getResponseItems(); + if (responses.size() == 1) { + email = responses.get(0).get("EmailAddress"); + } + + } catch (IOException e) { + // ignore + } + return email; + } + protected static class AutoDiscoverMethod extends PostMethod { AutoDiscoverMethod(String autodiscoverHost, String userEmail) { super("https://" + autodiscoverHost + "/autodiscover/autodiscover.xml");