Esempio n. 1
0
        /// <summary>
        /// Connect to a mailbox.
        /// </summary>
        /// <param name="accountSettingsData">The account settings data.</param>
        /// <param name="isLastAccountSettingsData">true, if is last account settings data; otherwise, false.</param>
        /// <param name="configurationNumber">The configuration number.</param>
        /// <param name="configurationCount">The configuration count.</param>
        /// <returns>true, if connected successfully; otherwise, false.</returns>
        private async Task <bool> Connect(AccountSettingsData accountSettingsData, bool isLastAccountSettingsData, int configurationNumber, int configurationCount)
        {
            try
            {
                // Get the mail client
                MailClient mailClient = await MailClient.GetMailClient(accountSettingsData);

                // Resolve the mail server names
                if (isReceiveConnected || await ResolveDNS(accountSettingsData.IncomingMailServer))
                {
                    // The authentication result
                    AuthenticationResult authenticationResult = new AuthenticationResult();
                    // If login is successfull
                    if (isReceiveConnected || (authenticationResult = mailClient.Login(true)).IsSuccessfull)
                    {
                        App.RunOnUIThread(dispatcher, () => App.NotifyUser(txtSubTitle, string.Format("Found your account... Trying configuration {0} of {1} for sending emails...", configurationNumber, configurationCount), NotifyType.StatusMessage));
                        // Send email
                        isReceiveConnected = true;
                        SendResult sendResult = null;
                        if (await ResolveDNS(accountSettingsData.OutgoingMailServer) &&
                            (sendResult = await mailClient.SendTestEmail()).IsSuccessful)
                        {
                            // Receive email
                            isLoginFailure = false;

                            // Save settings
                            App.RunOnUIThread(dispatcher, () => App.NotifyUser(txtSubTitle, "Added your account. Starting email sync...", NotifyType.StatusMessage));
                            StorageSettings.AccountSettingsDataDictionary.Add(accountSettingsData.EmailAddress, accountSettingsData);
                            await StorageSettings.SaveAccountSettingsDataDictionary();

                            MainPage.Current.ConnectMailbox(accountSettingsData, mailClient);
                            Task.Run(async() => await mailClient.DownloadUnreadMessages());
                            return(true);
                        }
                        else if (isLastAccountSettingsData)
                        {
                            isLoginFailure = true;
                            message        = string.Format("Outgoing server login failed.{0}Response from {1}: {2}", Environment.NewLine, (accountSettingsData.EmailServiceProvider == EmailServiceProvider.Other ? accountSettingsData.AccountName : accountSettingsData.EmailServiceProvider.ToString()), sendResult.LastResponse.GeneralMessage);
                            return(false);
                        }
                        else
                        {
                            isLoginFailure = false;
                            return(false);
                        }
                    }

                    // Login failed
                    isLoginFailure = mailClient.State == MailClientState.Connected;
                    message        = "Login failed. " + authenticationResult.Response;
                    return(false);
                }
                else if (isLastAccountSettingsData)
                {
                    isLoginFailure = true;
                    message        = "Your email account could not be found. Try configuring your account manually.";
                    return(false);
                }
                else
                {
                    isLoginFailure = false;
                    return(false);
                }
            }
            catch (Exception ex)
            {
                // Login failed
                LogFile.Instance.LogError("", "", ex.ToString());
                message = "Failed to add account. An error occurred while trying to add your account. Please try again.";
                return(false);
            }
        }