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) returning (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 one entry point 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