protected override void Do() { try { SetProgress((int?)MailOperationRemoveMailboxProgress.Init, "Setup tenant and user"); CoreContext.TenantManager.SetCurrentTenant(_mailBox.Tenant); try { SecurityContext.AuthenticateMe(_mailBox.Account.TeamlabAccount.ID); } catch { // User was removed SecurityContext.AuthenticateMe(Core.Configuration.Constants.CoreSystem); } var user = _mailBox.Account.TeamlabAccount.ID.ToString(); SetProgress((int?)MailOperationRemoveMailboxProgress.RemoveFromDb, "Remove mailbox from Db"); var groups = _mailServer.GetMailGroups(_mailServerFactory); var groupsContainsMailbox = groups.Where(g => g.InAddresses.Contains(_mailBox.Address)) .Select(g => g); foreach (var mailGroup in groupsContainsMailbox) { if (mailGroup.InAddresses.Count == 1) { _mailServer.DeleteMailGroup(mailGroup.Id, _mailServerFactory); } else { mailGroup.RemoveMember(_mailBox.Address.Id); } } _mailServer.DeleteMailbox(_mailBox); SetProgress((int?)MailOperationRemoveMailboxProgress.RecalculateFolder, "Recalculate folders counters"); _mailBoxManager.RecalculateFolders(_mailBox.Tenant, user); SetProgress((int?)MailOperationRemoveMailboxProgress.ClearCache, "Clear accounts cache"); _mailBoxManager.CachedAccounts.Clear(user); } catch (Exception e) { Logger.Error("Mail operation error -> Remove mailbox: {0}", e); Error = "InternalServerError"; } }
public virtual void DoubleDeletingMailGroup() { server.DeleteMailGroup(peter_mail_group.Id, TestContext.ServerFactory); Assert.Throws <ArgumentException>(() => server.DeleteMailGroup(peter_mail_group.Id, TestContext.ServerFactory)); Assert.IsNull(server.GetMailGroup(peter_mail_group.Id, TestContext.ServerFactory)); }