public void RemoveMailGroup(int id) { if (!IsAdmin) { throw new SecurityException("Need admin privileges."); } if (id < 0) { throw new ArgumentException(@"Invalid mailgroup id.", "id"); } using (var daoFactory = new DaoFactory()) { var serverGroupDao = daoFactory.CreateServerGroupDao(Tenant); var group = serverGroupDao.Get(id); if (group == null) { throw new Exception("Group not found"); } var serverAddressDao = daoFactory.CreateServerAddressDao(Tenant); var serverDao = daoFactory.CreateServerDao(); var server = serverDao.Get(Tenant); var engine = new Server.Core.ServerEngine(server.Id, server.ConnectionString); using (var tx = daoFactory.DbManager.BeginTransaction(IsolationLevel.ReadUncommitted)) { serverGroupDao.Delete(id); serverAddressDao.DeleteAddressesFromMailGroup(id); serverAddressDao.Delete(group.AddressId); engine.RemoveAlias(group.Address); tx.Commit(); } } CacheEngine.ClearAll(); }
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(); } } }
public void RemoveAlias(int mailboxId, int addressId) { if (!IsAdmin) { throw new SecurityException("Need admin privileges."); } if (mailboxId < 0) { throw new ArgumentException(@"Invalid address id.", "mailboxId"); } using (var daoFactory = new DaoFactory()) { var mailboxDao = daoFactory.CreateMailboxDao(); var mailbox = mailboxDao.GetMailBox(new ConcreteTenantServerMailboxExp(mailboxId, Tenant, false)); if (mailbox == null) { throw new ArgumentException("Mailbox not exists"); } if (!mailbox.IsTeamlabMailbox) { throw new ArgumentException("Invalid mailbox type"); } var serverAddressDao = daoFactory.CreateServerAddressDao(Tenant); var alias = serverAddressDao.Get(addressId); if (!alias.IsAlias) { throw new ArgumentException("Address is not alias"); } var serverDomainDao = daoFactory.CreateServerDomainDao(Tenant); var serverDomain = serverDomainDao.GetDomain(alias.DomainId); if (serverDomain == null) { throw new ArgumentException("Domain not exists"); } var aliasEmail = string.Format("{0}@{1}", alias.AddressName, serverDomain.Name); var serverDao = daoFactory.CreateServerDao(); var server = serverDao.Get(Tenant); var engine = new Server.Core.ServerEngine(server.Id, server.ConnectionString); using (var tx = daoFactory.DbManager.BeginTransaction(IsolationLevel.ReadUncommitted)) { serverAddressDao.Delete(addressId); engine.RemoveAlias(aliasEmail); tx.Commit(); } CacheEngine.Clear(mailbox.User); } }