예제 #1
0
        /// <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);
        }
예제 #2
0
파일: Email.cs 프로젝트: timothybaloyi/Rock
        /// <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);
        }