public MailboxData CreateMyMailbox(string name)
        {
            if (!SetupInfo.IsVisibleSettings("AdministrationPage") || !SetupInfo.IsVisibleSettings("MailCommonDomain") || CoreContext.Configuration.Standalone)
            {
                throw new Exception("Common domain is not available");
            }

            var domain = MailServer.GetWebDomains(MailServerFactory).FirstOrDefault(x => x.Tenant == Defines.SHARED_TENANT_ID);

            if (domain == null)
            {
                throw new SecurityException("Domain not found.");
            }

            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentException(@"Invalid mailbox name.", "name");
            }

            var teamlabAccount = CoreContext.Authentication.GetAccountByID(SecurityContext.CurrentAccount.ID);

            if (teamlabAccount == null)
            {
                throw new InvalidDataException("Unknown user.");
            }

            var userInfo = CoreContext.UserManager.GetUsers(SecurityContext.CurrentAccount.ID);

            if (userInfo.IsVisitor())
            {
                throw new InvalidDataException("User is visitor.");
            }

            if (name.Length > 64)
            {
                throw new ArgumentException(@"Local part of mailbox localpart exceed limitation of 64 characters.", "name");
            }

            if (!Parser.IsEmailLocalPartValid(name))
            {
                throw new ArgumentException("Incorrect mailbox name.");
            }

            var mailboxName = name.ToLowerInvariant();

            var login = string.Format("{0}@{1}", mailboxName, domain.Name);

            var password = PasswordGenerator.GenerateNewPassword(12);

            var account = MailServerFactory.CreateMailAccount(teamlabAccount, login);

            var mailbox = MailServer.CreateMailbox(mailboxName, password, domain, account, MailServerFactory);

            if (IsSignalRAvailable)
            {
                MailBoxManager.UpdateUserActivity(TenantId, UserId);
            }

            return(mailbox.ToMailboxData());
        }
        public WebDomainData GetCommonDomain()
        {
            var listDomains = MailServer.GetWebDomains(MailServerFactory).Where(x => x.Tenant == Defines.SHARED_TENANT_ID);

            var listDomainData = listDomains.Select(domain =>
            {
                var dns        = domain.GetDns(MailServerFactory);
                var isVerified = dns.CheckDnsStatus();

                if (domain.IsVerified != isVerified)
                {
                    domain.SetVerified(isVerified);
                }

                return(domain.ToWebDomainData(dns.ToDnsData()));
            }).ToList();

            return(listDomainData.FirstOrDefault());
        }
        public List <WebDomainData> GetDomains()
        {
            var list_domains = MailServer.GetWebDomains(MailServerFactory);

            var list_domain_data = list_domains.Select(domain =>
            {
                var dns         = domain.GetDns(MailServerFactory);
                var is_verified = dns.CheckDnsStatus();

                if (domain.IsVerified != is_verified)
                {
                    domain.SetVerified(is_verified);
                }

                return(domain.ToWebDomainData(dns.ToDnsData()));
            }).ToList();

            return(list_domain_data);
        }
        public List <WebDomainData> GetDomains()
        {
            if (!IsAdmin)
            {
                throw new SecurityException("Need admin privileges.");
            }

            var listDomains = MailServer.GetWebDomains(MailServerFactory);

            var listDomainData = listDomains.Select(domain =>
            {
                var dns        = domain.GetDns(MailServerFactory);
                var isVerified = dns.CheckDnsStatus();

                if (domain.IsVerified != isVerified)
                {
                    domain.SetVerified(isVerified);
                }

                return(domain.ToWebDomainData(dns.ToDnsData()));
            }).ToList();

            return(listDomainData);
        }