Beispiel #1
0
        public AddressData AddMailboxAlias(int mailbox_id, string alias_name)
        {
            if (string.IsNullOrEmpty(alias_name))
            {
                throw new ArgumentException("Invalid alias name.", "alias_name");
            }

            if (mailbox_id < 0)
            {
                throw new ArgumentException("Invalid mailbox id.", "mailbox_id");
            }

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

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

            var mailbox = MailServer.GetMailbox(mailbox_id, MailServerFactory);

            var mailbox_alias_name = alias_name.ToLowerInvariant();

            var alias = mailbox.AddAlias(mailbox_alias_name, mailbox.Address.Domain, MailServerFactory);

            return(alias.ToAddressData());
        }
        public int RemoveMailboxAlias(int mailbox_id, int address_id)
        {
            if (!IsAdmin)
            {
                throw new SecurityException("Need admin privileges.");
            }

            if (address_id < 0)
            {
                throw new ArgumentException(@"Invalid address id.", "address_id");
            }

            if (mailbox_id < 0)
            {
                throw new ArgumentException(@"Invalid mailbox id.", "mailbox_id");
            }

            var mailbox = MailServer.GetMailbox(mailbox_id, MailServerFactory);

            if (mailbox == null)
            {
                throw new ArgumentException("Mailbox not exists");
            }

            mailbox.RemoveAlias(address_id);
            MailBoxManager.CachedAccounts.Clear(mailbox.Account.TeamlabAccount.ID.ToString());

            return(mailbox_id);
        }
Beispiel #3
0
        public int RemoveMailbox(int id)
        {
            if (id < 0)
            {
                throw new ArgumentException("Invalid domain id.", "id");
            }

            var mailbox = MailServer.GetMailbox(id, MailServerFactory);

            var groups = MailServer.GetMailGroups(MailServerFactory);

            var groups_contains_mailbox = groups.Where(g => g.InAddresses.Contains(mailbox.Address))
                                          .Select(g => g);

            foreach (var mail_group in groups_contains_mailbox)
            {
                if (mail_group.InAddresses.Count == 1)
                {
                    MailServer.DeleteMailGroup(mail_group.Id, MailServerFactory);
                }
                else
                {
                    mail_group.RemoveMember(mailbox.Address.Id);
                }
            }

            MailServer.DeleteMailbox(mailbox);

            return(id);
        }
        public MailboxData UpdateMailbox(int mailbox_id, string name)
        {
            if (!IsAdmin)
            {
                throw new SecurityException("Need admin privileges.");
            }

            if (mailbox_id < 0)
            {
                throw new ArgumentException(@"Invalid mailbox id.", "mailbox_id");
            }

            if (name.Length > 255)
            {
                throw new ArgumentException(@"Sender name exceed limitation of 64 characters.", "name");
            }

            var mailbox = MailServer.GetMailbox(mailbox_id, MailServerFactory);

            if (mailbox == null)
            {
                throw new ArgumentException("Mailbox not exists");
            }

            MailServer.UpdateMailbox(mailbox, name, MailServerFactory);

            MailBoxManager.CachedAccounts.Clear(mailbox.Account.TeamlabAccount.ID.ToString());

            return(mailbox.ToMailboxData());
        }
        public MailOperationStatus RemoveMailbox(int id)
        {
            if (id < 0)
            {
                throw new ArgumentException(@"Invalid domain id.", "id");
            }

            var mailbox = MailServer.GetMailbox(id, MailServerFactory);

            if (mailbox == null)
            {
                throw new ItemNotFoundException("Account not found.");
            }

            var isSharedDomain = mailbox.Address.Domain.Tenant == Defines.SHARED_TENANT_ID;

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

            if (isSharedDomain && !IsAdmin && mailbox.Account.TeamlabAccount.ID != SecurityContext.CurrentAccount.ID)
            {
                throw new SecurityException("Removing of a shared mailbox is allowed only for the current account if user is not admin.");
            }

            return(RemoveMailbox(mailbox));
        }
        public int RemoveMailboxAlias(int mailbox_id, int address_id)
        {
            if (!IsAdmin)
            {
                throw new SecurityException("Need admin privileges.");
            }

            if (address_id < 0)
            {
                throw new ArgumentException(@"Invalid address id.", "address_id");
            }

            if (mailbox_id < 0)
            {
                throw new ArgumentException(@"Invalid mailbox id.", "mailbox_id");
            }

            var mailbox = MailServer.GetMailbox(mailbox_id, MailServerFactory);

            if (mailbox == null)
            {
                throw new ArgumentException("Mailbox not exists");
            }

            mailbox.RemoveAlias(address_id);

            return(mailbox_id);
        }
Beispiel #7
0
        public int RemoveMailbox(int id)
        {
            if (id < 0)
            {
                throw new ArgumentException(@"Invalid domain id.", "id");
            }

            var mailbox = MailServer.GetMailbox(id, MailServerFactory);

            if (mailbox == null)
            {
                throw new ItemNotFoundException("Account not found.");
            }

            var isSharedDomain = mailbox.Address.Domain.Tenant == Defines.SHARED_TENANT_ID;

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

            if (isSharedDomain && !IsAdmin && mailbox.Account.TeamlabAccount.ID != SecurityContext.CurrentAccount.ID)
            {
                throw new SecurityException("Removing of a shared mailbox is allowed only for the current account if user is not admin.");
            }

            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);

            MailBoxManager.CachedAccounts.Clear(mailbox.Account.TeamlabAccount.ID.ToString());

            return(id);
        }
        public AddressData AddMailboxAlias(int mailbox_id, string alias_name)
        {
            if (!IsAdmin)
            {
                throw new SecurityException("Need admin privileges.");
            }

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

            if (mailbox_id < 0)
            {
                throw new ArgumentException(@"Invalid mailbox id.", "mailbox_id");
            }

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

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

            var mailbox = MailServer.GetMailbox(mailbox_id, MailServerFactory);

            if (mailbox == null)
            {
                throw new ArgumentException("Mailbox not exists");
            }

            if (mailbox.Address.Domain.Tenant == Defines.SHARED_TENANT_ID)
            {
                throw new InvalidOperationException("Adding mailbox alias is not allowed for shared domain.");
            }

            var mailboxAliasName = alias_name.ToLowerInvariant();

            var alias = mailbox.AddAlias(mailboxAliasName, mailbox.Address.Domain, MailServerFactory);

            MailBoxManager.CachedAccounts.Clear(mailbox.Account.TeamlabAccount.ID.ToString());

            return(alias.ToAddressData());
        }
Beispiel #9
0
        public int RemoveMailboxAlias(int mailbox_id, int address_id)
        {
            if (address_id < 0)
            {
                throw new ArgumentException("Invalid address id.", "address_id");
            }

            if (mailbox_id < 0)
            {
                throw new ArgumentException("Invalid mailbox id.", "mailbox_id");
            }

            var mailbox = MailServer.GetMailbox(mailbox_id, MailServerFactory);

            mailbox.RemoveAlias(address_id);

            return(mailbox_id);
        }