/// <summary> /// Processes the HTML body. /// </summary> /// <param name="communication">The communication.</param> /// <param name="globalAttributes">The global attributes.</param> /// <param name="mergeObjects">The merge objects.</param> /// <returns></returns> public static string ProcessHtmlBody( Rock.Model.Communication communication, Rock.Web.Cache.GlobalAttributesCache globalAttributes, Dictionary<string, object> mergeObjects ) { string htmlBody = communication.GetChannelDataValue( "HtmlMessage" ); if ( !string.IsNullOrWhiteSpace( htmlBody ) ) { // Get the unsubscribe content and add a merge field for it string unsubscribeHtml = communication.GetChannelDataValue( "UnsubscribeHTML" ).ResolveMergeFields( mergeObjects ); if (mergeObjects.ContainsKey( "UnsubscribeOption")) { mergeObjects.Add( "UnsubscribeOption", unsubscribeHtml ); } else { mergeObjects["UnsubscribeOption"] = unsubscribeHtml; } // Resolve merge fields htmlBody = htmlBody.ResolveMergeFields( mergeObjects ); // Resolve special syntax needed if option was included in global attribute if ( Regex.IsMatch( htmlBody, @"\[\[\s*UnsubscribeOption\s*\]\]" ) ) { htmlBody = Regex.Replace( htmlBody, @"\[\[\s*UnsubscribeOption\s*\]\]", unsubscribeHtml ); } // Add the unsubscribe option at end if it wasn't included in content if ( !htmlBody.Contains( unsubscribeHtml ) ) { htmlBody += unsubscribeHtml; } // Resolve any relative paths string publicAppRoot = globalAttributes.GetValue( "PublicApplicationRoot" ).EnsureTrailingForwardslash(); htmlBody = htmlBody.Replace( @" src=""/", @" src=""" + publicAppRoot ); htmlBody = htmlBody.Replace( @" href=""/", @" href=""" + publicAppRoot ); } return htmlBody; }