Postfix: Comparison
Please note this is a comparison between Version 1 by Sirius Huang and Version 2 by Sirius Huang.

Postfix is a free and open-source mail transfer agent (MTA) that routes and delivers electronic mail. It is released under the IBM Public License 1.0 which is a free software license. Alternatively, starting with version 3.2.5, it is available under the Eclipse Public License 2.0 at the user's option. Originally written in 1997 by Wietse Venema at the IBM Thomas J. Watson Research Center in New York, and first released in December 1998, Postfix continues (As of 2022) to be actively developed by its creator and other contributors. The software is also known by its former names VMailer and IBM Secure Mailer. The name Postfix is a compound of "post" (which is another word for "mail") and "fix "(which is for other software that inspired Postfix development). In a study published on June 1, 2022 by E-Soft, Inc., approximately 34% of the publicly reachable mail-servers on the Internet ran Postfix, making it the second most popular mail server behind Exim. Note: this survey covers less than 25% of the 4+ million reachable SMTP servers on the Internet.

  • 3.2.5
  • free software
  • free and open-source

1. Typical Deployment

As an SMTP server, Postfix implements a first layer of defense against spambots and malware. Administrators can combine Postfix with other software that provides spam/virus filtering (e.g., Amavisd-new), message-store access (e.g., Dovecot), or complex SMTP-level access-policies (e.g., postfwd, milter-regex, policyd-weight).

As an SMTP client, Postfix implements a high-performance parallelized mail-delivery engine. Postfix is often combined with mailing-list software (such as Mailman).

2. Operating Systems

Postfix runs (or has run) on AIX, BSD, HP-UX, Linux, macOS, Solaris and, generally speaking, on every Unix-like operating system that ships with a C compiler and delivers a standard POSIX development environment. It is the default MTA for the macOS, NetBSD,[1] RedHat/CentOS[2] and Ubuntu operating systems.[3]

3. Architecture

Postfix consists of a combination of server programs that run in the background, and client programs that are invoked by user programs or by system administrators.

The Postfix core consists of several dozen server programs that run in the background, each handling one specific aspect of email delivery. Examples are the SMTP server, the scheduler, the address rewriter, and the local delivery server. For damage-control purposes, most server programs run with fixed reduced privileges, and terminate voluntarily after processing a limited number of requests. To conserve system resources, most server programs terminate when they become idle.

Client programs run outside the Postfix core. They interact with Postfix server programs through mail delivery instructions in the user's ~/.forward file, and through small "gate" programs to submit mail or to request queue status information.

Other programs provide administrative support to start or stop Postfix, query status information, manipulate the queue, or to examine or update its configuration files.

Yellow ellipses

One of Postfix' many daemons serving exactly one purpose. This split-up into many smaller pieces of software is considered one of the reasons why Postfix is secure and stable.

Blue boxes

The blue boxes represent so-called

Yellow ellipses
One of Postfix' many daemons serving exactly one purpose. This split-up into many smaller pieces of software is considered one of the reasons why Postfix is secure and stable.
Blue boxes
The blue boxes represent so-called

lookup tables. A lookup table consists of two columns (key and value) containing information used for access control, e-mail routing etc.

Orange boxes

The orange boxes are either mail queues or files. In either case, e-mails are stored on persistent media (e.g., a hard disk).

White clouds

The clouds stand for points at which e-mails enter or leave Postfix. For example,

. A lookup table consists of two columns (key and value) containing information used for access control, e-mail routing etc.
Orange boxes
The orange boxes are either mail queues or files. In either case, e-mails are stored on persistent media (e.g., a hard disk).
White clouds
The clouds stand for points at which e-mails enter or leave Postfix. For example,

smtpd

receives mail from other mail servers or users whereas

smtp relays mail to other MTAs.

relays mail to other MTAs.

4. Implementation

The Postfix implementation uses safe subsets of the C language and of the POSIX system API. These subsets are buried under an abstraction layer that contains about 50% of all Postfix source code, and that provides the foundation on which all Postfix programs are built. For example, the "vstring" primitive makes Postfix code resistant to buffer overflow[4] attacks, and the "safe open" primitive makes Postfix code resistant to race condition attacks on systems that implement the POSIX file system API. This abstraction layer does not affect the attack resistance of non-Postfix code, such as code in system libraries or in third-party libraries.

5. Robustness

