From fcb4e0541a42d17adb947d73ffc4b7bc12219fc7 Mon Sep 17 00:00:00 2001 From: Morgan Roderick Date: Mon, 31 Aug 2026 10:25:58 +0200 Subject: [PATCH 1/2] fix: persist delivered email body in MemberEmailDelivery premailer-rails converts messages to multipart/alternative during delivery, emptying the body container. The EmailDelivery concern read `mail.body.to_s` in an after_deliver callback, so every logged row had an empty body (439 of 439 rows in production). Read the html part instead so the audit log captures the delivered content. --- app/mailers/concerns/email_delivery.rb | 4 +++- spec/mailers/member_mailer_spec.rb | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/app/mailers/concerns/email_delivery.rb b/app/mailers/concerns/email_delivery.rb index c9c79ecd9..49e983a3a 100644 --- a/app/mailers/concerns/email_delivery.rb +++ b/app/mailers/concerns/email_delivery.rb @@ -11,7 +11,9 @@ def log_sent_email MemberEmailDelivery.create!( member: member, subject: mail.subject, - body: mail.body.to_s, + # premailer-rails' interceptor empties the body container and moves the + # content into text/html parts during delivery, so read the html part + body: mail.html_part ? mail.html_part.body.to_s : mail.body.to_s, to: Array(mail.to), cc: Array(mail.cc), bcc: Array(mail.bcc) diff --git a/spec/mailers/member_mailer_spec.rb b/spec/mailers/member_mailer_spec.rb index f4ace5b85..fe71c319e 100644 --- a/spec/mailers/member_mailer_spec.rb +++ b/spec/mailers/member_mailer_spec.rb @@ -182,6 +182,10 @@ expect(log.member).to eq(member) expect(log.subject).to eq('It’s been a while, how are you doing? ♥️') expect(log.to).to eq([member.email]) + # premailer-rails converts the message to multipart/alternative during + # delivery, so the logged body must come from the html part + expect(log.body).to be_present + expect(log.body).to include('codebar workshop') end end end From 91ea47fc9351447b2efb2b87930957d36a423b9e Mon Sep 17 00:00:00 2001 From: Morgan Roderick <20321+mroderick@users.noreply.github.com> Date: Mon, 31 Aug 2026 10:46:44 +0200 Subject: [PATCH 2/2] Update app/mailers/concerns/email_delivery.rb Co-authored-by: Olle Jonsson --- app/mailers/concerns/email_delivery.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/mailers/concerns/email_delivery.rb b/app/mailers/concerns/email_delivery.rb index 49e983a3a..01aa97035 100644 --- a/app/mailers/concerns/email_delivery.rb +++ b/app/mailers/concerns/email_delivery.rb @@ -11,8 +11,6 @@ def log_sent_email MemberEmailDelivery.create!( member: member, subject: mail.subject, - # premailer-rails' interceptor empties the body container and moves the - # content into text/html parts during delivery, so read the html part body: mail.html_part ? mail.html_part.body.to_s : mail.body.to_s, to: Array(mail.to), cc: Array(mail.cc),