示例#1
0
        /// <summary>
        /// Checks the safe sender.
        /// </summary>
        /// <param name="toEmailAddresses">To email addresses.</param>
        /// <param name="fromEmail">From email.</param>
        /// <param name="organizationEmail">The organization email.</param>
        /// <returns></returns>
        protected virtual SafeSenderResult CheckSafeSender(List <string> toEmailAddresses, MailAddress fromEmail, string organizationEmail)
        {
            var result = new SafeSenderResult();

            // Get the safe sender domains
            var safeDomains = GetSafeDomains();

            // Check to make sure the From email domain is a safe sender, if so then we are done.
            var emailDomain = GetEmailDomain(fromEmail.Address);

            if (emailDomain.IsNotNullOrWhiteSpace() && safeDomains.Contains(emailDomain, StringComparer.OrdinalIgnoreCase))
            {
                return(result);
            }

            // The sender domain is not considered safe so check all the recipients to see if they have a domain that does not requrie a safe sender
            var safeDomainValues = DefinedTypeCache.Get(SystemGuid.DefinedType.COMMUNICATION_SAFE_SENDER_DOMAINS.AsGuid()).DefinedValues;

            foreach (var toEmailAddress in toEmailAddresses)
            {
                bool safe          = false;
                var  toEmailDomain = GetEmailDomain(toEmailAddress);
                if (toEmailDomain.IsNotNullOrWhiteSpace() && safeDomains.Contains(toEmailDomain, StringComparer.OrdinalIgnoreCase))
                {
                    var domain = safeDomainValues.FirstOrDefault(dv => dv.Value.Equals(toEmailDomain, StringComparison.OrdinalIgnoreCase));
                    safe = domain != null && domain.GetAttributeValue("SafeToSendTo").AsBoolean();
                }

                if (!safe)
                {
                    result.IsUnsafeDomain = true;
                    break;
                }
            }

            if (result.IsUnsafeDomain)
            {
                if (!string.IsNullOrWhiteSpace(organizationEmail) && !organizationEmail.Equals(fromEmail.Address, StringComparison.OrdinalIgnoreCase))
                {
                    result.SafeFromAddress = new MailAddress(organizationEmail, fromEmail.DisplayName);
                    result.ReplyToAddress  = fromEmail;
                }
            }

            return(result);
        }
示例#2
0
        private string GetRecipientReplyToAddress(RockEmailMessage emailMessage, Dictionary <string, object> mergeFields, SafeSenderResult safeSenderResult)
        {
            var replyToAddress = string.Empty;

            if (emailMessage.ReplyToEmail.IsNotNullOrWhiteSpace())
            {
                replyToAddress = emailMessage.ReplyToEmail.ResolveMergeFields(mergeFields, emailMessage.CurrentPerson, emailMessage.EnabledLavaCommands);
            }

            if (safeSenderResult.IsUnsafeDomain && safeSenderResult.ReplyToAddress != null)
            {
                if (replyToAddress.IsNullOrWhiteSpace())
                {
                    replyToAddress = safeSenderResult.ReplyToAddress.ToString();
                }
                else
                {
                    replyToAddress += $",{safeSenderResult.ReplyToAddress.ToString()}";
                }
            }
            return(replyToAddress);
        }