public override IMailbox GetMailbox(int mailboxId, IMailServerFactory factory) { if (mailboxId < 0) { throw new ArgumentException("mailbox_id has negative value"); } if (factory == null) { throw new ArgumentNullException("factory"); } MailboxWithAddressDto mailboxDto; List <MailAddressDto> aliasesDtoList; using (var dbContext = TeamlabMailboxDal.CreateMailDbContext()) { mailboxDto = TeamlabMailboxDal.GetMailbox(mailboxId, dbContext.DbManager); aliasesDtoList = TeamlabMailAddressDal.GetMailboxAliases(mailboxId, dbContext.DbManager); } if (mailboxDto == null) { return(null); } var mailboxBase = _GetMailbox(mailboxDto.mailbox_address.ToString()); if (mailboxBase == null) { throw new Exception("Mailbox is missing on server"); } var mailboxDomain = factory.CreateWebDomain(mailboxDto.mailbox_address.domain.id, mailboxDto.mailbox_address.domain.tenant, mailboxDto.mailbox_address.domain.name, mailboxDto.mailbox_address.domain.is_virified, this); var mailboxAddress = factory.CreateMailAddress(mailboxDto.mailbox_address.id, mailboxDto.mailbox_address.tenant, mailboxDto.mailbox_address.name, mailboxDomain); var account = CoreContext.Authentication.GetAccountByID(new Guid(mailboxDto.mailbox.user)); var mailboxAccount = factory.CreateMailAccount(account, mailboxBase.Account.Login); var mailboxAliases = aliasesDtoList .Select(alias => factory.CreateMailAddress(alias.id, alias.tenant, alias.name, mailboxDomain)) .ToList(); var mailbox = factory.CreateMailbox(mailboxDto.mailbox.id, mailboxDto.mailbox.tenant, mailboxAddress, mailboxDto.mailbox.name, mailboxAccount, mailboxAliases.ToList(), this); return(mailbox); }
public override IMailGroup CreateMailGroup(string groupName, IWebDomain domain, List <int> addressIds, IMailServerFactory factory) { if (string.IsNullOrEmpty(groupName)) { throw new ArgumentNullException("groupName", "ServerModel::CreateMailGroup"); } if (domain == null) { throw new ArgumentNullException("domain"); } if (addressIds == null) { throw new ArgumentNullException("addressIds"); } if (!addressIds.Any()) { throw new ArgumentException("Empty address_ids list"); } if (factory == null) { throw new ArgumentNullException("factory"); } MailGroupDto mailgroupDto; using (var dbContextWithTran = TeamlabMailGroupDal.CreateMailDbContext(true)) { var addressDtoList = TeamlabMailAddressDal.GetMailAddresses(addressIds, dbContextWithTran.DbManager); var addressBaseList = addressDtoList .Select(dto => new MailAddressBase(dto.name, new WebDomainBase(dto.domain.name))) .ToList(); var mailgroupBase = new MailGroupBase(new MailAddressBase(groupName, new WebDomainBase(domain)), addressBaseList) { Address = { DateCreated = DateTime.UtcNow } }; mailgroupDto = TeamlabMailGroupDal.SaveMailGroup(mailgroupBase.Address.LocalPart, mailgroupBase.Address.DateCreated, domain.Id, domain.Name, domain.IsVerified, addressDtoList, dbContextWithTran.DbManager); _CreateMailGroup(mailgroupBase.Address, addressBaseList); dbContextWithTran.CommitTransaction(); } var mailgroupAddress = factory.CreateMailAddress(mailgroupDto.address.id, mailgroupDto.address.tenant, mailgroupDto.address.name, domain); var inAddresses = mailgroupDto.addresses.Select( addressDto => factory.CreateMailAddress(addressDto.id, addressDto.tenant, addressDto.name, domain)) .ToList(); var mailgroup = factory.CreateMailGroup(mailgroupDto.id, mailgroupDto.id_tenant, mailgroupAddress, inAddresses.ToList(), this); return(mailgroup); }
public override ICollection <IMailbox> GetMailboxes(IMailServerFactory factory) { if (factory == null) { throw new ArgumentNullException("factory"); } var mailboxList = new List <IMailbox>(); using (var dbContext = TeamlabMailboxDal.CreateMailDbContext()) { var mailboxDtoList = TeamlabMailboxDal.GetMailboxes(dbContext.DbManager); var mailboxBaseList = _GetMailboxes(mailboxDtoList.ConvertAll(d => d.mailbox.address)); mailboxList.AddRange(from serverMailbox in mailboxBaseList let mailboxDto = mailboxDtoList.Find(d => d.mailbox.address == serverMailbox.Address.ToString()) let domain = factory.CreateWebDomain(mailboxDto.mailbox_address.domain.id, mailboxDto.mailbox_address.domain.tenant, mailboxDto.mailbox_address.domain.name, mailboxDto.mailbox_address.domain.is_virified, this) let mailboxAddress = factory.CreateMailAddress(mailboxDto.mailbox_address.id, mailboxDto.mailbox_address.tenant, mailboxDto.mailbox_address.name, domain) let aliasesDtoList = TeamlabMailAddressDal.GetMailboxAliases(mailboxDto.mailbox.id, dbContext.DbManager) let aliases = aliasesDtoList.Select(a => factory.CreateMailAddress(a.id, a.tenant, a.name, domain)).ToList() let teamlabAccount = CoreContext.Authentication.GetAccountByID(new Guid(mailboxDto.mailbox.user)) let account = factory.CreateMailAccount(teamlabAccount, serverMailbox.Account.Login) select factory.CreateMailbox(mailboxDto.mailbox.id, mailboxDto.mailbox.tenant, mailboxAddress, mailboxDto.mailbox.name, account, aliases.ToList(), this)); } return(mailboxList); }