private void FindTasksAndNotifyUsers()
        {
            // Get all the users - 25 user limit.
            DataTable userTable = BCCTaskDataAccess.RetrieveAllUsers(ApplicationName, 0, USER_LIMIT);
            string mailMessage = string.Empty;
            string mailSubject = string.Empty;

            // foreach user in the user table.
            foreach (DataRow dr in userTable.Rows)
            {
                BCCTaskEffort effort = new BCCTaskEffort();

                effort.TaskAssignedToUserName = dr["userName"] as string;
                effort.TaskStatus = null; // has to be null to get all the tasks.

                DataTable taskTable = null;
                try
                {
                    // Get the list of tasks for each user
                    taskTable = BCCTaskEffort.ReportTaskEfforts(effort);
                }
                catch(Exception exception)
                {
                    System.Diagnostics.Debug.Write(exception.Message, "TaskNotifier");
                }

                // Dont send emails when there are no tasks.
                if (taskTable != null && taskTable.Rows != null && taskTable.Rows.Count > 0)
                {
                    EmailHelper helper = new EmailHelper(EmailConfigSpeedCode);

                    helper.EmailRecipient = dr["email"] as string;
                    WriteToEventLog("Sending email to : " + helper.EmailRecipient);

                    // Form the email message for each task
                    mailMessage = HtmlEmailHelper.FormHTMLContent(taskTable, effort.ReportStartDate, effort.ReportEndDate);
                    mailSubject = "(BCC) - Task Status Report - " + DateTime.UtcNow.Date.ToString("MMM-dd-yyyy");
                    helper.SendMail(mailSubject, mailMessage, false);
                }
                else
                {
                    System.Diagnostics.Debug.Write("No tasks found for " + effort.TaskAssignedToUserName, "TaskNotifier");
                }
            }
        }
        /// <summary>
        /// Event handler for WMI events
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void monitor_ArtifactStatusChanged(object sender, ArtifactMonitoringEventArgs e)
        {
            try
            {
                int smtp_email_port = 25;
                bool smtp_email_ssl = false;
                string smtp_email_host = string.Empty;
                string smtp_email_username = string.Empty;
                string smtp_email_userpwd = string.Empty;
                string smtp_email_subject = string.Empty;
                string smtp_email_rcpnt = string.Empty;
                string smtp_email_title = "BizTalk Control Center (BCC) - Alert Notification";
                string mailSubject = "BCC Agent notification [" + Environment.MachineName + "]";

                string mailMessage = HtmlEmailHelper.FormatContent(e, smtp_email_title);

                if (!IsLocalEmailFlag)
                {
                    try
                    {
                        // Read monitoring list
                        BCCMonitoringDataAccess da = new BCCMonitoringDataAccess();

                        // Receive Port
                        if (e.ArtifactType == ArtifactType.ReceivePort)
                        {
                            da.LogMonitoringData(e.ArtifactType, e.ReceiveLocationName, e.ArtifactStatus);
                        }
                        // Host Instance
                        else if (e.ArtifactType == ArtifactType.HostInstance)
                        {
                            da.LogMonitoringData(e.ArtifactType, e.HostName, e.ArtifactStatus);
                        }
                        // Service Instance
                        else if (e.ArtifactType == ArtifactType.ServiceInstance)
                        {
                            da.LogMonitoringData(e.ArtifactType, e.ServerName, e.ArtifactStatus);
                        }
                        // Send Port
                        else
                        {
                            da.LogMonitoringData(e.ArtifactType, e.ArtifactName, e.ArtifactStatus);
                        }
                    }
                    catch (Exception exception)
                    {
                        WriteToEventLog(exception.Message + exception.StackTrace);
                    }

                    // Send email
                    EmailHelper helper = new EmailHelper(BCC_AGENT_CONFIG_SPEEDCODE);

                    mailMessage = HtmlEmailHelper.FormatContent(e, helper.EmailTitle);
                    mailSubject = helper.EmailSubject.Replace("$machineName", Environment.MachineName);

                    helper.SendMail(mailSubject, mailMessage, false);

                    WriteToEventLog("Mail message:" + mailMessage);
                }
                else // Use local SMTP settings
                {
                    SmtpSection smtpSection = ConfigurationManager.GetSection("system.net/mailSettings/smtp") as SmtpSection;

                    // Get the from email of the config file
                    smtp_email_username = smtpSection.From;
                    // Get the to address from the app settings
                    smtp_email_rcpnt = ConfigurationManager.AppSettings["EmailRecipients"].ToString();
                    // Get the host name from the smtp section
                    smtp_email_host = smtpSection.Network.Host;

                    EmailHelper helper = new EmailHelper(smtp_email_port, smtp_email_ssl, smtp_email_host, smtp_email_username, smtp_email_userpwd, smtp_email_rcpnt, smtp_email_title, false);
                    helper.SendMail(mailSubject, mailMessage, true);
                }
            }
            catch (Exception exception)
            {
                WriteToEventLog(exception.Message + exception.StackTrace);
            }
        }