Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

<img src="https://raw.githubusercontent.com/IMIO/imio.emailkit/main/docs/banner.png" alt="A transactional email rendered by imio.emailkit: the Délibérations.be masthead over a white card, an 'À relire' status pill, and a notification asking a section editor to review a page submitted for publication." width="640"

imio.emailkit

PyPI PyPI - Python Version PyPI - Wheel PyPI - License PyPI - Status

PyPI - Plone Versions

CI Docs Code Style

GitHub contributors GitHub Repo stars

Transactional email templating for the iMio Plone ecosystem. Author HTML mails with a modern toolchain — Maizzle 6 (Vue SFC + 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.

📖 Documentation

https://imio.github.io/imio.emailkit/

Everything is there: the quickstart, the architecture, the full API reference, the template-authoring rules, how to ship templates from your own add-on, and how to override what this package ships.

Some entry points worth naming:

Quickstart install, then send your first styled mail
Architecture the build-time / runtime seam, and why
Email builder recipients, attachments, per-language sending
Authoring rules eight ways a template breaks with a green build
Shipping templates get your own add-on's templates discovered
Migrating a mail you already build HTML bodies
Overrides & theming three levels, plus a full opt-out

Installation

pip install imio.emailkit

Then install the add-on in Site Setup, or apply the imio.emailkit:default GenericSetup profile — which restyles Plone's own transactional mails. Use imio.emailkit:base for the runtime only.

[!IMPORTANT] Behind a reverse proxy, declare trusted-proxy in zope.conf, or the login-help mails will name the proxy's own IP address instead of the client's. Why, and why the header is not read directly: Installation & profiles.

from imio.emailkit import Email

Email("imio.emailkit:notification").to(member).with_context(
    title=title, intro=intro, cta_url=url
).send()

Compatibility

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

[!IMPORTANT] Classic UI only, and deliberately so. These are emails: there is no Volto component and no REST endpoint to write. Rendering is isolated in imio.emailkit.render, which has no dependency on the request.

[!NOTE] Building templates needs Node.js 22+. 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.

Contribute

Prerequisites ✅

Installation 🔧

  1. Clone this repository, then change your working directory.

    git clone git@github.com:IMIO/imio.emailkit.git
    cd imio.emailkit
    
  2. Install this code base.

    make install
    

Run make help for every target. The ones you will reach for most: make test, make check (format then lint), make start, make create-site, make build-emails, make check-emails, make preview-emails.

The design record

This README and the documentation site describe what the package does. docs/DECISIONS.md describes why, and it is the authority when the two disagree: every measured finding, every reverted attempt, every "this looked like it worked".

Comments throughout the code cite a SPEC.md by section number (§4, §6.2, §7). That file is no longer in the repository; the citations are kept as stable names for the contracts they refer to, and DECISIONS.md is where the reasoning behind each one actually lives.

SKILL.md carries the authoring conventions for AI-assisted work, which is how much of the template work here is done.

The documentation site itself lives in docs/site/ — see its README for how to add a page.

License

The project is licensed under GPLv2.

Metadata

Release files for imio.emailkit 1.0.0b1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for imio.emailkit 1.0.0b1
File Size Uploaded
imio_emailkit-1.0.0b1.tar.gz 514.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for imio.emailkit 1.0.0b1
File Interpreter ABI Platform
imio_emailkit-1.0.0b1-py3-none-any.whl Python 3 none any Details

Total release size: 878.8 kB

Release files / imio_emailkit-1.0.0b1.tar.gz

Download URL imio_emailkit-1.0.0b1.tar.gz
Size 514.8 kB
Tags Source
SHA-256 checksum
How to use checksums
abb73cc4209c9e7b509ccc1993a70c6f37a1a69c754a865bbf947fe89ce6b9d2
BLAKE2b-256 checksum
How to use checksums
189d42d306177d97399637fa0d578eb7dbb33974802bfea7d9f4c46cbcc3159b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.12

Release files / imio_emailkit-1.0.0b1-py3-none-any.whl

Download URL imio_emailkit-1.0.0b1-py3-none-any.whl
Size 364.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
56afe757fa20a239ee194283e177b579bb6485eceb2a51d16dcde6d37710adef
BLAKE2b-256 checksum
How to use checksums
0338b63b3a20fa0aa6bb0a7dff9825c4262be66e8c27a1d48d778b40d184ab37
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.12
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page