Skip to main content

pymissive

Lightweight, framework-agnostic Python library for multi-channel message sending: email, SMS, WhatsApp, registered electronic mail (registered letter) and team messaging.

Overview

pymissive exposes one provider interface per channel, so the calling code stays the same whichever service actually delivers the message. It is the base of django-pymissive and can be used on its own in any Python project.

The PyPI name is pymissive; the directory holding it in this monorepo is python-pymissive/.

Main features

  • 🔌 8 providers, all sharing the same service names
  • 📧 Email: Brevo, Scaleway
  • 📱 SMS: Brevo, SMSPartner
  • 💬 WhatsApp: Brevo
  • 📮 Postal letters: Maileva (simple letter and electronic registered letter)
  • 👥 Team messaging: Slack, Microsoft Teams, Discord
  • ✋ Hand delivery: tracks an in-person hand-over, no external API
  • 🏗️ Modular architecture based on ProviderKit
  • ✅ Framework-agnostic: usable with or without a framework
  • 🎯 Type hints throughout

Installation

pip install pymissive

requests is a base dependency, so Maileva and SMSPartner work as installed. Providers needing another SDK have their own extra. Those imports are lazy, so a missing extra only disables that one provider:

pip install pymissive[brevo]     # brevo-python
pip install pymissive[scaleway]  # boto3
pip install pymissive[discord]   # discord.py

Quick usage

from pymissive.providers.slack import SlackProvider

provider = SlackProvider(config={
    "SLACK_BOT_TOKEN": "xoxb-your-token",
    "SLACK_CHANNEL_ID": "C0123456789",
})

result = provider.send_branded(
    subject="Deployment finished",
    body_text="Version 1.3.15 is live.",
)

Each key in config_keys is read from config first, then from the environment, so exporting SLACK_BOT_TOKEN instead works the same way.

Available providers

Services are named <verb>_<missive_type> — send_email, retrieve_registered_letter, handle_webhook_sms, and so on. branded is the missive type used by the team messaging platforms, where the sender identity is the bot rather than an address.

Provider Class Missive types Extra
Brevo BrevoAPIProvider email, sms, whatsapp, branded [brevo]
Scaleway ScalewayProvider email, branded [scaleway]
Maileva MailevaProvider letter, registered_letter, branded —
SMSPartner PartnerProvider sms, branded —
Slack SlackProvider branded —
Microsoft Teams TeamsProvider branded —
Discord DiscordProvider branded [discord]
Hand delivery HandDeliveryProvider hand_delivery, branded —

providers/todo/ holds one-class placeholders (SendGrid, Mailgun, Twilio, Telegram, FCM, APN, SMTP, …). They are a backlog, not an API: they are not importable and nothing is wired to them.

Architecture

Providers are plain classes discovered by ProviderKit:

from pathlib import Path

import pymissive.providers as providers_package
from providerkit import autodiscover_providers

classes = autodiscover_providers(
    Path(list(providers_package.__path__)[0]),
    base_module="pymissive.providers",
    exclude_files=["base"],
)
# {'brevo': BrevoAPIProvider, 'maileva': MailevaProvider, ...}

Beware of ProviderBase.services: it lists the whole catalogue of service names, not the subset a given provider implements. To know whether a provider really supports something, look for the method itself:

provider = classes["brevo"]()
can_send_sms = hasattr(provider, "send_sms")

Documentation

For more details, see the documentation in the docs/ folder:

  • docs/purpose.md - Project goals and architecture
  • docs/structure.md - Module structure and organization
  • docs/development.md - Development guidelines
  • docs/AI.md - Contract for AI assistants

Development

pip install -e .

# Lint (same command as CI, from the repository root)
ruff check src

This package has no test suite of its own yet: CI only checks that it imports. The behaviour of the providers is covered by the suite in django-pymissive/.

License

This project is licensed under the MIT License. See the LICENSE file for details.

Metadata

Release files for pymissive 1.4.3

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

Source distribution (sdist)

Source distribution for pymissive 1.4.3
File Size Uploaded Provenance
pymissive-1.4.3.tar.gz 70.5 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for pymissive 1.4.3
File Interpreter ABI Platform
pymissive-1.4.3-py3-none-any.whl Python 3 none any Details

Total release size: 149.8 kB

Release files / pymissive-1.4.3.tar.gz

Download URL pymissive-1.4.3.tar.gz
Size 70.5 kB
Tags Source
SHA-256 checksum
How to use checksums
f00f2f96edff1147eeb58be2f1773a5e363719ce1872f561f6347b4613e89331
BLAKE2b-256 checksum
How to use checksums
4c6e95df886e378f66eb2189963612e22418114e0f40d2bd0a9ce0a1f2c8dff4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 6, 2026.

Transparency log

Release files / pymissive-1.4.3-py3-none-any.whl

Download URL pymissive-1.4.3-py3-none-any.whl
Size 79.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
adf1da166a9a2597184fe0e065481171032f81fedf9b298eda36bcbd23e2476a
BLAKE2b-256 checksum
How to use checksums
7ad9cf1d50fbaead0d92ecef5c0fde183d15abac154c9bdd798d16e36a5b7502
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 6, 2026.

Transparency log

Security for pymissive 1.4.3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for pymissive-1.4.3.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 6, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

1.4.3 This release

2 release files Full provenance

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