public static string GetString(this ExchangeServerVersion version) { switch (version) { case ExchangeServerVersion.Exchange2007_SP1: return("2007"); case ExchangeServerVersion.Exchange2010: case ExchangeServerVersion.Exchange2010_SP1: case ExchangeServerVersion.Exchange2010_SP2: return("2010"); case ExchangeServerVersion.Exchange2013: return("2013"); case ExchangeServerVersion.ExchangeOffice365: return("Office 365"); default: return("2010"); } }
public async Task <AutoDiscoverEngineResult> AutoDiscoverAsync(string email, string username, string password, ExchangeServerVersion version) { if (!email.Contains("@")) { throw new ArgumentException("Invalid email format"); } var split = email.Split('@'); if (split.Length != 2) { throw new ArgumentException("Invalid email format"); } string domain = split[1]; var result = await this.SmartGuessAsync(email, username, password, domain, version); if (result != null) { return(result); } result = await this.EwsAutoDiscoverAsync(email, username, password, domain, version); return(result); }
private async Task <AutoDiscoverEngineResult> SmartGuessAsync(string email, string username, string password, string domain, ExchangeServerVersion version, string endpoint = null) { List <string> endpoints; if (endpoint == null) { endpoints = ewsEndpoints; if (version == ExchangeServerVersion.ExchangeOffice365) { endpoints.Insert(0, Office365Endpoint); } } else { endpoints = new List <string> { endpoint }; } var result = await this.ExecuteCommand( "smart guess", endpoints, domain, uri => new GetFolderIdentifiersCommand(new GetFolderIdentifiersParameter(), CreateRequestSettings(email, username, password, uri))); if (result != null && result.Data != null && !string.IsNullOrWhiteSpace(result.Uri)) { var uri = TryCreateUri(result.Uri); if (uri != null) { return(new AutoDiscoverEngineResult(uri, null)); } } return(null); }
private async Task <AutoDiscoverEngineResult> EwsAutoDiscoverAsync(string email, string username, string password, string domain, ExchangeServerVersion version) { var commandResult = await this.ExecuteCommand( "ews auto discover", autoDiscoverEndpoints, domain, uri => new AutoDiscoverCommand(new AutoDiscoverParameter(email), CreateRequestSettings(email, username, password, uri))); if (commandResult != null && commandResult.Data != null) { var data = commandResult.Data; // external if (!string.IsNullOrWhiteSpace(data.ExternalEwsUrl)) { LogService.Log("AutoDiscover", "Trying with external ews url: " + data.ExternalEwsUrl); var result = await this.SmartGuessAsync(email, username, password, domain, version, data.ExternalEwsUrl); if (result != null) { return(result); } } // internal if (!string.IsNullOrWhiteSpace(data.InternalEwsUrl)) { LogService.Log("AutoDiscover", "Trying with internal ews url: " + data.InternalEwsUrl); var result = await this.SmartGuessAsync(email, username, password, domain, version, data.InternalEwsUrl); if (result != null) { return(result); } } // redirect addr if (!string.IsNullOrWhiteSpace(data.RedirectEmailAddress)) { LogService.Log("AutoDiscover", "Trying with email redirect: " + data.RedirectEmailAddress); var result = await this.SmartGuessAsync(data.RedirectEmailAddress, username, password, domain, version); if (result != null) { return(new AutoDiscoverEngineResult(result.ServerUri, data.RedirectEmailAddress)); } } } return(null); }