Parsers and state machines for the Sendmail milter communications protocol
Project description
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8294bb17e4d0d6c73ef39021add9670c7c2d6bebf53338a2f4311f4c282ef2e8 |
|
MD5 | ddfecc4a64481adef5b6374628a7f470 |
|
BLAKE2b-256 | 69d7862829d34424b5544ba8386ea6eca5a1e83c2f968da9311b6eb92ca132af |
File details
Details for the file kilter_protocol-0.6.0-py3-none-any.whl
.
File metadata
- Download URL: kilter_protocol-0.6.0-py3-none-any.whl
- Upload date:
- Size: 16.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.10.14
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 74fa68670642f95a5122b60192a3f127fd29f5896c725973d737f24505fe861d |
|
MD5 | 0c00d988b63050f6f118fb248f1d76c0 |
|
BLAKE2b-256 | ef0e0aafaaab387e2cf6e10d0b6e6c3aee8396cec84b27e525a248ffc3f3e454 |