diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index 754c9bc6de..c18ddced82 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -4876,3 +4876,128 @@ (define-public aerc
     ;; <https://lists.sr.ht/~rjarry/aerc-devel/%3Cb5cb213a7d0c699a886971658c2476
     ;; 1073eb2391%40disroot.org%3E>
     (license license:gpl3+)))
+
+(define-public postfix
+  (package
+    (name "postfix")
+    (version "3.8-20221023")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "http://cdn.postfix.johnriley.me/mirrors/postfix-release/experimental/postfix-"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "0aaylhn81n9z3kidx53kzf2jrilr3lgwfxsk1r4hn7nkrp62bcwm"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list #:tests? #f
+           #:modules `((srfi srfi-26)
+                       ,@%gnu-build-system-modules)
+           #:phases #~(modify-phases %standard-phases
+                        (add-before 'configure 'patch-/bin/sh
+                          (lambda _
+                            (substitute* (find-files "." "^Makefile")
+                              (("/bin/sh")
+                               (which "sh")))))
+                        (add-before 'configure 'patch-bdb-include
+                          (lambda* (#:key inputs #:allow-other-keys)
+                            (substitute* "makedefs"
+                              (("/usr/include")
+                               (string-append (assoc-ref inputs "bdb")
+                                              "/include")))))
+                        (add-before 'configure 'dont-hardcode-PATH
+                          (lambda _
+                            (substitute* '("postfix-install"
+                                           "conf/post-install")
+                              (("^PATH=")
+                               "# PATH="))))
+                        (add-before 'configure 'fix-strict-PATH
+                          (lambda _
+                            (substitute* "src/util/sys_defs.h"
+                              (("^#define (ROOT_PATH|_PATH_DEFPATH|_PATH_STDPATH).*")
+                               "#define ROOT_PATH \"/run/setuid-programs:/run/current-system/profile/bin:/run/current-system/profile/sbin\"\n"))))
+                        (add-before 'configure 'use-relative-symlink-to-store
+                          (lambda _
+                            (substitute* "postfix-install"
+                              (("ln -sf")
+                               "ln -rsf"))))
+                        (add-before 'configure 'fix-absolute-path-to-setuid-programs
+                          (lambda _
+                            (substitute* "conf/postfix-script"
+                              (("\\$command_directory/postqueue")
+                               "/run/setuid-programs/postqueue")
+                              (("\\$command_directory/postdrop")
+                               "/run/setuid-programs/postdrop"))))
+                        (add-before 'configure 'disable-warning-on-non-writable-config-files
+                          (lambda _
+                            (substitute* "conf/postfix-script"
+                              (("find \\$todo \\\\\\( -perm -020 -o -perm -002 \\\\\\) \\\\\n")
+                               " # find $todo \\( -perm -020 -o -perm -002 \\)"))))
+                        (add-before 'configure 'disable-write-to-/etc/postfix
+                          (lambda _
+                            (substitute* "src/postconf/postconf_edit.c"
+                              (("pcf_set_config_dir.*")
+                               "return;"))))
+                        (add-before 'configure 'setup-environment
+                          (lambda* (#:key outputs inputs #:allow-other-keys)
+                            (setenv "CCARGS"
+                                    (string-append
+                                     "-DUSE_TLS -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I"
+                                     (assoc-ref inputs "cyrus-sasl")
+                                     "/include/sasl"))
+                            (setenv "AUXLIBS" "-lnsl -lcrypto -lssl -lsasl2")
+                            (let* ((out (assoc-ref outputs "out"))
+                                   (bin (string-append out "/bin"))
+                                   (sbin (string-append out "/sbin"))
+                                   (lib (string-append out "/lib/postfix"))
+                                   (libexec (string-append out
+                                                           "/libexec/postfix"))
+                                   (etc (string-append out "/etc/postfix"))
+                                   (man (string-append out "/share/man"))
+                                   (doc (string-append out
+                                                       "/share/doc/postfix-"
+                                                       #$version))
+                                   (html (string-append doc "/html")))
+                              (setenv "install_root" "wip-prefix")
+                              (setenv "newaliases_path"
+                                      (string-append bin "/newaliases"))
+                              (setenv "mailq_path"
+                                      (string-append bin "/mailq"))
+                              (setenv "sendmail_path"
+                                      (string-append sbin "/sendmail"))
+                              (setenv "command_directory" sbin)
+                              (setenv "shlib_directory" lib)
+                              (setenv "daemon_directory" libexec)
+                              (setenv "meta_directory" etc)
+                              (setenv "sample_directory" etc)
+                              (setenv "manpage_directory" man)
+                              (setenv "readme_directory" doc)
+                              (setenv "html_directory" html)
+                              (setenv "sample_directory"
+                                      (string-append out "/share/postfix")))))
+                        (replace 'configure
+                          (lambda _
+                            (invoke "make" "makefiles" "pie=yes"
+                                    "dynamicmaps=yes")))
+                        (replace 'install
+                          (lambda* (#:key outputs #:allow-other-keys)
+                            (let ((out (assoc-ref outputs "out")))
+                              (invoke "make" "non-interactive-package")
+                              (delete-file-recursively "wip-prefix/var")
+                              (copy-recursively "wip-prefix/etc"
+                                                (string-append out "/etc"))
+                              (copy-recursively (string-append "wip-prefix"
+                                                               out) out)))))))
+    (inputs (list bdb cyrus-sasl libnsl openssl perl))
+    (native-inputs (list m4))
+    (home-page "https://www.postfix.org")
+    (synopsis "sendmail compatible MTA")
+    (description
+     "Postfix is Wietse Venema's mail server that started life at IBM research
+as an alternative to the widely-used Sendmail program.  Now at Google, Wietse
+continues to support Postfix.
+
+Postfix attempts to be fast, easy to administer, and secure.  The outside has a
+definite Sendmail-ish flavor, but the inside is completely different.")
+    (license (list license:ibmpl1.0 license:epl2.0))))
