/// <summary> /// Sends the specified communication. /// </summary> /// <param name="communication">The communication.</param> public override void Send(Model.Communication communication) { var rockContext = new RockContext(); var communicationService = new CommunicationService(rockContext); communication = communicationService.Get(communication.Id); if (communication != null && communication.Status == Model.CommunicationStatus.Approved && communication.HasPendingRecipients(rockContext) && (!communication.FutureSendDateTime.HasValue || communication.FutureSendDateTime.Value.CompareTo(RockDateTime.Now) <= 0)) { // Update any recipients that should not get sent the communication var recipientService = new CommunicationRecipientService(rockContext); foreach (var recipient in recipientService.Queryable("PersonAlias.Person") .Where(r => r.CommunicationId == communication.Id && r.Status == CommunicationRecipientStatus.Pending) .ToList()) { var person = recipient.PersonAlias.Person; if (person.IsDeceased) { recipient.Status = CommunicationRecipientStatus.Failed; recipient.StatusNote = "Person is deceased!"; } } rockContext.SaveChanges(); } base.Send(communication); }
/// <summary> /// Sends the specified communication. /// </summary> /// <param name="communication">The communication.</param> public override void Send(Model.Communication communication) { var rockContext = new RockContext(); var communicationService = new CommunicationService(rockContext); communication = communicationService.Queryable() .FirstOrDefault(t => t.Id == communication.Id); if (communication != null && communication.Status == Model.CommunicationStatus.Approved && communication.HasPendingRecipients(rockContext) && (!communication.FutureSendDateTime.HasValue || communication.FutureSendDateTime.Value.CompareTo(RockDateTime.Now) <= 0)) { // Update any recipients that should not get sent the communication var recipientService = new CommunicationRecipientService(rockContext); foreach (var recipient in recipientService.Queryable("PersonAlias.Person") .Where(r => r.CommunicationId == communication.Id && r.Status == CommunicationRecipientStatus.Pending) .ToList()) { var person = recipient.PersonAlias.Person; if (!person.IsEmailActive) { recipient.Status = CommunicationRecipientStatus.Failed; recipient.StatusNote = "Email is not active!"; } if (person.IsDeceased) { recipient.Status = CommunicationRecipientStatus.Failed; recipient.StatusNote = "Person is deceased!"; } if (person.EmailPreference == Model.EmailPreference.DoNotEmail) { recipient.Status = CommunicationRecipientStatus.Failed; recipient.StatusNote = "Email Preference of 'Do Not Email!'"; } else if (person.EmailPreference == Model.EmailPreference.NoMassEmails && communication.IsBulkCommunication) { recipient.Status = CommunicationRecipientStatus.Failed; recipient.StatusNote = "Email Preference of 'No Mass Emails!'"; } } // If an unsubscribe value has been entered, and this is a bulk email, add the text if (communication.IsBulkCommunication) { string unsubscribeHtml = GetAttributeValue("UnsubscribeHTML"); if (!string.IsNullOrWhiteSpace(unsubscribeHtml)) { communication.SetMediumDataValue("UnsubscribeHTML", unsubscribeHtml); } } string defaultPlainText = GetAttributeValue("DefaultPlainText"); if (!string.IsNullOrWhiteSpace(defaultPlainText)) { communication.SetMediumDataValue("DefaultPlainText", defaultPlainText); } rockContext.SaveChanges(); } base.Send(communication); }