public static int SendEmail(string from, string subject, string body, Kindred.Common.Security.NameEmailPair[] recipients, ITATSystem system, List<string> roles, List<int> facilityIDs)
		{
			Kindred.Common.Email.Email email = new Kindred.Common.Email.Email();
			string emailBody = System.Web.HttpUtility.HtmlDecode(body);

			string[] overrideRecipients = system.OverrideEmail.Split(new char[] { ',', '|' }, StringSplitOptions.RemoveEmptyEntries);
			string[] ownerRecipients = system.OwnerEmail.Split(new char[] { ',', '|' }, StringSplitOptions.RemoveEmptyEntries);

			//Determine actual recipients and whether to add a "debug" or "recipients not found" message to the email body
			if (recipients.Length > 0)
			{
				if (overrideRecipients.Length > 0)
				{
					emailBody = DebugMessage(recipients) + emailBody;
					AddRecipients(email, overrideRecipients);
				}
				else
				{
					AddRecipients(email, recipients);  
				}
			}
			else
			{
				if (overrideRecipients.Length > 0)
				{
                    emailBody = DebugMessage(recipients) + emailBody + RecipientsNotFoundMessage(system, roles, facilityIDs);
					AddRecipients(email, overrideRecipients);
				}
				else
				{
                    emailBody = emailBody + RecipientsNotFoundMessage(system, roles, facilityIDs);
					AddRecipients(email, ownerRecipients);
				}
			}

			if (string.IsNullOrEmpty(email.To))
			{
                emailBody = emailBody + RecipientsNotFoundMessage(system, roles, facilityIDs);
				AddRecipients(email, ownerRecipients);
				if (string.IsNullOrEmpty(email.To))
				{
					throw new Exception("No e-mail recipients were found.   This should not happen, because the OwnerEmail attribute in the System Def XML should contain at least one e-mail address.  Report this issue to Support.");
				}
			}

			email.Subject = subject;
			email.From = from;
			email.Format = Kindred.Common.Email.EmailFormat.Html;
			email.Body = emailBody;
            email.ApplicationName = EmailName(system.Name);
			return email.Send();
		}
 public static void SendNotificationToRoles(ITATSystem system, string subject, string message, List<string> roles)
 {
     if (roles != null && roles.Count > 0)
     {
         Kindred.Common.Email.Email email = new Kindred.Common.Email.Email();
         Kindred.Common.Security.NameEmailPair[] recipients = SecurityHelper.GetEmailRecipients(system, roles);
         SendEmail(XMLNames._M_EmailFrom, subject, message, recipients, system, roles, null);
     }
 }
		public string Send(ManagedItem managedItem, ITATSystem system, string sEnvironment, List<int> owningFacilityIDs)
		{
			//If the subject or body or recipients are empty, then do not send anything
			if ((string.IsNullOrEmpty(Subject)) || (string.IsNullOrEmpty(this.Text)) || (this.Recipients == null) || (this.Recipients.Count == 0))
				return string.Empty;

			string sError = string.Empty;

			string from = null;
			string subject = null;
			string text = null;
			Kindred.Common.Security.NameEmailPair[] emailRecipients = null;

			try
			{
				Kindred.Common.Email.Email email = new Kindred.Common.Email.Email();
				from = XMLNames._M_EmailFrom;
				subject = string.IsNullOrEmpty(Subject) ? "Subject Missing" : Subject;
				text = string.IsNullOrEmpty(Text) ? "Text Missing" : Text;

				Term.SubstituteBasicTerms(managedItem, ref text);
				Term.SubstituteSpecialTerms(ref text, managedItem);

				//Now complete the 'ManagedItemReference' email links - fill in the dynamically supplied info
				if (!string.IsNullOrEmpty(system.Name))
					text = text.Replace(XMLNames._M_SystemNameHolder, system.Name);
				if (!string.IsNullOrEmpty(sEnvironment))
					text = text.Replace(XMLNames._M_EnvironmentHolder, sEnvironment);
				text = text.Replace(XMLNames._M_ManagedItemIdHolder, managedItem.ManagedItemID.ToString());

				List<int> facilityIDs = null;
				if (owningFacilityIDs != null)
					facilityIDs = new List<int>(owningFacilityIDs);
				else
					facilityIDs = new List<int>();
				bool overrideFacilities = false;
				//Note - HasOwningFacility trumps use of filterFacilityTerm
				if (!(system.HasOwningFacility ?? false))
				{
					if (FilterFacilityTermID.HasValue)
					{
						Term filterFacilityTerm = managedItem.FindTerm(FilterFacilityTermID.Value);
						if (filterFacilityTerm != null)
						{
							FacilityTerm facilityTerm = null;
							if (filterFacilityTerm.TermType == TermType.Facility)
								facilityTerm = filterFacilityTerm as FacilityTerm;
							else
								facilityTerm = new FacilityTerm(false, managedItem, filterFacilityTerm);
							if (facilityTerm != null)
							{
								facilityIDs = facilityTerm.SelectedFacilityIDs;
								overrideFacilities = true;
							}
						}
					}
				}

				List<int> allRecipientFacilityIDs = new List<int>();
				
				if ((system.HasOwningFacility ?? false) || overrideFacilities)
				{
					foreach (string recipient in Recipients)
					{
						List<int> absoluteLevels = null;
						List<int> relativeLevels = null;
						system.GetFacilityLevels(recipient, ref absoluteLevels, ref relativeLevels);
						List<int> recipientFacilityIDs = FacilityCollection.FacilityAncestry(facilityIDs, absoluteLevels, relativeLevels);
						foreach (int facilityID in recipientFacilityIDs)
							if (!allRecipientFacilityIDs.Contains(facilityID))
								allRecipientFacilityIDs.Add(facilityID);
					}
					emailRecipients = SecurityHelper.GetEmailRecipients(system, Recipients, allRecipientFacilityIDs);
				}
				else
				{
					emailRecipients = SecurityHelper.GetEmailRecipients(system, Recipients);
				}

				EmailHelper.SendEmail(from, subject, text, emailRecipients, system, Recipients, allRecipientFacilityIDs);
			}
			catch (Exception e)
			{
				sError = string.Format("Email={0} Exception={1}", EmailInfo(from, emailRecipients, subject, text), e.ToString());
			}
			return sError;
		}
 public static void SendNotificationToOwner(ITATSystem system, ManagedItem managedItem, string message, string errorMessage)
 {
     string[] ownerRecipients = system.OwnerEmail.Split(new char[] { ',', '|' }, StringSplitOptions.RemoveEmptyEntries);
     if (ownerRecipients.Length > 0)
     {
         Kindred.Common.Email.Email email = new Kindred.Common.Email.Email();
         foreach (string recipient in ownerRecipients)
             email.AddRecipient(Kindred.Common.Email.EmailRecipientType.To, recipient);
         email.Subject = string.Format("ITAT-{0} -- Unable to send notification for {1} {2}", system.Name, system.ManagedItemName, managedItem.ItemNumber);
         email.From = XMLNames._M_EmailFrom;
         email.Format = Kindred.Common.Email.EmailFormat.Html;
         email.Body = string.Format("<b>ITAT-{0} was unable to send a notification for {1} {2}.<br /><br />{3}</b><br /><br /><br />{4}", system.Name, system.ManagedItemName, managedItem.ItemNumber, errorMessage, message);
         email.ApplicationName = EmailName(system.Name);
         email.Send();
     }
 }
        private void ProcessDefinitionErrors(metaStoreDefinition definition, string systemName)
        {
            string errorReport = string.Format("There were a total of {0:D} error(s) reported for {1:D} manageditem(s) out of a total of {2:D} manageditem(s) processed.",
                GetErrorCount(definition),
                definition.dataRows.Count,
                definition.managedItemIDCount - definition.skippedManagedItemIDs.Count);

            if (definition.skippedManagedItemIDs.Count > 0)
                errorReport += string.Format("  {0:D} manageditem(s) were not processed.", definition.skippedManagedItemIDs.Count);

            if (definition.dataStoreDefinition.DataStoreConfig.ErrorLogRecepientEmailList.Count == 0)
            {
                _log.Error(string.Format("Email Not Sent - For System '{0}', Definition '{1}' ... {2}. No email recipents were listed.", systemName, definition.dataStoreDefinition.Name, errorReport));
            }
            else
            {
                _log.Error(string.Format("For System '{0}', Definition '{1}' ... {2}", systemName, definition.dataStoreDefinition.Name, errorReport));
                byte[] output = null;
                using (StringWriter sw = new StringWriter())
                {
                    sw.WriteLine("Template Name,ManagedItem Number,Term Name,Field Name,Error Message");
                    foreach (ManagedItemStore.dataRow dataRow in definition.dataRows)
                    {
                        foreach (ManagedItemStore.rowError rowError in dataRow.rowErrors)
                        {
                            StringBuilder sb = new StringBuilder();
                            sb = sb.Append(TextHelper.CSVFormat(null, rowError.templateName, false));
                            sb = sb.Append(TextHelper.CSVFormat(null, rowError.managedItemNumber, false));
                            sb = sb.Append(TextHelper.CSVFormat(null, rowError.termName, false));
                            sb = sb.Append(TextHelper.CSVFormat(null, rowError.fieldName, false));
                            sb = sb.Append(TextHelper.CSVFormat(null, rowError.message, true));
                            sw.WriteLine(sb.ToString());
                        }
                    }
                    output = Encoding.UTF8.GetBytes(sw.ToString());
                }
                Kindred.Common.Email.Email email = new Kindred.Common.Email.Email();
                email.Subject = string.Format("ITAT System {0} - Validation Errors for Interface '{1}'", systemName, definition.dataStoreDefinition.Name);
                email.Format = Common.Email.EmailFormat.Html;
                email.From = XMLNames._M_EmailFrom;
                foreach (string recipient in definition.dataStoreDefinition.DataStoreConfig.ErrorLogRecepientEmailList)
                    email.AddTo(recipient);
                email.Format = Kindred.Common.Email.EmailFormat.Html;
                email.Body = string.Format("Please find the list of validation errors attached. {0}", errorReport);
                email.ApplicationName = Business.EmailHelper.EmailName(systemName);
                email.Attachments.Add(new Common.Email.EmailAttachment(output, definition.emailAttachmentFileName, definition.emailAttachmentExtension));
                email.Send();
            }
        }