Esempio n. 1
0
 /// <summary>
 /// Initialises a new instance of the Skycap.Data.AccountSettingsData class.
 /// </summary>
 /// <param name="accountName">The account name.</param>
 /// <param name="emailService">The email service.</param>
 /// <param name="emailServiceProvider">The email service provider.</param>
 /// <param name="displayName">The email display name.</param>
 /// <param name="emailAddress">The email address.</param>
 /// <param name="userName">The user name.</param>
 /// <param name="password">The email password.</param>
 /// <param name="incomingMailServer">The incoming mail server.</param>
 /// <param name="incomingMailServerPort">The incoming mail server port.</param>
 /// <param name="isIncomingMailServerSsl">A value indicating whether the incoming mail server uses ssl.</param>
 /// <param name="outgoingMailServer">The incoming mail server.</param>
 /// <param name="outgoingMailServerPort">The incoming mail server port.</param>
 /// <param name="isOutgoingMailServerSsl">A value indicating whether the incoming mail server uses ssl.</param>
 /// <param name="outgoingMailServerRequiresAuthentication">A value indicating whether the outgoing mail server requires authentication.</param>
 /// <param name="isSendAndReceiveUserNameAndPasswordSame">true if send and receive user name and password are the same.</param>
 /// <param name="sendUserName">The send email user name.</param>
 /// <param name="sendPassword">The send email password.</param>
 /// <param name="useAnEmailSignature">true if an email signature should be used; otherwise, false.</param>
 /// <param name="emailSignature">The email signature.</param>
 /// <param name="downloadNewEmail">The download new email options.</param>
 /// <param name="downloadEmailsFrom">The download emails from.</param>
 /// <param name="keepEmailCopiesOnServer">true, if emails should be kept on the server after download.</param>
 /// <param name="contentToSyncEmail">true, if email content should be synced; otherwise, false.</param>
 public AccountSettingsData(string accountName, EmailService emailService, EmailServiceProvider emailServiceProvider, string displayName, string emailAddress, string userName, string password, string incomingMailServer, ushort incomingMailServerPort, bool isIncomingMailServerSsl, string outgoingMailServer, ushort outgoingMailServerPort, bool isOutgoingMailServerSsl, bool outgoingMailServerRequiresAuthentication, bool isSendAndReceiveUserNameAndPasswordSame, string sendUserName, string sendPassword, bool useAnEmailSignature, string emailSignature, DownloadNewEmailOptions downloadNewEmail, DownloadEmailsFromOptions downloadEmailsFrom, bool keepEmailCopiesOnServer, bool contentToSyncEmail)
     : base()
 {
     // Initialise local variables
     ImageSource             = string.Format("/Assets/{0}.png", emailServiceProvider.ToString());
     AccountName             = accountName;
     EmailService            = emailService;
     EmailServiceProvider    = emailServiceProvider;
     DisplayName             = displayName;
     EmailAddress            = emailAddress;
     UserName                = (string.IsNullOrEmpty(userName) ? emailAddress : userName);
     Password                = password;
     IncomingMailServer      = incomingMailServer;
     IncomingMailServerPort  = incomingMailServerPort;
     IsIncomingMailServerSsl = isIncomingMailServerSsl;
     OutgoingMailServer      = outgoingMailServer;
     OutgoingMailServerPort  = outgoingMailServerPort;
     IsOutgoingMailServerSsl = isOutgoingMailServerSsl;
     OutgoingMailServerRequiresAuthentication = outgoingMailServerRequiresAuthentication;
     IsSendAndReceiveUserNameAndPasswordSame  = isSendAndReceiveUserNameAndPasswordSame;
     if (IsSendAndReceiveUserNameAndPasswordSame)
     {
         SendUserName = UserName;
         SendPassword = Password;
     }
     else
     {
         SendUserName = sendUserName;
         SendPassword = sendPassword;
     }
     UseAnEmailSignature     = useAnEmailSignature;
     EmailSignature          = emailSignature;
     DownloadNewEmail        = downloadNewEmail;
     DownloadEmailsFrom      = downloadEmailsFrom;
     KeepEmailCopiesOnServer = keepEmailCopiesOnServer;
     ContentToSyncEmail      = contentToSyncEmail;
 }
        /// <summary>
        /// Determines if the supplied connection info is valid.
        /// </summary>
        /// <param name="requiresReconnect">true, if requires reconnect; otherwise, false.</param>
        /// <param name="accountName">The account name.</param>
        /// <param name="displayName">The display name.</param>
        /// <param name="emailService">The email service.</param>
        /// <param name="emailServiceProvider">The email service provider.</param>
        /// <param name="emailAddress">The email address.</param>
        /// <param name="username">The user name.</param>
        /// <param name="password">The password.</param>
        /// <param name="incomingEmailServer">The incoming email server.</param>
        /// <param name="incomingEmailServerPort">The incoming email server port.</param>
        /// <param name="incomingEmailServerRequiresSsl">true, if the incoming email server requires ssl; otherwise, false.</param>
        /// <param name="outgoingEmailServer">The outgoing email server.</param>
        /// <param name="outgoingEmailServerPort">The outgoing email server port.</param>
        /// <param name="outgoingEmailServerRequiresSsl">true, if the outgoing email server requires ssl; otherwise, false.</param>
        /// <param name="outgoingMailServerRequiresAuthentication">true, if the outgoing email server requires authentication; otherwise false.</param>
        /// <param name="useTheSameUsernameAndPasswordToSendAndReceiveEmail">true, if the same username and password to send and receive email; otherwise false.</param>
        /// <param name="sendUsername">The smtp user name.</param>
        /// <param name="sendPassword">The smtp password.</param>
        /// <param name="useAnEmailSignature">true, if use an email signature; otherwise, false.</param>
        /// <param name="emailSignature">The email signature.</param>
        /// <param name="downloadNewEmail">The download new email options.</param>
        /// <param name="downloadEmailsFrom">The download emails from options.</param>
        /// <param name="keepEmailCopiesOnServer">true, if keep email copies on server.</param>
        /// <param name="contentToSyncEmail">true, if emails should be synced; otherwise, false.</param>
        /// <returns>true, if connection info is valid; otherwise, false.</returns>
        private bool IsConnectionInfoValid(out bool requiresReconnect, out string accountName, out string displayName, out EmailService emailService, out EmailServiceProvider emailServiceProvider, out string emailAddress, out string username, out string password, out string incomingEmailServer, out ushort incomingEmailServerPort, out bool incomingEmailServerRequiresSsl, out string outgoingEmailServer, out ushort outgoingEmailServerPort, out bool outgoingEmailServerRequiresSsl, out bool outgoingMailServerRequiresAuthentication, out bool useTheSameUsernameAndPasswordToSendAndReceiveEmail, out string sendUsername, out string sendPassword, out bool useAnEmailSignature, out string emailSignature, out DownloadNewEmailOptions downloadNewEmail, out DownloadEmailsFromOptions downloadEmailsFrom, out bool keepEmailCopiesOnServer, out bool contentToSyncEmail)
        {
            // Default variables
            requiresReconnect       = false;
            accountName             = txtAccountName.Text.Trim();
            displayName             = txtDisplayName.Text.Trim();
            emailService            = SelectedAccountSettingsData.EmailService;
            emailServiceProvider    = SelectedAccountSettingsData.EmailServiceProvider;
            emailAddress            = txtEmailAddress.Text.Trim();
            username                = txtUsername.Text.Trim();
            password                = pbPassword.Password.Trim();
            incomingEmailServer     = txtIncomingEmailServer.Text.Trim();
            incomingEmailServerPort = 0;
            ushort.TryParse(txtIncomingEmailServerPort.Text.Trim(), out incomingEmailServerPort);
            incomingEmailServerRequiresSsl = cbIncomingEmailServerRequiresSsl.IsChecked.Value;
            outgoingEmailServer            = txtOutgoingEmailServer.Text.Trim();
            outgoingEmailServerPort        = 0;
            ushort.TryParse(txtOutgoingEmailServerPort.Text.Trim(), out outgoingEmailServerPort);
            outgoingEmailServerRequiresSsl                     = cbOutgoingEmailServerRequiresSsl.IsChecked.Value;
            outgoingMailServerRequiresAuthentication           = cbOutgoingMailServerRequiresAuthentication.IsChecked.Value;
            useTheSameUsernameAndPasswordToSendAndReceiveEmail = cbUseTheSameUsernameAndPasswordToSendAndReceiveEmail.IsChecked.Value;
            sendUsername        = txtSendUsername.Text.Trim();
            sendPassword        = pbSendPassword.Password.Trim();
            useAnEmailSignature = tsUseAnEmailSignature.IsOn;
            tbEmailSignature.Document.GetText(TextGetOptions.FormatRtf, out emailSignature);
            downloadNewEmail        = (DownloadNewEmailOptions)Enum.Parse(typeof(DownloadNewEmailOptions), (string)cbDownloadNewEmail.SelectedValue, true);
            downloadEmailsFrom      = (DownloadEmailsFromOptions)Enum.Parse(typeof(DownloadEmailsFromOptions), (string)cbDownloadEmailsFrom.SelectedValue, true);
            keepEmailCopiesOnServer = cbKeepEmailCopiesOnServer.IsChecked.Value;
            contentToSyncEmail      = cbContentToSyncEmail.IsChecked.Value;

            // If any connection info has changed
            if (!username.Equals(SelectedAccountSettingsData.UserName, StringComparison.OrdinalIgnoreCase) ||
                !password.Equals(SelectedAccountSettingsData.Password, StringComparison.OrdinalIgnoreCase) ||
                !incomingEmailServer.Equals(SelectedAccountSettingsData.IncomingMailServer, StringComparison.OrdinalIgnoreCase) ||
                incomingEmailServerPort != SelectedAccountSettingsData.IncomingMailServerPort ||
                incomingEmailServerRequiresSsl != SelectedAccountSettingsData.IsIncomingMailServerSsl ||
                !outgoingEmailServer.Equals(SelectedAccountSettingsData.OutgoingMailServer, StringComparison.OrdinalIgnoreCase) ||
                outgoingEmailServerPort != SelectedAccountSettingsData.OutgoingMailServerPort ||
                outgoingEmailServerRequiresSsl != SelectedAccountSettingsData.IsOutgoingMailServerSsl ||
                outgoingMailServerRequiresAuthentication != SelectedAccountSettingsData.OutgoingMailServerRequiresAuthentication ||
                useTheSameUsernameAndPasswordToSendAndReceiveEmail != SelectedAccountSettingsData.IsSendAndReceiveUserNameAndPasswordSame ||
                !sendUsername.Equals(SelectedAccountSettingsData.SendUserName, StringComparison.OrdinalIgnoreCase) ||
                !sendPassword.Equals(SelectedAccountSettingsData.SendPassword, StringComparison.OrdinalIgnoreCase))
            {
                requiresReconnect = true;
            }

            // Validate email address
            if (string.IsNullOrEmpty(emailAddress) ||
                !Regex.IsMatch(emailAddress, @"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"))
            {
                txtEmailAddress.Focus(FocusState.Programmatic);
                return(false);
            }
            // Validate password
            else if (string.IsNullOrEmpty(password))
            {
                pbPassword.Focus(FocusState.Programmatic);
                return(false);
            }
            // Validate incoming email server
            else if (string.IsNullOrEmpty(incomingEmailServer))
            {
                txtIncomingEmailServer.Focus(FocusState.Programmatic);
                return(false);
            }
            // Validate incoming email server port
            else if (incomingEmailServerPort == 0)
            {
                txtIncomingEmailServerPort.Focus(FocusState.Programmatic);
                return(false);
            }
            // Validate outgoing email server
            else if (string.IsNullOrEmpty(outgoingEmailServer))
            {
                txtOutgoingEmailServer.Focus(FocusState.Programmatic);
                return(false);
            }
            // Validate outgoing email server port
            else if (outgoingEmailServerPort == 0)
            {
                txtOutgoingEmailServerPort.Focus(FocusState.Programmatic);
                return(false);
            }
            else if (!cbUseTheSameUsernameAndPasswordToSendAndReceiveEmail.IsChecked.Value)
            {
                // Validate smtp user name
                if (string.IsNullOrEmpty(sendUsername))
                {
                    txtSendUsername.Focus(FocusState.Programmatic);
                    return(false);
                }
                // Validate smtp password
                else if (string.IsNullOrEmpty(sendPassword))
                {
                    pbSendPassword.Focus(FocusState.Programmatic);
                    return(false);
                }
            }

            // If we reach this point, all connection info is valid
            return(true);
        }