piler-smtp changelog#
All notable changes to piler-smtp, the SMTP receiver of Piler Enterprise Edition, starting from 1.1.2. piler-smtp is versioned and released independently of the main application, see the Piler Enterprise changelog.
Packages (deb, rpm) and Docker images (sutoj/piler-smtp) are on the
releases page.
1.1.9 - 2026-11-07#
Security#
- A client that stops in the middle of the TLS handshake no longer blocks
the other connections.
smtp_greet_timeoutlimits how long the handshake may take. - Data sent in plain text after
STARTTLSis discarded, and nothing of the transaction beforeSTARTTLScarries over into the encrypted session, so an attacker on the network path can't add recipients to an email sent over TLS (CVE-2011-0411). - A failed TLS handshake of one client no longer disconnects other TLS sessions.
- In multi-tenant mode, the recipients of an abandoned transaction no longer get the email of the next transaction on the same connection.
- The data of a rejected message is never processed as SMTP commands.
- Large BDAT chunks announced by slow clients can no longer use up
max_smtp_memoryand lock out the other clients.
Fixed#
- An email that can't be handed over to the archive gets a temporary error (451), so the sending server retries it. It used to be accepted and lost.
- Every email is written to the disk before it's accepted, so a power loss right after the acceptance no longer loses it.
- A message sent in several BDAT chunks (with
enable_chunking=1) is archived in full; only its first chunk was stored. - A message rejected as too big with BDAT gets its error reply instead of a connection reset, so the sending server bounces it instead of retrying.
- Settings written as
key = value(with spaces) inpiler.confare applied; they were ignored, e.g.smtp_access_list = 1left the access list off. - An invalid setting (e.g. a value that's not a number, or an unknown
tls_min_version) is reported, and piler-smtp doesn't start. On a reload (SIGHUP) the previous config stays. - With
tls_enable=0no TLS certificate is needed. - A reload (SIGHUP) with a config that can't be read keeps the previous config instead of falling back to the defaults.
- After a crash piler-smtp exits, so systemd or Docker restarts it. It used to hang at 100% CPU.
1.1.8 - 2026-11-04#
Fixed#
- With
smtp_access_list=1, a missing or unreadablesmtp.acl, or one without a valid rule, is logged as an error saying that piler-smtp refuses every SMTP connection. The startup message said it accepts SMTP connections from everywhere, although every connection was refused.
1.1.7 - 2026-10-18#
Security#
- Improved verification of the licensed hostname.
Fixed#
- In multi-tenant mode, a recipient piler-smtp rejects gets a permanent error (550) instead of a temporary one, so the sending server doesn't keep retrying it.
1.1.6 - 2026-10-17#
Fixed#
- An archive address encoded again by the mail server is no longer recorded as an envelope recipient. This happens when the mail server's archiving rules also run for the archive copies they added (seen with Axigen Acceptance & Routing rules). The address is logged, and the email is still archived with its other recipients.
1.1.5 - 2026-10-13#
Fixed#
- The ownership of
/var/pilerset by the deb package's post-install script.
1.1.4 - 2026-10-07#
Added#
- Envelope files (
enable_envelope_sidecar, off by default): the envelope of each email is written to a.envfile next to it, with the envelope sender and the envelope recipients encoded in the archive address (<tenant>+<local part>=<domain>@<archive host>), so that Bcc recipients can be archived. See Envelope recipients. Needs Piler Enterprise 2.2.4 or later.
Security#
- Hardened the SMTP input handling: limits on lines without a line ending,
correct handling of BDAT chunks (with
enable_chunking=1), bare LF line endings and NUL bytes in the message.
1.1.3 - 2026-09-01#
Added#
- Packages for Ubuntu 26.04.
Fixed#
- A deadline for every connection that sending a byte now and then can't extend, and a limit on the connections from one IP address, so one client can no longer keep others from connecting.
- With
smtp_access_list=1, an empty or unreadable access list now rejects every client instead of allowing all of them. - Package dependencies.
1.1.2 - 2026-01-12#
Fixed#
- Session handling.
- arm64 deb package build.