/// <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 ); }