Conceptually, Postfix manages pipelines of processes that pass the responsibility for message delivery and error notification from one process to the next. All message and notification "state" information is persisted in the file system. The processes in a pipeline operate mostly without centralized control; this relative autonomy simplifies error recovery. When a process fails before completing its part of a file or protocol transaction, its predecessor in the pipeline backs off and retries the request later, and its successor in the pipeline discards unfinished work. Many Postfix daemons can simply "die" when they run into a problem; they are automatically restarted when the next service request arrives. This approach makes Postfix highly resilient, as long as the operating system or hardware don't fail catastrophically.

6. Performance

One single Postfix instance has been clocked at ~300 message deliveries/second[5] across the Internet, running on commodity hardware (a vintage-2003 Dell 1850 system with battery-backed MegaRAID controller and two SCSI disks). This delivery rate is an order of magnitude below the "intrinsic" limit of 2500 message deliveries/second[5] that was achieved with the mail queue on a RAM disk while delivering to the "discard" transport (with a dual-core Opteron system in 2007).

Mail systems such as Postfix and Qmail achieve high performance by delivering mail in parallel sessions. With mail systems such as Sendmail and Exim that make one connection at a time, high performance can be achieved by submitting limited batches of mail in parallel, so that each batch is delivered by a different process. Postfix and Qmail require parallel submission into different MTA instances once they reach their intrinsic performance limit, or the performance limits of the hardware or operating system.

The delivery rates cited above are largely theoretical. With bulk mail delivery, the true delivery rate is primarily determined by the receiver's mail receiving policies and by the sender's reputation.

7. Base Configuration

The main.cf file stores site-specific Postfix configuration parameters while master.cf defines daemon processes.[6] The Postfix Basic Configuration tutorial covers the core settings that each site needs to consider, and the Postfix Standard Configuration Examples document discusses configuration settings for a few common environments. The Postfix Address Rewriting document covers address rewriting and mail routing. The full documentation collection is at Postfix Documentation

More complex Postfix implementations may include: integration with other applications such as SpamAssassin; support for multiple virtual domain names - and use databases such as MySQL to control complex configurations.

8. Release History

