public static int DeleteMailDomain(int itemId)
        {
            // check account
            int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo);
            if (accountCheck < 0) return accountCheck;

            // load original meta item
            MailDomain origItem = (MailDomain)PackageController.GetPackageItem(itemId);
            if (origItem == null)
                return BusinessErrorCodes.ERROR_MAIL_DOMAIN_PACKAGE_ITEM_NOT_FOUND;

            // find if account exists under this mail domain
            List<ServiceProviderItem> accounts = PackageController.GetPackageItemsByName(
                origItem.PackageId, "%@" + origItem.Name);

            if (accounts.Count > 0)
                return BusinessErrorCodes.ERROR_MAIL_DOMAIN_IS_NOT_EMPTY; // mail domain is not empty

            // place log record
            TaskManager.StartTask("MAIL_DOMAIN", "DELETE", origItem.Name);
            TaskManager.ItemId = itemId;

            try
            {
                // get service
                MailServer mail = new MailServer();
                ServiceProviderProxy.Init(mail, origItem.ServiceId);

                // delete service item
                mail.DeleteDomain(origItem.Name);

                // delete meta item
                PackageController.DeletePackageItem(origItem.Id);

                // update related domain with a new pointer
                DomainInfo domain = ServerController.GetDomain(origItem.Name);
                if (domain != null)
                {
                    domain.MailDomainId = 0;
                    ServerController.UpdateDomain(domain);
                }

                return 0;
            }
            catch (Exception ex)
            {
                throw TaskManager.WriteError(ex);
            }
            finally
            {
                TaskManager.CompleteTask();
            }
        }