private void AutoDiscover(AutodiscoverParams autodiscoverParams) { ExchangeService service = new ExchangeService(autodiscoverParams.ExchangeVersion, TimeZoneInfo.Utc) { Credentials = GetWebCredentials(autodiscoverParams), UserAgent = "ews-test" }; // Aids with Exchange diagnostics if (autodiscoverParams.ExchangeVersion >= ExchangeVersion.Exchange2013) { service.SendClientLatencies = true; } try { // Auto-discover works for both on-prem an cloud Office 365 accounts LogMessage($"Attempting to auto-discover Exchange Server for account '{autodiscoverParams.Email}'..."); LogMessage($"Requesting Exchange version: {autodiscoverParams.ExchangeVersion.ToString()}"); service.EnableScpLookup = autodiscoverParams.AllowSCP; service.TraceFlags = TraceFlags.All; service.TraceEnabled = true; service.TraceEnablePrettyPrinting = true; service.TraceListener = this; // Attempt autodiscovery service.AutodiscoverUrl(autodiscoverParams.Email, RedirectionUrlValidationCallback); service.TraceEnabled = false; } catch (AutodiscoverLocalException ex) { LogMessage($"AutodiscoverLocalException: {ex.Message}"); } catch (AutodiscoverRemoteException ex) { LogMessage($"AutodiscoverRemoteException: {ex.Message}"); } catch (ServiceLocalException ex) { LogMessage($"ServiceLocalException: {ex.Message}"); } if (service.Url == null) { LogMessage($"{Environment.NewLine}Unable to auto-discover URL"); } else { LogMessage($"{Environment.NewLine}Discovered Exchange URL: {service.Url}"); } }
private WebCredentials GetWebCredentials(AutodiscoverParams autodiscoverParams) { if (string.IsNullOrEmpty(autodiscoverParams.Username) == false) { string[] parts = autodiscoverParams.Username.Split('\\'); if (parts.Length == 2 && !string.IsNullOrEmpty(parts[0]) && !string.IsNullOrEmpty(parts[1])) { return(new WebCredentials(parts[1], autodiscoverParams.Password, parts[0])); } return(new WebCredentials(autodiscoverParams.Username, autodiscoverParams.Password)); } return(new WebCredentials(autodiscoverParams.Email, autodiscoverParams.Password)); }
private async void ButtonAutoDiscover_Click(object sender, EventArgs e) { textBoxLog.Clear(); _allowHttpUrls = checkBoxAllowHttp.Checked; _running = true; EnableButtons(); var autodiscoverParams = new AutodiscoverParams { Email = textBoxEmail.Text?.Trim(), Username = textBoxUsername.Text?.Trim(), Password = textBoxPassword.Text?.Trim(), ExchangeVersion = (ExchangeVersion)comboBoxExchangeVersion.SelectedItem, AllowSCP = checkBoxAllowSCP.Checked }; await System.Threading.Tasks.Task.Run(() => AutoDiscover(autodiscoverParams)); _running = false; EnableButtons(); }