Skip to main content

Parsers and state machines for the Sendmail milter communications protocol

Project description

github-ico licence-mpl20 pre-commit-ico pipeline-status coverage status

Kilter Protocol

Kilter is a framework for writing mail filters (known as "milters") compatible with Sendmail and Postfix MTAs. Unlike many previous milter implementations in Python it is not simply bindings to the libmilter library (originally from the Sendmail project). The framework aims to provide Pythonic interfaces for implementing filters, including leveraging coroutines instead of libmilter's callback-style interface.

The kilter.protocol package contains the parsers and filter state machine for the communications protocol used between the Mail Transfer Agents (MTA) and filters.

Users looking for something as simple to use as libmilter should take a look at kilter.service.

What is understood about the wire protocol is documented in Wire Protocol.

Sendmail Filters

The Sendmail filter (milter) API facilitates communication between a Mail Transfer Agent (MTA) and arbitrary filters running as external services. These filters can perform a number of operations on received and outgoing mail, such as: virus scanning; checking senders' reputations; signing outgoing mail; and verifying signatures of incoming mail.

While the protocol was originally for filtering mail through a Sendmail MTA, Postfix has also reverse engineered the protocol and supports most filters made for Sendmail.

libmilter

Historically filters used the libmilter library supplied by the Sendmail project to handle all aspects of communication with an MTA. Filters simply registered callbacks for various events then started the library's main loop. This approach makes implementing simple filters in C easy for users, but makes writing "Pythonic" filters difficult, especially when a user wishes to make use of async/await features.

Use of libmilter to implement filters is almost universal as it is a black-box; the on-the-wire protocol used is undocumented and subject to change between versions, which makes writing a third-party parser difficult.

Usage

Most users will be looking for an asynchronous API using Python coroutines: this is available with the kilter.service package. The protocol handlers provided by this package support asynchronous operation but does not handle any IO, thus have no awaitable entrypoints. Instead a service that handles socket communication with MTAs passes bytes from a socket to a protocol handler, which returns event objects. Some of these events instruct the service to pass bytes back to the socket, others are actionable in ways that are implementation specific. When an implementation wants to communicate with an MTA, it registers messages with the protocol handler, which again returns event objects.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kilter_protocol-0.6.0.tar.gz (20.4 kB view details)

Uploaded Source

Built Distribution

kilter_protocol-0.6.0-py3-none-any.whl (16.0 kB view details)

Uploaded Python 3

File details

Details for the file kilter_protocol-0.6.0.tar.gz.

File metadata

  • Download URL: kilter_protocol-0.6.0.tar.gz
  • Upload date:
  • Size: 20.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.10.14

File hashes

Hashes for kilter_protocol-0.6.0.tar.gz
Algorithm Hash digest
SHA256 8294bb17e4d0d6c73ef39021add9670c7c2d6bebf53338a2f4311f4c282ef2e8
MD5 ddfecc4a64481adef5b6374628a7f470
BLAKE2b-256 69d7862829d34424b5544ba8386ea6eca5a1e83c2f968da9311b6eb92ca132af

See more details on using hashes here.

File details

Details for the file kilter_protocol-0.6.0-py3-none-any.whl.

File metadata

File hashes

Hashes for kilter_protocol-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 74fa68670642f95a5122b60192a3f127fd29f5896c725973d737f24505fe861d
MD5 0c00d988b63050f6f118fb248f1d76c0
BLAKE2b-256 ef0e0aafaaab387e2cf6e10d0b6e6c3aee8396cec84b27e525a248ffc3f3e454

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page