VersionRelease date [7][8][9]Significant changes
MajorMinor
rowspan="10" 0.80.8.06 September 1999 
0.8.16 September 1999 
0.8.26 September 1999 
0.8.321 September 1999 
0.8.422 September 1999 
0.8.522 September 1999 
0.8.66 November 1999 
0.8.712 November 1999 
0.8.821 November 1999 
0.8.910 December 1999 
rowspan="14" 0.90.9.031 December 1999 
0.9.11 January 2000 
0.9.23 January 2000 
0.9.326 January 2000 
0.9.429 january 2000 
0.9.58 March 2000 
0.9.629 March 2000 
0.9.711 May 2000 
0.9.830 May 2000 
0.9.917 September 2000 
0.9.1029 October 2000 
0.9.1121 November 2000 
0.9.127 December 2000 
0.9.139 December 2000 
rowspan="9" 1.01.0.028 February 2001 
1.0.128 March 2001 
1.0.229 April 2001 
1.0.325 May 2001 
1.0.430 July 2001 
1.0.516 September 2001 
1.0.63 November 2001 
1.0.713 November 2001 
1.0.814 November 2001 
rowspan="14" 1.11.1.017 January 2002 
1.1.121 January 2002 
1.1.224 January 2002 
1.1.31 February 2002 
1.1.425 February 2002 
1.1.510 March 2002 
1.1.625 March 2002 
1.1.730 March 2002 
1.1.84 May 2002 
1.1.912 May 2002 
1.1.1013 May 2002 
1.1.1127 May 2002 
1.1.1221 Nov 2002 
1.1.1327 July 2003 
rowspan="21" 2.02.0.022 December 2002 
2.0.123 February 2003 
2.0.223 February 2003 
2.0.323 February 2003 
2.0.423 February 2003 
2.0.52 March 2003 
2.0.64 March 2003 
2.0.718 March 2003 
2.0.814 April 2003 
2.0.917 April 2003 
2.0.1020 May 2003 
2.0.118 June 2003 
2.0.1210 june 2003 
2.0.1328 June 2003 
2.0.1411 August 2003 
2.0.154 September 2003 
2.0.1621 January 2004 
2.0.1721 January 2004 
2.0.1824 January 2004 
2.0.1911 March 2004 
2.0.2021 April 2004 
rowspan="7" 2.12.1.022 April 2004 
2.1.12 May 2004 
2.1.214 June 2004 
2.1.317 June 2004 
2.1.429 June 2004 
2.1.514 September 2004 
2.1.68 May 2005 
rowspan="13" 2.22.2.009 March 2005 
2.2.114 March 2005 
2.2.231 March 2005 
2.2.328 April 2005 
2.2.420 June 2005 
2.2.518 July 2005 
2.2.628 November 2005 
2.2.77 December 2005 
2.2.82 January 2006 
2.2.920 February 2006 
2.2.105 April 2006 
2.2.1123 July 2006 
2.2.1220 October 2007 
rowspan="20" 2.32.3.010 july 2006 
2.3.123 July 2006 
2.3.226 July 2006 
2.3.324 August 2006 
2.3.431 October 2006 
2.3.510 December 2006 
2.3.631 December 2006 
2.3.729 January 2007 
2.3.81 March 2007 
2.3.922 April 2007 
2.3.1029 May 2007 
2.3.1130 May 2007 
2.3.1230 July 2007 
2.3.1316 October 2007 
2.3.1430 January 2008 
2.3.154 August 2008 
2.3.163 January 2009 
2.3.1711 May 2009 
2.3.1825 August 2009 
2.3.1927 August 2009 
rowspan="17" 2.42.4.022 April 2007 
2.4.129 may 2007 
2.4.230 May 2007 
2.4.330 June 2007 
2.4.430 July 2007 
2.4.530 July 2007 
2.4.616 October 2007 
2.4.730 January 2008 
2.4.84 August 2008 
2.4.930 August 2008 
2.4.103 January 2009 
2.4.1111 May 2009 
2.4.1225 August 2009 
2.4.1327 August 2009 
2.4.1421 March 2010 
2.4.1522 November 2010 
2.4.1628 February 2011 
rowspan="18" 2.52.5.024 January 2008 
2.5.115 February 2008 
2.5.27 May 2008 
2.5.326 July 2008 
2.5.413 August 2008 
2.5.530 August 2008 
2.5.63 January 2008 
2.5.711 May 2009 
2.5.828 August 2009Withdrawn release.
2.5.928 August 2009 
2.5.1021 March 2010 
2.5.1122 November 2010 
2.5.1228 February 2011 
2.5.1318 April 2011 
2.5.146 July 2011 
2.5.151 September 2011 
2.5.1622 October 2011 
2.5.176 February 2012EOL 2.5
rowspan="20" 2.62.6.011 May 2009 
2.6.119 May 2009 
2.6.203 June 2009 
2.6.302 August 2009Unannounced release.
2.6.425 August 2009Withdrawn release.
2.6.528 August 2009 
2.6.619 March 2010 
2.6.708 June 2010 
2.6.823 November 2010 
2.6.903 March 2011 
2.6.1009 May 2011 
2.6.1107 July 2011 
2.6.1202 September 2011 
2.6.1324 October 2011 
2.6.1404 February 2012 
2.6.1524 April 2012 
2.6.1620 May 2012 
2.6.1701 August 2012 
2.6.1813 December 2012 
2.6.1903 February 2013EOL 2.6
rowspan="17" 2.72.7.013 February 2010 
2.7.108 June 2010 
2.7.223 November 2010 
2.7.303 March 2011 
2.7.409 May 2011 
2.7.507 July 2011 
2.7.602 September 2011 
2.7.724 October 2011 
2.7.804 February 2012 
2.7.924 April 2012 
2.7.1020 May 2012 
2.7.1101 August 2012 
2.7.1213 December 2012 
2.7.1303 February 2013 
2.7.1422 June 2013 
2.7.1505 September 2013 
2.7.1616 January 2014EOL 2.7[10]
rowspan="21" 2.82.8.020 January 2011Introduction of postscreen daemon that sits before the main postfix and acts as a Zombie blocker. Also: DNS whitelisting, SQLite support[11]
2.8.122 February 2011 
2.8.221 March 2011 
2.8.39 May 2011 
2.8.47 July 2011 
2.8.53 September 2011 
2.8.624 October 2011 
2.8.77 November 2011 
2.8.81 February 2012 
2.8.95 March 2012 
2.8.1024 April 2012 
2.8.1120 May 2012 
2.8.121 August 2012 
2.8.1313 December 2012 
2.8.144 February 2013 
2.8.1522 June 2013 
2.8.165 September 2013 
2.8.1716 January 2014 
2.8.1813 October 2014 
2.8.1919 October 2014 
2.8.208 February 2015EOL 2.8[12]
rowspan="16" 2.92.9.01 February 2012Memcache support, gradual degradation[13]
2.9.118 February 2012 
2.9.224 April 2012 
2.9.320 May 2012 
2.9.41 August 2012 
2.9.513 December 2012 
2.9.64 February 2013 
2.9.722 June 2013 
2.9.85 September 2013 
2.9.916 January 2014 
2.9.1013 October 2014 
2.9.1119 October 2014 
2.9.128 February 2015 
2.9.1312 April 2015 
2.9.1420 July 2015 
2.9.1510 October 2015EOL 2.9[14]
rowspan="11" 2.102.10.011 February 2013Support for TLSv1.1 and TLSv1.2[15]
2.10.122 June 2013 
2.10.25 September 2013 
2.10.316 January 2014 
2.10.413 October 2014 
2.10.519 October 2014 
2.10.68 February 2015 
2.10.712 April 2015 
2.10.820 July 2015 
2.10.910 October 2015 
2.10.1015 May 2016EOL 2.10[16]
rowspan="12" 2.112.11.015 January 2014Support for DANE[17][18]
2.11.17 May 2014 
2.11.213 October 2014 
2.11.319 October 2014 
2.11.48 February 2015 
2.11.512 April 2015 
2.11.620 July 2015 
2.11.710 October 2015 
2.11.815 May 2016 
2.11.91 January 2017 
2.11.1013 June 2017 
2.11.1127 January 2018 
rowspan="15" 3.0
3.0.112 April 2015 
3.0.220 July 2015 
3.0.310 October 2015 
3.0.421 February 2016 
3.0.515 May 2016 
3.0.628 August 2016 
3.0.71 October 2016 
3.0.81 January 2017 
3.0.1013 June 2017 
3.0.1128 October 2017 
3.0.1227 January 2018 
3.0.1320 May 2018 
3.0.1424 November 2018 
3.0.1526 February 2019 
rowspan="15" 3.13.1.024 February 2016Simplified setup of opportunistic TLS and SMTP server key/certificate management, positive and negative DNS reply TTL support in postscreen, SASL AUTH rate limit in the SMTP server, safety limit on the number of address verify requests, JSON queue listing, destination-independent delivery rate delay, inter alia.[19]
3.1.115 May 2016 
3.1.228 August 2016 
3.1.31 October 2016 
3.1.41 January 2017 
3.1.613 June 2017 
3.1.728 October 2017 
3.1.827 January 2018 
3.1.920 May 2018 
3.1.1024 November 2018 
3.1.1126 February 2019 
3.1.1230 March 2019 
3.1.1329 June 2019 
3.1.1422 September 2019 
3.1.153 February 2020 
rowspan="23" 3.23.2.028 February 2017Elliptic curve negotiation with OpenSSL ≥ 1.0.2, stored-procedure support for MySQL databases, cidr: table support for if/endif and negation, support for per-client Milter configuration, "PASS" and "STRIP" actions in header/body_checks, and more.[20]
3.2.110 June 2017 
3.2.213 June 2017 
3.2.324 September 2017 
3.2.428 October 2017 
3.2.527 January 2018 
3.2.619 May 2018 
3.2.724 November 2018 
3.2.826 February 2019 
3.2.930 March 2019 
3.2.1029 June 2019 
3.2.1121 September 2019 
3.2.1203 February 2020 
3.2.1312 March 2020 
3.2.1418 April 2020 
3.2.1516 May 2020 
3.2.1614 June 2020 
3.2.1727 June 2020 
3.2.1824 July 2020 
3.2.1926 July 2020 
3.2.2007 November 2020 
3.2.2117 January 2021 
3.2.2211 April 2021 
rowspan="23" 3.33.3.021 February 2018Support for legacy release Postfix 2.11 ended[21]
3.3.119 May 2018 
3.3.224 November 2018 
3.3.326 February 2019 
3.3.430 March 2019 
3.3.529 June 2019 
3.3.621 September 2019 
3.3.703 February 2020 
3.3.812 March 2020 
3.3.918 April 2020 
3.3.1016 May 2020 
3.3.1114 June 2020 
3.3.1227 June 2020 
3.3.1324 July 2020 
3.3.1426 July 2020 
3.3.1507 November 2020 
3.3.1617 January 2021 
3.3.1711 April 2021 
3.3.1813 June 2021 
3.3.1924 July 2021 
3.3.2007 November 2021 
3.3.2114 January 2022 
3.3.2205 February 2022 
rowspan="26" 3.43.4.027 February 2019Support for legacy release Postfix 3.0 ended[22]
3.4.107 March 2019 
3.4.210 March 2019 
3.4.310 March 2019 
3.4.414 March 2019 
3.4.530 March 2019 
3.4.629 June 2019 
3.4.721 September 2019 
3.4.824 November 2019 
3.4.903 February 2020 
3.4.1012 March 2020 
3.4.1118 April 2020 
3.4.1216 May 2020 
3.4.1314 June 2020 
3.4.1427 June 2020 
3.4.1524 July 2020 
3.4.1626 July 2020 
3.4.1730 August 2020 
3.4.1807 November 2020 
3.4.1917 January 2021 
3.4.2011 April 2021 
3.4.2113 June 2021 
3.4.2224 July 2021 
3.4.2307 November 2021 
3.4.2414 January 2022 
3.4.2505 February 2022 
rowspan="16" 3.53.5.016 March 2020Support for legacy release Postfix 3.1 ended[23]
3.5.118 April 2020 
3.5.216 May 2020 
3.5.314 June 2020 
3.5.427 June 2020 
3.5.524 July 2020 
3.5.626 July 2020 
3.5.730 August 2020 
3.5.807 November 2020 
3.5.917 January 2021 
3.5.1011 April 2021 
3.5.1113 June 2021 
3.5.1224 July 2021 
3.5.1307 November 2021 
3.5.1414 January 2022 
3.5.1505 February 2022 
rowspan="6" 3.63.6.029 April 2021Support for legacy release Postfix 3.2 ended[24]
3.6.113 June 2021 
3.6.224 July 2021 
3.6.307 November 2021 
3.6.414 January 2022 
3.6.505 February 2022 
rowspan="1" 3.73.7.005 February 2022Support for legacy release Postfix 3.3 ended[25]
3.8 25 March 2022 
{{{2}}}

