CINXE.COM
Postfix feature overview
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>Postfix feature overview </title> <meta http-equiv="Content-Type" content="text/html; charset=us-ascii"> <link rel='stylesheet' type='text/css' href='postfix.css'> </head> <div id='left'> <p> <img src="mysza.gif" width="130" height="91" alt="[LOGO]"> </p> <p class='navhead'>QUICK LINKS</p> <p class='nav'><a href="start.html">Home</a> </p> <p class='nav'><a href="announcements.html">Announcements</a> </p> <!-- <p class='nav'><a href="non-english.html">Non-English Info</a> </p> --> <p class='nav'><a href="features.html">Feature overview </a> </p> <p class='nav'><a href="web-sites.html">Web sites (text)</a> </p> <p class='nav'><a href="download.html">Download (source)</a> </p> <p class='nav'><a href="lists.html">Mailing lists</a> </p> <p class='nav'><a href="press.html">Press and Interviews</a> </p> <p class='nav'><a href="documentation.html">Documentation</a> </p> <!-- <p class='nav'><a href="docs.html">Howtos and FAQs</a> </p> --> <p class='nav'><a href="addon.html">Add-on Software</a> </p> <p class='nav'><a href="packages.html">Packages and Ports</a> </p> <p class='nav'><a href="mirror.html">Becoming a mirror site</a> </p> <p class='navhead'></p> <form method="get" action="https://www.google.com/search"> <p class='nav'> <input size="-1" type="submit" value="Search"><br> <input type="text" name="q" size="16" maxlength="255" value=""> <input type="hidden" name="sitesearch" value="www.postfix.org"> </p> </form> </div> <div id='main'> <h1> Postfix feature overview </h1> <h2> Supported environments </h2> <p> Postfix runs (or has run) on AIX, BSD, HP-UX, IRIX, LINUX, MacOS X, Solaris, Tru64 UNIX, and other UNIX systems. It requires ANSI C, a POSIX.1 library, and BSD sockets. In addition, Postfix requires that the file system satisfies a number of <a href="#fs-requirements"> requirements</a> that are described at the end of this page. </p> <h2> Main features </h2> <p> The following is a list of major Postfix features. Some features require third-party libraries (examples: LDAP, SQL, TLS). Other features are available only when the necessary operating system support exists and Postfix knows how to use it (examples: IP version 6, connection caching). </p> <h3> Recent additions </h3> <table> <tr> <td valign="top" nowrap="nowrap"> Postfix 3.10 </td> <td> SMTP client support for the <a href="TLSRPT_README.html">TLSRPT protocol</a> (<a href="https://datatracker.ietf.org/doc/html/rfc8460">RFC 8460</a>). </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 3.9 </td> <td> <a href="MONGODB_README.html">MongDB database client</a>. </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 3.8 </td> <td> SMTP client support for <a href="http://tools.ietf.org/html/rfc2782">RFC 2782</a> service discovery with SRV record lookup. </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 3.7 </td> <td> Updated defense against remote clients or servers that 'trickle' SMTP or LMTP traffic, replacing the old per-record deadlines with per-request deadlines and minimum data rates. </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 3.5 </td> <td> <a href="http://haproxy.1wt.eu/"> HAProxy v2 </a> support in <a href="postconf.5.html#postscreen_upstream_proxy_protocol"> postscreen </a> and <a href="postconf.5.html#smtpd_upstream_proxy_protocol"> smtpd </a> </td> </tr> </table> <h3> Container support</h3> <table> <tr> <td valign="top" nowrap="nowrap"> Postfix 3.4 </td> <td> <a href="MAILLOG_README.html"> Logging to stdout from Postfix daemon and non-daemon programs</a>. </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 3.3 </td> <td> Support to run as PID=1 in a Linux container. </td> </tr> </table> <h3> Protocol support </h3> <table> <tr> <td valign="top" nowrap="nowrap"> Postfix 3.10 </td> <td> SMTP client support for the <a href="TLSRPT_README.html">TLSRPT protocol</a> (<a href="https://datatracker.ietf.org/doc/html/rfc8460">RFC 8460</a>). </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 3.8 </td> <td> SMTP client support for <a href="http://tools.ietf.org/html/rfc2782">RFC 2782</a> service discovery with SRV record lookup. </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 3.7 </td> <td> Updated defense against remote clients or servers that 'trickle' SMTP or LMTP traffic, replacing the old per-record deadlines with per-request deadlines and minimum data rates. </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 3.5 </td> <td> <a href="http://haproxy.1wt.eu/"> HAProxy v2 </a> support in <a href="postconf.5.html#postscreen_upstream_proxy_protocol"> postscreen </a> and <a href="postconf.5.html#smtpd_upstream_proxy_protocol"> smtpd </a> </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 3.4 </td> <td> SNI (server name indication) support for both SMTP client and server roles. </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 3.4 </td> <td> SMTP server support for <a href="http://tools.ietf.org/html/rfc3030">RFC 3030</a> <a href="BDAT_README.html"> CHUNKING (without BINARYMIME)</a>. </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 3.4 </td> <td> <a href="TLS_README.html#client_tls_reuse">Multiple SMTP deliveries over the same TLS-encrypted connection</a>. This reuses the existing <a href="tlsproxy.8.html">tlsproxy</a>(8) and <a href="scache.8.html">scache</a>(8) services. </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 3.0 </td> <td> <a href="SMTPUTF8_README.html">Email Address Internationalization</a> as described in RFC 6531 (SMTPUTF8 Extension), RFC 6532 (Email headers), and RFC 6533 (Delivery status notifications). </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 3.0 </td> <td> Configurable <a href="postconf.5.html#smtp_dns_reply_filter">DNS reply filter</a> for the Postfix SMTP client and server. </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 3.0 </td> <td> Configurable <a href="postconf.5.html#default_delivery_status_filter"> delivery status filter</a> for the Postfix SMTP client and other delivery agents. </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 3.0 </td> <td> RFC 7505 ("Null MX" No Service Resource Record), Earlier Postfix versions will bounce mail because of a "Malformed DNS server reply". </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 2.11 </td> <td> RFC 7672 (SMTP security via opportunistic DANE TLS) PKI-less TLS server certificate verification based on DANE (DNS-Based Authentication of Named Entities). </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 2.10 </td> <td> <a href="http://haproxy.1wt.eu/"> HAproxy </a> support in <a href="postconf.5.html#postscreen_upstream_proxy_protocol"> postscreen </a> and <a href="postconf.5.html#smtpd_upstream_proxy_protocol"> smtpd </a> </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 2.9 </td> <td> Defense against remote clients or servers that 'trickle' SMTP or LMTP traffic, replacing timeouts per I/O system call with per-record deadlines. </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 2.9 </td> <td> <a href="http://www.nginx.org/"> Nginx proxy </a> support in <a href="XCLIENT_README.html"> smtpd </a> including SASL credential passing </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 2.3 </td> <td> <a href="MILTER_README.html"> DKIM, DomainKeys and SenderID authentication (via Milter plug-in) </a> </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 2.3 </td> <td> <a href="DSN_README.html"> DSN status notifications </a> </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 2.3 </td> <td> Enhanced status codes </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 2.3 </td> <td> <a href="SASL_README.html"> Plug-in support for multiple SASL implementations (Cyrus, Dovecot) </a> </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 2.2 </td> <td> <a href="CONNECTION_CACHE_README.html"> Connection cache for SMTP </a> </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 2.2 </td> <td> <a href="IPV6_README.html"> IP version 6 </a> </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 2.2 </td> <td> <a href="TLS_README.html"> TLS encryption and authentication </a> </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 2.0 </td> <td> MIME (including 8BITMIME to 7BIT conversion) </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 1.0 </td> <td> <a href="ETRN_README.html"> ETRN on-demand relay </a> </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 1.0 </td> <td> <a href="lmtp.8.html">LMTP client</a> </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 1.0 </td> <td> Pipelining (SMTP client and server)</td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 1.0 </td> <td> <a href="SASL_README.html"> SASL authentication </a> </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 1.1 </td> <td> <a href="qmqpd.8.html">QMQP server</a> </td> </tr> </table> <h3> Junk mail control</h3> <table> <tr> <td valign="top" nowrap="nowrap"> Postfix 3.1 </td> <td> <a href="POSTSCREEN_README.html">Postscreen</a> DNSBL/WL cache TTL support for non-existent records.</td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 2.8 </td> <td> <a href="POSTSCREEN_README.html"> Postscreen zombie blocker. </a> </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 2.8 </td> <td> DNS whitelist support in <a href="postconf.5.html#permit_dnswl_client">smtpd</a> and in <a href="postconf.5.html#postscreen_dnsbl_sites">postscreen</a>. </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 2.5 </td> <td> <a href="STRESS_README.html"> Stress-dependent configuration </a> </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 2.3 </td> <td> <a href="MILTER_README.html"> Sendmail Milter (mail filter) protocol </a> </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 2.2 </td> <td> <a href="TUNING_README.html#conn_limit">SMTP server per-client rate and concurrency limits </a> </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 2.1 </td> <td> <a href="SMTPD_ACCESS_README.html"> Access control per client/sender/recipient/etc. </a> </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 2.1 </td> <td> <a href="ADDRESS_VERIFICATION_README.html"> Address probing callout </a> </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 2.1 </td> <td> <a href="SMTPD_POLICY_README.html">Greylisting plug-in </a> </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 2.1 </td> <td> <a href="SMTPD_POLICY_README.html"> SPF plug-in </a> </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 1.1 </td> <td> <a href="CONTENT_INSPECTION_README.html"> Content filter (built-in, external before queue, external after queue) </a> </td> </tr> </table> <h3> By popular demand...</h3> <table> <tr> <td valign="top" nowrap="nowrap"> Postfix 3.5 </td> <td> <a href="postsuper.1.html"> Forced message expiration</a>. </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 3.4 </td> <td> <a href="MAILLOG_README.html"> Logging to Postfix logfile</a>, without using syslogd or systemd. </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 2.9 </td> <td> <a href="postconf.5.html#enable_long_queue_ids">Non-repeating (long) queue IDs</a> </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 2.8 </td> <td> <a href="postconf.5.html#smtpd_reject_footer">Server reject "footer" text</a> </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 2.3 </td> <td> <a href="bounce.5.html">Configurable delivery status notification message text </a> </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 2.3 </td> <td> <a href="postconf.5.html#sender_dependent_relayhost_maps">Sender-dependent SMTP relay lookup</a> </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 2.3 </td> <td> <a href="postconf.5.html#smtp_sender_dependent_authentication">Sender-dependent SASL password lookup</a> </td> </tr> </table> <h3>Database support </h3> <table> <tr> <td valign="top" nowrap="nowrap"> Postfix 3.9 </td> <td> <a href="MONGODB_README.html">MongDB database client</a>. </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 3.7 </td> <td> <a href="PCRE_README.html">Support for the pcre2 library</a>. </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 3.7 </td> <td> Support to inline the content of small <a href="cidr_table.5.html">cidr:</a>, <a href="pcre_table.5.html">pcre:</a>, and <a href="regexp_table.5.html">regexp:</a> tables in Postfix parameter values. </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 3.2 </td> <td> MySQL stored procedure support. </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 3.0 </td> <td> multi-database operators: pipelining with pipemap:{map1, map2, ...} and concatenation with unionmap:{map1, map2, ...}</td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 2.11 </td> <td> <a href="LMDB_README.html"> LMDB database </a> </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 2.10 </td> <td> <a href="socketmap_table.5.html"> Sendmail-style socketmap </a> </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 2.9 </td> <td> Gradual degradation: in many cases a Postfix daemon will log a warning and continue providing the services that are still available, instead of immediately terminating with a fatal error. </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 2.9 </td> <td> <a href="MEMCACHE_README.html"> Memcache database </a> </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 2.8 </td> <td> <a href="SQLITE_README.html"> SQLite database </a> </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 2.2 </td> <td> <a href="CDB_README.html"> CDB database </a> </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 2.0 </td> <td> <a href="PGSQL_README.html"> PostgreSQL database </a> </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 1.0 </td> <td> <a href="LDAP_README.html"> LDAP database </a></td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 1.0 </td> <td> <a href="MYSQL_README.html"> MySQL database </a> </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 1.0 </td> <td> <a href="DB_README.html"> Berkeley DB database </a> </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 1.0 </td> <td> DBM database </td> </tr> </table> <h3>Mailbox support </h3> <table> <tr> <td valign="top" nowrap="nowrap"> Postfix 1.0 </td> <td> Maildir and mailbox format </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 1.0 </td> <td> <a href="VIRTUAL_README.html"> Virtual domains </a> </td> </tr> </table> <h3>Address manipulation </h3> <table> <tr> <td valign="top" nowrap="nowrap"> Postfix 2.2 </td> <td> <a href="ADDRESS_REWRITING_README.html#generic"> Masquerading addresses in outbound SMTP mail </a> </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 2.2 </td> <td> <a href="ADDRESS_REWRITING_README.html#william"> Selective address rewriting </a> </td> </tr> <tr> <td valign="top" nowrap="nowrap"> Postfix 1.1 </td> <td> <a href="VERP_README.html"> VERP envelope return addresses </a> </td> </tr> </table> <h2> <a name="fs-requirements">Postfix file system requirements</a> </h2> <p> The Postfix mail queue requires that: </p> <ul> <li> <p> Renaming a file to a near-by directory does not change the file's inode number. </p> <li> <p> A file is not lost after fsync() for that file (not its parent directory) returns successfully, and then the system crashes. This must remain true even when that file is later renamed to a near-by directory. </p> <li> <p> When Postfix in a virtual guest machine flushes a file with fsync(), the file information must not be <a href="http://communities.vmware.com/thread/332142">cached in volatile host memory</a>. Instead the information must immediately be written to disk (or to persistent cache) before fsync() returns in the virtual guest machine. </p> <li> <p> Postfix can set the execute bit on a queue file. If this does not work, then no mail will ever be delivered. </p> </ul> <p> In addition to the above, Postfix maildir delivery requires that: </p> <ul> <li> <p> A file can be hard linked between different near-by directories. </p> <li> <p> A file is not lost when it is hard-linked to a near-by directory, unlinked from the old directory, and then the system crashes. </p> </ul> <p> Postfix mailbox delivery introduces no additional requirements. </p> <p> Files in the Postfix command_directory require that: </p> <ul> <li> <p> The setgid bit works. This is required to access the mail queue with the postdrop command, and to access protected UNIX-domain sockets with the postdrop and postqueue commands. </p> </ul> </div> </body> </html>