/// <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); } }