Пример #1
0
        public void RemoveNotificationAddress(string address)
        {
            if (!CoreContext.Configuration.Standalone)
            {
                throw new SecurityException("Only for standalone");
            }

            if (!IsAdmin)
            {
                throw new SecurityException("Need admin privileges.");
            }

            if (string.IsNullOrEmpty(address))
            {
                throw new ArgumentNullException("address");
            }

            var deleteAddress = address.ToLowerInvariant().Trim();
            var notificationAddressSettings = ServerNotificationAddressSettings.LoadForTenant(Tenant);

            if (notificationAddressSettings.NotificationAddress != deleteAddress)
            {
                throw new ArgumentException("Mailbox not exists");
            }

            var mailAddress = new MailAddress(deleteAddress);

            using (var daoFactory = new DaoFactory())
            {
                var serverDomainDao = daoFactory.CreateServerDomainDao(Tenant);
                var serverDomain    = serverDomainDao.GetDomains().FirstOrDefault(d => d.Name == mailAddress.Host);

                if (serverDomain == null)
                {
                    throw new ArgumentException("Domain not exists");
                }

                var serverDao = daoFactory.CreateServerDao();
                var server    = serverDao.Get(Tenant);

                if (server == null)
                {
                    throw new ArgumentException("Server not configured");
                }

                var engine = new Server.Core.ServerEngine(server.Id, server.ConnectionString);

                engine.RemoveMailbox(deleteAddress);
            }

            var addressSettings = notificationAddressSettings.GetDefault() as ServerNotificationAddressSettings;

            if (addressSettings != null && !addressSettings.SaveForTenant(Tenant))
            {
                throw new Exception("Could not delete notification address setting.");
            }
        }
Пример #2
0
        public void RemoveMailbox(MailBoxData mailBox)
        {
            var engine = new EngineFactory(mailBox.TenantId);

            using (var daoFactory = new DaoFactory())
            {
                var serverAddressDao = daoFactory.CreateServerAddressDao(mailBox.TenantId);

                var serverMailboxAddresses = serverAddressDao.GetList(mailBox.MailBoxId);

                var serverMailboxAddress = serverMailboxAddresses.FirstOrDefault(a => !a.IsAlias && !a.IsMailGroup);

                if (serverMailboxAddress == null)
                {
                    throw new InvalidDataException("Mailbox address not found");
                }

                var serverDomainDao = daoFactory.CreateServerDomainDao(mailBox.TenantId);
                var serverDomain    = serverDomainDao.GetDomain(serverMailboxAddress.DomainId);

                if (serverDomain == null)
                {
                    throw new InvalidDataException("Domain not found");
                }

                var serverGroupDao = daoFactory.CreateServerGroupDao(mailBox.TenantId);

                var serverGroups = serverGroupDao.GetList();

                var serverDao = daoFactory.CreateServerDao();
                var server    = serverDao.Get(mailBox.TenantId);

                var serverEngine = new Server.Core.ServerEngine(server.Id, server.ConnectionString);

                var utcNow = DateTime.UtcNow;

                using (var tx = daoFactory.DbManager.BeginTransaction(IsolationLevel.ReadUncommitted))
                {
                    foreach (var serverGroup in serverGroups)
                    {
                        var addresses = serverAddressDao.GetGroupAddresses(serverGroup.Id);

                        var index = addresses.FindIndex(a => a.Id == serverMailboxAddress.Id);

                        if (index < 0)
                        {
                            continue;
                        }

                        addresses.RemoveAt(index);

                        if (addresses.Count == 0)
                        {
                            serverGroupDao.Delete(serverGroup.Id);

                            serverAddressDao.DeleteAddressesFromMailGroup(serverGroup.Id);

                            serverEngine.RemoveAlias(serverGroup.Address);
                        }
                        else
                        {
                            serverAddressDao.DeleteAddressFromMailGroup(serverGroup.Id, serverMailboxAddress.Id);

                            var goTo = string.Join(",",
                                                   addresses.Select(m => string.Format("{0}@{1}", m.AddressName, serverDomain.Name)));

                            var serverAddress = new Alias
                            {
                                Name     = "",
                                Address  = serverGroup.Address,
                                GoTo     = goTo,
                                Domain   = serverDomain.Name,
                                IsActive = true,
                                IsGroup  = true,
                                Modified = utcNow,
                                Created  = serverGroup.DateCreated
                            };

                            serverEngine.SaveAlias(serverAddress);
                        }
                    }

                    serverAddressDao.Delete(serverMailboxAddresses.Select(a => a.Id).ToList());

                    foreach (var mailboxAddress in serverMailboxAddresses)
                    {
                        serverEngine.RemoveAlias(string.Format("{0}@{1}", mailboxAddress.AddressName, serverDomain.Name));
                    }

                    engine.MailboxEngine.RemoveMailBox(daoFactory, mailBox, false);

                    serverEngine.RemoveMailbox(string.Format("{0}@{1}", serverMailboxAddress.AddressName,
                                                             serverDomain.Name));

                    tx.Commit();
                }
            }
        }