imio.emailkit

Transactional email templating for the iMio Plone ecosystem. Author HTML mails with a modern toolchain — Maizzle 6, which is Vue SFC plus Tailwind CSS 4 — and render them at runtime with Chameleon, so that no Node.js ever runs in production.

Installing it restyles Plone's stock password-reset, registration and username-reminder mails immediately. That is the point: the mails a citizen actually receives from a commune are the ones nobody ever gets round to designing.

What you get

  • Better defaults out of the box: the imio.emailkit:default profile restyles Plone's password-reset, user-registration and username-reminder mails, with no extra package and no opt-in step.
  • A two-stage pipeline with a build-time seam: Maizzle compiles .vue into email-safe HTML — inlined CSS, Outlook fallbacks — and the output is committed as .pt and rendered by Chameleon at runtime. Node is a developer and CI tool only.
  • A design system shipped inside the egg, so the buildout pin that governs the runtime governs the design system too. No npm registry, no version skew.
  • render(name, context, language) returns (html, text): a pure function of template, context and registry state, so previews, tests and real sends all take the same path.
  • Locale-aware helpers bound to the render language, so no template reinvents French date formatting.
  • Accessibility and i18n baked into the kit, not left to authors: role="presentation" on layout tables, an enforced alt on images, lang on <html>, and the hidden preheader line every inbox shows next to the subject.
  • Three levels of override, from a registry record to a full markup replacement, plus a complete opt-out.

Compatibility

Plone 6.0, 6.1 and 6.2 on Python 3.10 to 3.13.

Building templates needs Node.js 22 or newer. Installing, testing and running the add-on never does — that is the whole architecture. If you only consume the mails it ships, you will never install Node.

Start here

render()

Turn a registered template plus a context into an HTML part and a plaintext part. A pure function — previews, tests and real sends all take this path.

Email builder

Recipients, attachments, per-language sending and transaction-safe delivery, in one chained expression.

The design kit

The canonical shell and the three components every iMio mail is built from, shipped inside the egg.

Shipping templates

Declare an <emailkit:templates> ZCML registration and your own add-on’s templates become discoverable, previewable and sendable.

Guides

Quickstart

Install the add-on, then send your first styled mail through the Email builder.

Read more

Architecture

The build-time / runtime seam, and why no Node.js ever runs in production.

Read more

Authoring rules

Eight ways a template breaks while the build still reports success.

Read more

Migrating a mail

Get the styled shell around a body you already build, without re-authoring it.

Read more