References

  1. "The NetBSD Guide. Chapter 27. Mail and news". http://netbsd.org/docs/guide/en/chap-mail.html. 
  2. "CHAPTER 24. POSTFIX". https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/selinux_users_and_administrators_guide/chap-managing_confined_services-postfix. 
  3. "Postfix". Community Documentation, Ubuntu Wiki. https://help.ubuntu.com/community/Postfix. 
  4. Hontañón, Ramón J (July 10, 2001). Linux Security. San Francisco: Sybex. p. 166. ISBN 978-0-7821-2741-6. https://books.google.com/?id=wYBbM8ol2McC&pg=PA166&lpg=PA166&dq=postfix+resilient+against+buffer+overflow. Retrieved 2011-09-21. 
  5. "Bulk Mailing Performance". https://groups.google.com/forum/?fromgroups=#!topic/mailing.postfix.users/pPcRJFJmdeA. 
  6. Postfix-Tutorial.com: Postfix, Courier/POP, SASL & Spamassassin – with MySQL admin http://www.postfix-tutorial.com/
  7. Postfix Source Code http://ftp.porcupine.org/mirrors/postfix-release/index.html
  8. Index of /pub/postfix-release/official http://mirror.reverse.net/pub/postfix-release/official/
  9. Postfix Announcements http://www.postfix.org/announcements.html
  10. "Postfix legacy releases 2.10.3, 2.9.9, 2.8.17, and 2.7.16". http://www.postfix.org/announcements/postfix-2.10.3.html. 
  11. "Postfix stable release 2.8.0". http://www.postfix.org/announcements/postfix-2.8.0.html. 
  12. "Postfix legacy releases 2.11.4, 2.10.6, 2.9.12, and 2.8.20". http://www.postfix.org/announcements/postfix-2.11.4.html. 
  13. "Postfix stable release 2.9.0". http://www.postfix.org/announcements/postfix-2.9.0.html. 
  14. "Postfix stable release 3.1.0". http://www.postfix.org/announcements/postfix-3.1.0.html. 
  15. "Postfix stable release 2.10.0". http://www.postfix.org/announcements/postfix-2.10.0.html. 
  16. "Postfix stable release 3.1.4 and legacy releases 3.0.8, 2.11.9". http://www.postfix.org/announcements/postfix-3.1.4.html. 
  17. "Postfix 2.11.0-RC2 available with feature-complete DANE support". http://www.ietf.org/mail-archive/web/dane/current/msg06294.html. 
  18. "Postfix stable release 2.11.0". http://www.postfix.org/announcements/postfix-2.11.0.html. 
  19. "Postfix stable release 3.1.0". http://www.postfix.org/announcements/postfix-3.1.0.html. 
  20. "Postfix stable release 3.2.0". http://www.postfix.org/announcements/postfix-3.2.0.html. 
  21. "Postfix stable release 3.3.0". http://www.postfix.org/announcements/postfix-3.3.0.html. 
  22. "Postfix stable release 3.4.0". http://www.postfix.org/announcements/postfix-3.4.0.html. 
  23. "Postfix stable release 3.5.0". http://www.postfix.org/announcements/postfix-3.5.0.html. 
  24. "Postfix stable release 3.6.0". http://www.postfix.org/announcements/postfix-3.6.0.html. 
  25. "Postfix stable release 3.7.0". http://www.postfix.org/announcements/postfix-3.7.0.html. 
More
Video Production Service