/// <summary> /// Verify if mail provider quotas will exceed if we will try to add Mail Domain into Hosting Space /// </summary> /// <param name="packageId">Hosting Space Id</param> /// <param name="mailServer">Mail Server instance which is used to get Mail Domain information from.</param> /// <param name="domainName">Name of the domain.</param> /// <returns>True, if a quota will exceed. Otherwise, false.</returns> protected QuotaLimit IsQuotasWillExceed(int packageId, MailServer mailServer, string domainName) { QuotaLimit result = new QuotaLimit(); bool quotaExceeded = false, skipOsDomains = false; // Get OS domains that are already in Hosting Space List<DomainInfo> spaceDomains = ServerController.GetDomains(packageId); // Step #1 - do not count mail domain as OS domain if OS domain with such name as mail domain already present in Hosting Space foreach (DomainInfo domain in spaceDomains) { if (domain.DomainName.Equals(domainName)) { skipOsDomains = true; break; } } // in current scenario of importing we import domains until the quota exceeded // in other words let's examine whether quota will be exeeded if we will add +1 domain. if (skipOsDomains == false) { quotaExceeded = VerifyIfQuotaWillBeExceeded(packageId, Quotas.OS_DOMAINS, 1); result.IsExceeded = quotaExceeded; result.Message = "Mail_Domain"; } // Step #3 if (quotaExceeded == false) { quotaExceeded = VerifyIfQuotaWillBeExceeded(packageId, Quotas.MAIL_ACCOUNTS,mailServer.GetAccounts(domainName).Length); result.IsExceeded = quotaExceeded; result.Message = "Mail_Account"; } // Step #4 if (quotaExceeded == false) { quotaExceeded = VerifyIfQuotaWillBeExceeded(packageId, Quotas.MAIL_GROUPS,mailServer.GetGroups(domainName).Length); result.IsExceeded = quotaExceeded; result.Message = "Mail_Group"; } // Step #5 if (quotaExceeded == false) { quotaExceeded = VerifyIfQuotaWillBeExceeded(packageId, Quotas.MAIL_LISTS,mailServer.GetLists(domainName).Length); result.IsExceeded = quotaExceeded; result.Message = "Mail_List"; } // Return validation result return result; }
public void ImportItem(int packageId, int itemTypeId, Type itemType, ResourceGroupInfo group, string itemName) { // get service id int serviceId = PackageController.GetPackageServiceId(packageId, group.GroupName); if (serviceId == 0) return; // Mail provider MailServer mail = new MailServer(); ServiceProviderProxy.Init(mail, serviceId); if (itemType == typeof(MailDomain)) { QuotaLimit result = IsQuotasWillExceed(packageId, mail, itemName); //in case quotas will exceed the space - exit the import function if (result.IsExceeded) { if (result.Message.Equals("Mail_Domain")) { const string exceededQuota = "number of domains"; TaskManager.WriteWarning( String.Format( "Unable to import mail domain '{0}'.\r\nHosting Plan quotas will be exceeded. \r\nVerify the following quotas before importing mail domain: {1}." , itemName, exceededQuota ) ); return; } if (result.Message.Equals("Mail_Account")) { const string exceededQuota = "number of mail accounts"; TaskManager.WriteWarning( String.Format( "Unable to import mail domain '{0}'.\r\nHosting Plan quotas will be exceeded. \r\nVerify the following quotas before importing mail domain: {1}." , itemName, exceededQuota ) ); return; } if (result.Message.Equals("Mail_Group")) { const string exceededQuota = "number of groups"; TaskManager.WriteWarning( String.Format( "Unable to import mail domain '{0}'.\r\nHosting Plan quotas will be exceeded. \r\nVerify the following quotas before importing mail domain: {1}." , itemName, exceededQuota ) ); return; } if (result.Message.Equals("Mail_List")) { const string exceededQuota = "number of mail lists"; TaskManager.WriteWarning( String.Format( "Unable to import mail domain '{0}'.\r\nHosting Plan quotas will be exceeded. \r\nVerify the following quotas before importing mail domain: {1}." , itemName, exceededQuota ) ); return; } } List<string> domains = new List<string>(); domains.Add(itemName); try { domains.AddRange(mail.GetDomainAliases(itemName)); } catch (Exception ex) { TaskManager.WriteError(ex, "Error importing mail domain - skipped"); return; } MailDomain mailDomain = new MailDomain(); mailDomain.Name = itemName; mailDomain.ServiceId = serviceId; mailDomain.PackageId = packageId; int mailDomainId = PackageController.AddPackageItem(mailDomain); // restore domains RestoreDomainsByMail(domains, packageId, mailDomainId); // add mail accounts try { MailAccount[] accounts = mail.GetAccounts(itemName); foreach (MailAccount account in accounts) { account.ServiceId = serviceId; account.PackageId = packageId; //get mail account password account.Password = CryptoUtils.Encrypt(account.Password); PackageController.AddPackageItem(account); } } catch (Exception ex) { TaskManager.WriteError(ex, "Error importing mail account"); } //add mail aliases (forwardings) try { MailAlias[] aliases = mail.GetMailAliases(itemName); foreach (MailAlias alias in aliases) { alias.ServiceId = serviceId; alias.PackageId = packageId; PackageController.AddPackageItem(alias); } } catch (Exception ex) { TaskManager.WriteError(ex, "Error importing mail aliases"); } // add mail groups try { MailGroup[] groups = mail.GetGroups(itemName); foreach (MailGroup mailGroup in groups) { mailGroup.ServiceId = serviceId; mailGroup.PackageId = packageId; PackageController.AddPackageItem(mailGroup); } } catch (Exception ex) { TaskManager.WriteError(ex, "Error importing mail group"); } // add mail lists try { MailList[] lists = mail.GetLists(itemName); foreach (MailList list in lists) { list.ServiceId = serviceId; list.PackageId = packageId; PackageController.AddPackageItem(list); } } catch (Exception ex) { TaskManager.WriteError(ex, "Error importing mail list"); } } }