/// <inheritdoc cref="IMailboxValidator.ValidateSynchronization"/>
        public CredentialsValidationInfo ValidateSynchronization(Mailbox mailbox)
        {
            var answer = new CredentialsValidationInfo {
                IsValid = true
            };

            try {
                var credentials = new MailCredentials {
                    UserName           = mailbox.Login,
                    UserPassword       = mailbox.Password,
                    SenderEmailAddress = mailbox.SenderEmailAddress,
                    Host     = mailbox.GetServerAddress(),
                    Port     = mailbox.GetServerPort(),
                    UseSsl   = mailbox.UseSsl,
                    StartTls = mailbox.StartTls
                };
                var imapClient = ClassFactory.Get <IImapClient>("OldEmailIntegration",
                                                                new ConstructorArgument("credentials", credentials),
                                                                new ConstructorArgument("errorMessages", new Terrasoft.Mail.ImapErrorMessages()),
                                                                new ConstructorArgument("userConnection", UserConnection),
                                                                new ConstructorArgument("login", true));
            }
            catch (ImapException exception) {
                answer.IsValid = false;
                answer.Message = ConnectToServerCaption + exception.Message;
            }
            return(answer);
        }
        /// <inheritdoc cref="IMailboxValidator.ValidateSynchronization"/>
        public CredentialsValidationInfo ValidateSynchronization(Mailbox mailbox)
        {
            var answer = new CredentialsValidationInfo()
            {
                IsValid = true
            };
            var credentials = mailbox.ConvertToSynchronizationCredentials(UserConnection);

            ServicePointManager.ServerCertificateValidationCallback += ValidateRemoteCertificate;
            _ignoreSslWarnings = (bool)Terrasoft.Core.Configuration.SysSettings.GetValue(UserConnection, "IgnoreExchangeSSLWarnings");
            try {
                var service = _exchangeUtility.CreateExchangeService(UserConnection, credentials,
                                                                     credentials.SenderEmailAddress);
                Exchange.NameResolutionCollection resolutions = service.ResolveName(credentials.SenderEmailAddress);
                var mailboxName = string.Empty;
                if (resolutions.Any())
                {
                    Exchange.EmailAddress mailboxAddress = resolutions.First().Mailbox;
                    mailboxName = mailboxAddress.Name;
                }
                answer.Data = JsonConvert.SerializeObject(new {
                    MailboxName = mailboxName
                });
            } catch (Exception exception) {
                answer.IsValid = false;
                answer.Message = ConnectToServerCaption + exception.Message;
            } finally {
                ServicePointManager.ServerCertificateValidationCallback -= ValidateRemoteCertificate;
            }
            return(answer);
        }
        public CredentialsValidationInfo IsServerValid(Guid id, string userName, string userPassword, bool enableSync,
                                                       bool sendEmail, string senderEmailAddress)
        {
            var mailServerService = ClassFactory.Get <IMailServerService>(new ConstructorArgument("uc", UserConnection));
            var mailServer        = mailServerService.GetServer(id);

            if (mailServer == null)
            {
                return(new CredentialsValidationInfo()
                {
                    IsValid = false,
                    Message = GetMailServerDoesNotExistLczValue()
                });
            }
            var mailbox = new Mailbox(senderEmailAddress, mailServer);

            mailbox.SetCredentials(userName, userPassword);
            mailbox.SetAllowSynchronization(enableSync);
            mailbox.SetAllowEmailSend(sendEmail);
            try {
                CredentialsValidationInfo validationInfo = mailbox.Validate(UserConnection);
                validationInfo.Message = string.Empty;
                return(validationInfo);
            } catch (Exception exception) {
                return(GetCredentialsValidationErrorInfo(exception, senderEmailAddress));
            }
        }
        /// <summary>
        /// Returns <see cref="CredentialsValidationInfo"/> instance.
        /// </summary>
        /// <param name="exception"><see cref="Exception"/> instance.</param>
        /// <param name="senderEmailAddress"><see cref="MailboxSyncSettings"/> instance address.</param>
        /// <returns><see cref="CredentialsValidationInfo"/> instance.</returns>
        private CredentialsValidationInfo GetCredentialsValidationErrorInfo(Exception exception, string senderEmailAddress)
        {
            var validationInfo = new CredentialsValidationInfo()
            {
                IsValid = false
            };
            string exceptionClassName         = exception.GetType().ToString();
            string exceptionMessage           = exception.Message;
            SynchronizationErrorHelper helper = SynchronizationErrorHelper.GetInstance(UserConnection);
            Entity message = helper.GetExceptionMessage(exceptionClassName, exceptionMessage);

            if (message != null)
            {
                validationInfo.Message = string.Format(message.GetTypedColumnValue <string>("UserMessage"),
                                                       senderEmailAddress);
                validationInfo.Data = message.GetTypedColumnValue <string>("Action");
            }
            return(validationInfo);
        }
        /// <inheritdoc cref="IMailboxValidator.ValidateSynchronization"/>
        public CredentialsValidationInfo ValidateSynchronization(Mailbox mailbox)
        {
            var answer = new CredentialsValidationInfo {
                IsValid = true
            };

            try {
                var imapClient = new ImapClient(new MailCredentials {
                    UserName           = mailbox.Login,
                    UserPassword       = mailbox.Password,
                    SenderEmailAddress = mailbox.SenderEmailAddress,
                    Host   = mailbox.GetServerAddress(),
                    Port   = mailbox.GetServerPort(),
                    UseSsl = mailbox.UseSsl
                }, MailSynchronizer.GetImapErrorMessages(UserConnection), UserConnection, true);
            }
            catch (ImapException exception) {
                answer.IsValid = false;
                answer.Message = ConnectToServerCaption + exception.Message;
            }
            return(answer);
        }