- Shipped
- September 12, 2026 at 12:09 AM UTC
- Author
- Kamo
- Commit
- 6ccc636
Preview: a dialog that renders the editor's own buildBodyHtml() output - the string Save stores and the dispatcher sends - so the audience's header, signature and footer and the compliance footer are all there and it cannot drift from the real email. Desktop and mobile views, "preview as" any recipient or a sample, merge tokens filled the way EmailService fills them, an inbox-style envelope, and a sandboxed frame. Reachable from the compose step, the footer bar, and a sent campaign's progress view. Audience: "Custom / No Template" wraps nothing around the body. It is saved as COMPANY scope with signatureScope NONE (which the server stores and never reads), and the campaigns grid labels it as Custom. From: its own From name and address fields, defaulted from the bulk email provider and editable per campaign, with a reset to the default and a warning when the address is off the provider's domain. This replaces the sender derived from the audience and the no-reply radio. Recipients: addresses the campaign has already emailed are marked "Already sent", with a notice that they will never be emailed by it again; EmailService now reports this per recipient.