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