FIX: Email Styles were evaluated out of order

FIX: Email Styles were evaluated out of order

yield puts the content in the template right away unless explicitly capture'd.

diff --git a/app/helpers/email_helper.rb b/app/helpers/email_helper.rb
index 14364d4..a137332 100644
--- a/app/helpers/email_helper.rb
+++ b/app/helpers/email_helper.rb
@@ -26,7 +26,7 @@ module EmailHelper
   end
 
   def email_html_template
-    EmailStyle.new.html.sub('%{email_content}', yield).html_safe
+    EmailStyle.new.html.sub('%{email_content}', capture { yield }).html_safe
   end
 
   protected
diff --git a/spec/integration/email_style_spec.rb b/spec/integration/email_style_spec.rb
index 395dd19..42203ec 100644
--- a/spec/integration/email_style_spec.rb
+++ b/spec/integration/email_style_spec.rb
@@ -6,9 +6,10 @@ describe EmailStyle do
 
   context "ERB evaluation" do
     it "does not evaluate ERB outside of the email itself" do
-      SiteSetting.email_custom_template = "<div>%{email_content}</div><%= (111 * 333) %>"
+      SiteSetting.email_custom_template = "<hello>%{email_content}</hello><%= (111 * 333) %>"
       html = Email::Renderer.new(UserNotifications.signup(Fabricate(:user))).html
       expect(html).not_to match("36963")
+      expect(html.starts_with?('<hello>')).to eq(true)
     end
   end
 

GitHub sha: fd2d7ca9

1 Like