Example #1
0
        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");
            }
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }