2023-07-02: Mailmunge 3.12 is available at the download page. Changelog:

  • Mailmunge 3.12 RELEASED
  • Mailmunge::Context: Add canonical_first_recipient() function.
  • mailmunge-multiplexor: Drain stderr when a worker goes from busy to idle, before clearing out qid.
  • mailmunge-multiplexor: Eliminate compiler warnings issued by GCC 12.2.0
  • Docker: Add support for running regression tests in Debian 12 (Bookworm) Docker containers
  • Mailmunge::Filter: Make canonical_email(undef) return undef.

2023-02-17: Mailmunge 3.11 is available at the download page. Changelog:

  • Mailmunge 3.11 RELEASED
  • Mailmunge::Filter: the push_tag and pop_tag methods alter the process title to something useful that we can see with "ps". (This is in addition to reporting the tags back to mailmunge-multiplexor.)
  • mm-mx-ctrl: Eliminate compiler warning.
  • configure.ac: Enable link-time optimization if possible.
  • Mailmunge::Test::SMTPForward: Add log_smtp callback.
  • Many places: Add SPDX-License-Identifier tags to source files.
  • Documentation: Many improvements, typo-fixes and clarifications.
  • Documentation: Add "THINGS YOU SHOULD NEVER DO IN YOUR FILTER CODE" section to Mailmunge::Filter and Mailmunge::Filter::Compat.
  • mm-mx-ctrl: Make "mm-mx-ctrl reload" a synonym for "mm-mx-ctrl reread"
  • mailmunge-multiplexor: Clear out qid when a worker exits the busy state. Not doing so could cause confusing logs with old queue-IDs.
  • mailmunge-multiplexor: Log reload/reread requests.
  • Perl code: Eliminate Perl::Critic complaints (on "gentle" setting.)
  • Debian packaging: Set DH_COMPAT to 10 instead of 9.
  • Regression tests: Add Docker tests for Sendmail and Postfix on Ubuntu 22.04.

2022-10-21: Mailmunge 3.10 is available at the download page. Changelog:

  • Mailmunge 3.10 RELEASED
  • Minor documentation improvements
  • rm_r.c: Remove dead code
  • mailmunge: Print embedded Perl version if invoked with prcap
  • mailmunge.spec: Point source URL to mailmunge.org instead of github.com
  • mailmunge, mailmunge-multiplexor, mm-mx-ctrl: Wrap the read() system call so we automatically restart in the face of EINTR. Older versions of mailmunge may not have properly drained stderr when a worker process exits.

2022-07-04: Mailmunge 3.09 is available at the download page. Changelog:

  • Mailmunge 3.09 RELEASED
  • New feature: Add Mailmunge::Action::DKIMSigner for DKIM-signing messages.
  • mailmunge: In addition to the HEADERS file that contains unwrapped headers, create a PRISTINE_HEADERS file with the original unmodified headers. This is required for reliable DKIM signing if we modify the message body.
  • Minor documentation fixes

2022-06-15: Mailmunge 3.08 is available at the download page. Changelog:

  • Mailmunge 3.08 RELEASED
  • spec/mailmunge.spec.in: Add a spec file that lets you build Mailmunge RPMs. rpm -tb mailmunge-$VERSION.tar.gz should work
  • .github/workflows/gitub-action.yml: Run unit and regression tests when pushing to GitHub
  • c/Makefile.in: Remove obsolete "chown" command in install target
  • c/config.h.in: Add test for setproctitle_init to make Mailmunge compile properly on FreeBSD
  • mailmunge-multiplexor: Log MTA type in the "multiplexor alive" log line rather than a separate log line
  • mailmunge: Add option to debug Milter memory allocation/deallocation
  • Many places: Fix typos in comments
  • Mailmunge::Filter: Move many action_* methods into Mailmunge::Context instead. However, the Mailmunge::Filter versions will be maintained indefinitely for backward-compatibility; they just call into the context object. Functions affected are:
    action_from_response, action_bounce, action_discard, action_tempfail, action_change_header, action_delete_header, action_delete_all_headers, change_sender, add_recipient, delete_recipient, action_add_header, action_insert_header, action_sm_quarantine, and action_quarantine_entire_message
    For any METHOD in the above list, you can replace:
    $self->METHOD($ctx, @args);
  • Mailmunge::Filter: The filter_message and filter_wrapup functions can return a Mailmunge::Response object, which (if it's TEMPFAIL, REJECT or DISCARD) will be respected
  • Mailmunge::Filter::Compat: The filter_begin, filter, and filter_multipart functions can return a Mailmunge::Response object, which (if it's TEMPFAIL, REJECT or DISCARD) will be respected
  • Mailmunge::Response: The is_discard accessor has been added
  • Mailmunge::Context: Added canonical_sender and canonical_recipients methods
  • Documentation: Remove obsolete references to "server mode"
  • Documentation: Document pitfalls of the "-y" mailmunge option and turn it off by default in the systemd unit and sysvinit startup script

2022-02-13: Mailmunge 3.07 is available at the download page. Changelog:

  • Mailmunge 3.07 RELEASED
  • Mailmunge::Filter: Add input_fh convenience method
  • Mailmunge::Test::Rspamd: Log exact reason ($@) if calling rspamd fails.
  • Regression tests: Add support for Debian bullseye docker images
  • Test::Mailmunge::Utils: Fix POD for parse_and_copy_msg
  • configure: Add dependency on FindBin as per bug report from Robert Scheck.
  • configure: Add --disable-perl-build-artifacts option to avoid generation of perllocal.pod and .packlist files. Problem pointed out by Robert Scheck.
  • Unit test: Skip tests that require working DNS if they are run on a machine without DNS. Problem pointed out by Robert Scheck.

2022-01-03: Mailmunge 3.06 is available at the download page. Changelog:

  • Mailmunge 3.06 RELEASED
  • documentation: Clarify that the -p argument to mailmunge(8) wants a socket specification following the libmilter spec and not the Mailmunge spec.
    In particular, if you want to bind the -p TCP socket to localhost only, you must use the form: -p inet:port@ The form -p inet:port listens on all interfaces!
  • documentation: Fix typos
  • Mailmunge::Filter: Stricter checking of command-line arguments
  • Mailmunge::Filter: Consistent capitalization of error messages
  • Mailmunge::Filter: Add decode_mime_string utility function. This tries very hard to sensibly decode a MIME-header-encoded string to a native Perl string.

2021-09-30: Mailmunge 3.05 is available at the download page. Changelog:

  • Mailmunge 3.05 RELEASED
  • documentation: Fix many typos and add some clarifications.
  • tests: Change syslog identifier so that tests use a different syslog identifier than production Mailmunge filters.
  • compilation: Use -Wno-unused-result flag if the compiler supports it.
  • Mailmunge::Action::Boilerplate: Log error messages if adding boilerplate fails.
  • mailmunge: Rather than determining the host's IP address by resolving its hostname, create a connected UDP socket to and use getsockname() to get the local IP address chosen by the kernel.
  • mailmunge-multiplexor: Fix potential code path that could call non-signal-safe snprintf function from a signal handler.
  • tests: Remove unused file
  • mailmunge: Remove support for systems that lack inet_ntop. inet_ntop was standardized over 15 years ago, so any systems that lack it are not worth supporting.
  • mailmunge-multiplexor.c: Log the "MTA appears to be: XXX" message from the C code instead of the Perl code. This causes it to be logged only once per multiplexor startup instead of once per scanning worker startup.

2021-08-17: Mailmunge 3.04 is available at the download page. Changelog:

  • Mailmunge 3.04 RELEASED
  • Mailmunge::Filter: Read the COMMANDS file prior to filter_sender and filter_recipient callbacks. This populates sendmail_macros.
  • mailmunge-multiplexor: Fix error in embedded Perl code. PERL_SYS_TERM was being called each time an embedded interpreter was destroyed; this is incorrect. While this code happened to work on older Perls, it will fail on newer Perls such as that shipped with Debian Bullseye.
  • mailmunge: Provide more helpful error messages if filter file is not readable or has a syntax error or fails for some reason.
  • mailmunge-multiplexor: Set default for "-w" option to 1 second instead of 3.
  • configure: add --with-perlinstalldirs={site,perl,vendor} flag
  • gen_id.c: Generate 8-character IDs instead of 7-character ones. This allows for up to 216,000 IDs per second.
  • Mailmunge::Filter: diagnose incorrect return values from various filter callbacks and log helpful error messages.
  • Makefile: Don't install the *.in files when running "make install"
  • Many typo fixes and documentation improvements.

2021-08-01: Mailmunge 3.03 is available at the download page. Changelog:

  • Add Mailmunge::Filter::action_from_response helper function. If appropriate, it calls an action_* function based on a Mailmunge::Response object. See docs for details.
  • Add support for running regression tests against Rocky Linux 8 as well as Debian 10. Both Sendmail and Postfix are tested.
  • Add support for Rspamd. We do not use the rspamc client; instead, we talk directly to the daemon using its native HTTP protocol.
  • Update included copy of GPLv2 to the latest version
  • Put GPLv2 license markers in all files
  • Use -fPIE rather than -fPIC when building executables
  • Get rid of --enable-cleanup-with-rm
  • Clean out a LOT of cruft from configure.ac
  • Include a sample /etc/default/mailmunge file
  • Better diagnosis of syntax errors in filter file; terminate multiplexor if it looks like the filter is completely broken.
  • Many minor fixes and documentation fixes.

2021-07-08: Mailmunge 3.02 is available at the download page. Changelog:

  • Mailmunge 3.02 RELEASED
  • Adds Mailmunge::Test::Greylist - an implementation of greylisting

2021-06-14: The Introduction to Mailmunge  video is released.

2021-06-01: Mailmunge 3.01 is available at the download page. Changelog:

  • Mailmunge 3.01 RELEASED
  • Many fixes to documentation
  • Added continuous integration using Github Actions
  • BUGFIX: Mailmunge::Test::GetMX: Fix incorrect test for class E networks
  • Use getaddrinfo to resolve IP->hostnames so it works with both IPv4 and IPv6
  • Add Mailmunge::Filter->ip_to_hostname() function
  • Check both and ::1 when checking for loopback address
  • Proper generation of man pages from POD (include man page name; put pages in proper section.)

2021-05-31: The first release of Mailmunge (3.00) is available at the download page.

2021-05-28: Initial announcement and release of Mailmunge. Please see the FAQ for information about the release and then head over to documentation for in-depth documentation.

Copyright © 2023 Skoll Software Consulting