public static ResultObject SendExchangeOrganizationSummary(int itemId, string toEmail)
        {
            ResultObject result = new ResultObject();

            result.IsSuccess = true;

            try
            {
                // initialize task manager
                TaskManager.StartTask(TaskManagerSource, "SEND_SUMMARY");
                TaskManager.WriteParameter("Item ID", itemId);
                TaskManager.WriteParameter("To e-mail", toEmail);

                // load organization item
                ExchangeOrganization item = PackageController.GetPackageItem(itemId) as ExchangeOrganization;
                if (item == null)
                {
                    return(Error <ResultObject>(OrganizationNotFoundError));
                }

                #region Check Space and Account
                // Check account
                int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
                if (accountCheck < 0)
                {
                    return(Warning <ResultObject>((-accountCheck).ToString()));
                }

                // Check space
                int packageCheck = SecurityContext.CheckPackage(item.PackageId, DemandPackage.IsActive);
                if (packageCheck < 0)
                {
                    return(Warning <ResultObject>((-packageCheck).ToString()));
                }
                #endregion

                // load organization details
                ExchangeOrganization org = GetOrganizationDetails(item.Id);
                if (org == null)
                {
                    return(Error <ResultObject>(OrganizationNotFoundError));
                }

                // get evaluated summary information
                MailTemplate msg = EvaluateOrganizationSummaryTemplate(org);
                if (msg == null)
                {
                    return(Error <ResultObject>(SendOrganizationTemplateNotSetError));
                }

                // send message
                int sendResult = MailHelper.SendMessage(msg.From, toEmail, msg.Bcc, msg.Subject, msg.Body, msg.Priority, msg.IsHtml);
                if (sendResult < 0)
                {
                    return(Error <ResultObject>((-sendResult).ToString()));
                }

                return(result);
            }
            catch (Exception ex)
            {
                // log error
                TaskManager.WriteError(ex);

                // exit with error code
                return(Error <ResultObject>(SendOrganizationSummaryError, ex.Message));
            }
            finally
            {
                TaskManager.CompleteTask();
            }
        }
        private static MailTemplate EvaluateOrganizationSummaryTemplate(ExchangeOrganization org)
        {
            #region create template context
            Hashtable items = new Hashtable();

            // add organization
            items["org"] = org;

            // add package information
            PackageInfo space = PackageController.GetPackage(org.PackageId);
            items["space"] = space;

            // add user information
            UserInfo user = UserController.GetUser(space.UserId);
            items["user"] = user;
            #endregion

            #region load template
            // load template settings
            UserSettings settings = UserController.GetUserSettings(user.UserId, UserSettings.EXCHANGE_HOSTED_EDITION_ORGANIZATION_SUMMARY);
            if (settings == null)
            {
                return(null);
            }

            // create template
            MailTemplate template = new MailTemplate();

            // from
            template.From = settings["From"];

            // BCC
            template.Bcc = settings["CC"];

            // subject
            template.Subject = settings["Subject"];

            // body
            template.IsHtml = user.HtmlMail;
            string bodySetting = template.IsHtml ? "HtmlBody" : "TextBody";
            template.Body = settings[bodySetting];

            // priority
            string priority = settings["Priority"];
            template.Priority = String.IsNullOrEmpty(priority)
                ? MailPriority.Normal
                : (MailPriority)Enum.Parse(typeof(MailPriority), priority, true);
            #endregion

            #region evaluate template
            if (template.Subject != null)
            {
                template.Subject = PackageController.EvaluateTemplate(template.Subject, items);
            }

            if (template.Body != null)
            {
                template.Body = PackageController.EvaluateTemplate(template.Body, items);
            }
            #endregion

            return(template);
        }