/// <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.Recipients.Where( r => r.Status == Model.CommunicationRecipientStatus.Pending ).Any() && ( !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( "Person" ) .Where( r => r.CommunicationId == communication.Id && r.Status == CommunicationRecipientStatus.Pending ) .ToList() ) { var person = recipient.Person; if ( person.IsDeceased ?? false ) { 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 unbsubcribe 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.SetChannelDataValue( "UnsubscribeHTML", unsubscribeHtml ); } } string defaultPlainText = GetAttributeValue( "DefaultPlainText" ); if ( !string.IsNullOrWhiteSpace( defaultPlainText ) ) { communication.SetChannelDataValue( "DefaultPlainText", defaultPlainText ); } rockContext.SaveChanges(); } base.Send( communication ); }