Registered 2018-02-12 by Scott Kitterman

Small, but robust DKIM signing and verification milter implemented in Python using dkimpy and pymilter.

This is a DKIM signing and verification milter. In theory it has been tested
with both Postfix and Sendmail.

The configuration file is designed to be compatible with OpenDKIM, but only
a subset of OpenDKIM options are supported. If an unsupported option is
specified, an error will be raised.

This package includes a default configuration file and man pages. For those
to be installed when installing using, the following incantation is
required because setuptools developers decided not being able to do this by
default is a feature:

python install --single-version-externally-managed --record=/dev/null

For users of Debian Stable (Debian 9, Codename Squueze), all dependencies are
available in either the main or backports repositories:

[sudo] apt install python-milter python-nacl python-ipaddress python-dnspython
[sudo] apt install -t stretch-backports python-authres python-dkim

The preferred method of installation is from PyPi using pip (if distribution
packages are not available):

[sudo] pip install dkimpy_milter

Using pip will cause required packages to be installed via easy_install if they
have not been previously installed. Because pymilter and PyNaCl are compiled
Python extensions, the system will need appropriate development packages and
an C compiler. Alternately, install these dependencies from dsitribution/OS
packages and then pip install dkimpy_milter.

The milter will work with either pydns (DNS) or dnspython (dns), preferring
dnspython is both are available. The dkimpy DKIM module also works with

Both a systemd unit file and a sysv init file are provided. Both make
assumptions about defaults being used, e.g. if a non-standard pidfile name is
used, they will need to be updated. The sysv init file is Debian specific and
untested, since the developers are not using sysv init. Feedback/patches

The dkimpy-milter drops priviledges after setup to the user/group specified in
UserID. During initial setup, this system user needs to be manually created.
As an example, using the default dkimpy-user on Debian, the command would be:

[sudo] adduser --system --no-create-home --quiet --disabled-password \
               --disabled-login --shell /bin/false --group \
               --home /var/run/dkimpy-milter dkimpy-milter

Since /var/run or /run is sometimes on a tempfs, if the PID file directory is
missing, the milter will create it on startup.

As with all milters, dkimpy-milter needs to be integrated with your MTA of
choice (Sendmail or Postfix).

The python DKIM library, dkimpy, requires the entire message being signed or
verified to be in memory, so dkimpy-milter does not write messages out to a
temp file. This may impact performance on low-memory systems.

This is an initial production release to support interoperability testing with
Ed25519 signatures sufficient functionality for basic use. The documented
functionality has been implemented and at generally partially tested. It is
free of known defects, but is not fully tested in a variety of environments.

DKIM Ed25519 signatures are still in development, but the specification is
technically stable. Version 1.0.0 supports draft-ietf-dcrup-dkim-crypto-09.

See the package README for additional details.

Project information

Scott Kitterman
Scott Kitterman

RDF metadata

View full history Series and milestones

0.9 series is the current focus of development.

All code Code

Version control system:
Programming languages:

All questions Latest questions

All bugs Latest bugs reported

More contributors Top contributors

Get Involved


Latest version is 1.0.0
released on 2018-05-11

All downloads