gnu: gpgme: Update to 1.14.0.
[jackhill/guix/guix.git] / gnu / packages / mail.scm
index 2acc6ec..81dc5b8 100644 (file)
 ;;; Copyright © 2016 Lukas Gradl <lgradl@openmailbox.org>
 ;;; Copyright © 2016 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2016, 2017 Troy Sankey <sankeytms@gmail.com>
-;;; Copyright © 2016, 2017, 2018 ng0 <ng0@n0.is>
+;;; Copyright © 2016, 2017, 2018 Nikita <nikita@n0.is>
 ;;; Copyright © 2016 Clément Lassieur <clement@lassieur.org>
-;;; Copyright © 2016, 2017, 2018, 2019 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2016, 2017, 2018, 2019, 2020 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2016 John Darrington <jmd@gnu.org>
 ;;; Copyright © 2016, 2018 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
 ;;; Copyright © 2017 Kyle Meyer <kyle@kyleam.com>
 ;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2017, 2018 Rene Saavedra <pacoon@protonmail.com>
-;;; Copyright © 2018, 2019 Pierre Langlois <pierre.langlois@gmx.com>
+;;; Copyright © 2017, 2018, 2020 Rene Saavedra <pacoon@protonmail.com>
+;;; Copyright © 2018, 2019, 2020 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
 ;;; Copyright © 2018 Gábor Boskovits <boskovits@gmail.com>
 ;;; Copyright © 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2019 Tanguy Le Carrour <tanguy@bioneland.org>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2020 Justus Winter <justus@sequoia-pgp.org>
+;;; Copyright © 2020 Eric Brown <ecbrown@ericcbrown.com>
+;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
   #:use-module (gnu packages guile-xyz)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages haskell-xyz)
+  #:use-module (gnu packages icu4c)
   #:use-module (gnu packages kerberos)
+  #:use-module (gnu packages language)
   #:use-module (gnu packages libcanberra)
   #:use-module (gnu packages libevent)
   #:use-module (gnu packages libidn)
   #:use-module (gnu packages libunistring)
+  #:use-module (gnu packages libunwind)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages lsof)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages perl-web)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-check)
+  #:use-module (gnu packages python-crypto)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
+  #:use-module (gnu packages rdf)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages ruby)
   #:use-module (gnu packages search)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xorg)
   #:use-module (gnu packages xml)
-  #:use-module ((guix licenses)
-                #:select (fdl1.1+
-                           agpl3+
-                           gpl2 gpl2+ gpl3 gpl3+ lgpl2.1 lgpl2.1+ lgpl3+
-                           non-copyleft (expat . license:expat) bsd-3
-                           public-domain bsd-4 isc (openssl . license:openssl)
-                           bsd-2 x11-style agpl3 asl2.0 perl-license))
+  #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (srfi srfi-1)
   #:use-module (ice-9 match))
 
+(define-public anubis
+  (package
+    (name "anubis")
+    ;; This 4.2.90 alpha release adds support for Guile 3 and has fixes for
+    ;; other issues.
+    (version "4.2.90")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://alpha.gnu.org/gnu/anubis/anubis-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "0dvm6acl32dv8bixx9z50gzwfp6kj4kxnn1j3dcwjlp7sasjp41s"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("automake" ,automake)
+       ("autoconf" ,autoconf)
+       ("gettext" ,gettext-minimal)
+       ("m4" ,m4)))                     ;for the test suite
+    (inputs
+     `(("gdbm" ,gdbm)
+       ("gnutls" ,gnutls)
+       ("gpgme" ,gpgme)
+       ("gsasl" ,gsasl)
+       ("guile" ,guile-3.0)
+       ("libgcrypt" ,libgcrypt)         ;gnutls support depends on libgcrypt
+       ("libgpg-error" ,libgpg-error)))
+    (outputs '("out" "debug"))
+    (synopsis "SMTP message submission daemon")
+    (description "Anubis is a daemon that sits between the Mail User
+Agent (MUA) and the Mail Transfer Agent (MTA).  When a mail is sent by a user
+in the MUA, it is first passed to Anubis, which performs additional processing
+to the message before passing it on for delivery by the MTA.  Anubis may, for
+example, modify the message headers or body, or encrypt or sign the message.")
+    (home-page "https://www.gnu.org/software/anubis/manual/")
+    (license license:gpl3+)))
+
 (define-public mailutils
   (package
     (name "mailutils")
-    (version "3.9")
+    (version "3.10")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnu/mailutils/mailutils-"
                                  version ".tar.xz"))
              (sha256
               (base32
-               "1g1xf2lal04nsnf1iym9n9n0wxjpqbcr9nysxpm98v4pniinqwsz"))))
+               "17smrxjdgbbzbzakik30vj46q4iib85ksqhb82jr4vjp57akszh9"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
                (("\\$\\(SHELL\\) \\$\\(TESTSUITE\\)" all)
                 (string-append "-" all)))
 
+             ;; XXX: The ‘moderator: program discard’ test does not specify
+             ;; an explicit From: but does expect an exact match.  But why are
+             ;; all other tests unaffected?
+             (substitute* "sieve/tests/testsuite"
+               (("gray@")
+                "nixbld@"))
+
              ;; 'frm' tests expect write access to $HOME.
              (setenv "HOME" (getcwd))
 
@@ -248,7 +296,7 @@ also available, simplifying the addition of mail capabilities to new
 software.")
     (license
      ;; Libraries are under LGPLv3+, and programs under GPLv3+.
-     (list gpl3+ lgpl3+))))
+     (list license:gpl3+ license:lgpl3+))))
 
 (define-public guile2.2-mailutils
   (package
@@ -339,13 +387,13 @@ Nullmailer is designed to be simple to configure, easy to extend, and secure.
 It requires little ongoing administration.  The included @command{sendmail}
 emulator front-end should allow most (if not all) sendmail-compatible programs
 to run without any changes.")
-    (license (list lgpl2.1+         ; lib/cli++/ (but some files lack headers)
-                   gpl2+))))        ; everything else
+    (license (list license:lgpl2.1+ ; lib/cli++/ (but some files lack headers)
+                   license:gpl2+)))) ; everything else
 
 (define-public fetchmail
   (package
     (name "fetchmail")
-    (version "6.4.1")
+    (version "6.4.8")
     (source
      (origin
        (method url-fetch)
@@ -353,21 +401,14 @@ to run without any changes.")
                            (version-major+minor version) "/"
                            "fetchmail-" version ".tar.xz"))
        (sha256
-        (base32 "1859wvfc9fq72mwp4njdiy0x89hnddlfr3nix71qqglcs0fz2crz"))))
+        (base32 "1g893dr3982vrqzxybmflnqfmd1q6yipd9krvxn0avhlrrp97k96"))))
     (build-system gnu-build-system)
     (inputs
      `(("openssl" ,openssl)))
     (arguments
      `(#:configure-flags
        (list (string-append "--with-ssl="
-                            (assoc-ref %build-inputs "openssl")))
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'check 'create-test-environment
-           (lambda _
-             ;; Fix ‘Cannot find absolute path for user's home directory’.
-             (setenv "HOME" "/tmp")
-             #t)))))
+                            (assoc-ref %build-inputs "openssl")))))
     (home-page "https://www.fetchmail.info/")
     (synopsis "Remote-mail retrieval and forwarding utility")
     (description
@@ -382,12 +423,12 @@ Fetchmail retrieves mail from remote mail servers and forwards it via SMTP,
 so it can then be read by normal mail user agents such as mutt, elm
 or BSD Mail.  It allows all your system MTA's filtering, forwarding, and
 aliasing facilities to work just as they would on normal mail.")
-    (license gpl2+))) ; most files are actually public domain or x11
+    (license license:gpl2+))) ; most files are actually public domain or x11
 
 (define-public mutt
   (package
     (name "mutt")
-    (version "1.13.4")
+    (version "1.14.6")
     (source (origin
              (method url-fetch)
              (uri (list
@@ -397,7 +438,7 @@ aliasing facilities to work just as they would on normal mail.")
                                    version ".tar.gz")))
              (sha256
               (base32
-               "016dzx2c0kr9xgnw4nfzpkn4nvpk56rdlcqhrwa820fq8083yzdm"))
+               "0i0q6vwhnb1grimsrpmz8maw255rh9k0laijzxkry6xqa80jm5s7"))
              (patches (search-patches "mutt-store-references.patch"))))
     (build-system gnu-build-system)
     (inputs
@@ -421,15 +462,15 @@ aliasing facilities to work just as they would on normal mail.")
                            "--with-sasl"
                            "--with-sqlite3" ; required for Autocrypt
                            "--with-idn2" ; recommended for Autocrypt
-                           ;; so that mutt does not check whether the path
-                           ;; exists, which it does not in the chroot
+                           ;; So that mutt does not check whether the path
+                           ;; exists, which it does not in the chroot.
                            "--with-mailpath=/var/mail")))
     (home-page "http://www.mutt.org/")
     (synopsis "Mail client")
     (description
      "Mutt is a small but very powerful text-based mail client for Unix
 operating systems.")
-    (license gpl2+)))
+    (license license:gpl2+)))
 
 (define-public neomutt
   (package
@@ -439,7 +480,7 @@ operating systems.")
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/neomutt/neomutt.git")
+             (url "https://github.com/neomutt/neomutt")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
@@ -523,7 +564,7 @@ operating systems.")
     (description
      "NeoMutt is a command-line mail reader which is based on mutt.
 It adds a large amount of new and improved features to mutt.")
-    (license gpl2+)))
+    (license license:gpl2+)))
 
 (define-public gmime
   (package
@@ -568,7 +609,7 @@ It adds a large amount of new and improved features to mutt.")
      "GMime provides a core library and set of utilities which may be used for
 the creation and parsing of messages using the Multipurpose Internet Mail
 Extension (MIME).")
-    (license (list lgpl2.1+ gpl2+ gpl3+))))
+    (license (list license:lgpl2.1+ license:gpl2+ license:gpl3+))))
 
 ;; Some packages are not ready for GMime 3 yet.
 (define-public gmime-2.6
@@ -614,7 +655,7 @@ Extension (MIME).")
  (non-spam) by a statistical analysis of the message's header and
 content (body).  The program is able to learn from the user's classifications
 and corrections.  It is based on a Bayesian filter.")
-    (license gpl3+)))
+    (license license:gpl3+)))
 
 (define-public offlineimap
   (package
@@ -660,7 +701,7 @@ and corrections.  It is based on a Bayesian filter.")
      "OfflineImap synchronizes emails between two repositories, so that you
 can read the same mailbox from multiple computers.  It supports IMAP as REMOTE
 repository and Maildir/IMAP as LOCAL repository.")
-    (license gpl2+)))
+    (license license:gpl2+)))
 
 (define-public emacs-mew
   (package
@@ -711,27 +752,26 @@ repository and Maildir/IMAP as LOCAL repository.")
     (description "Mew (Messaging in the Emacs World) is a user interface
 for text messages, multimedia messages (MIME), news articles and
 security functionality including PGP, S/MIME, SSH, and SSL.")
-    (license bsd-3)))
+    (license license:bsd-3)))
 
 (define-public mu
   (package
     (name "mu")
-    (version "1.2.0")
+    (version "1.4.13")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/djcb/mu/releases/"
-                                  "download/" (version-major+minor version) "/"
+                                  "download/" version "/"
                                   "mu-" version ".tar.xz"))
               (sha256
                (base32
-                "0fh5bxvhjqv1p9z783lym8y1k3p4jcc3wg6wf7zl8s6w8krcfd7n"))))
+                "13kfpr77qrnp3i5qnb5zd03frd3fdviggnl50973gdk0hr7m0smj"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("glib" ,glib "bin")             ; for gtester
        ("emacs" ,emacs-minimal)
        ("tzdata" ,tzdata-for-tests)))   ; for mu/test/test-mu-query.c
-    ;; TODO: Add webkit and gtk to build the mug GUI.
     (inputs
      `(("xapian" ,xapian)
        ("guile" ,guile-2.2)
@@ -759,13 +799,14 @@ security functionality including PGP, S/MIME, SSH, and SSL.")
                             "guile/mu/Makefile.in")
                (("share/guile/site/2.0/") "share/guile/site/2.2/"))
              #t))
-         (add-after 'patch-configure 'fix-date-tests
-           ;; Loosen test tolerances to prevent failures caused by daylight
-           ;; saving time (DST).  See: https://github.com/djcb/mu/issues/1214.
+         (add-after 'unpack 'patch-bin-sh-in-tests
            (lambda _
-             (substitute* "lib/parser/test-utils.cc"
-               (("\\* 60 \\* 60, 1 },")
-                "* 60 * 60, 3600 + 1 },"))
+             (substitute* '("guile/tests/test-mu-guile.c"
+                            "mu/test-mu-cmd.c"
+                            "mu/test-mu-cmd-cfind.c"
+                            "mu/test-mu-query.c"
+                            "mu/test-mu-threads.c")
+               (("/bin/sh") (which "sh")))
              #t))
          (add-before 'install 'fix-ffi
            (lambda* (#:key outputs #:allow-other-keys)
@@ -795,54 +836,7 @@ security functionality including PGP, S/MIME, SSH, and SSL.")
 Maildir-format.  Mu's purpose in life is to help you to quickly find the
 messages you need; in addition, it allows you to view messages, extract
 attachments, create new maildirs, and so on.")
-    (license gpl3+)))
-
-(define mumimu
-  ;; This is a fork of mu for use in Mumi that stores message bug IDs in its
-  ;; database.  It also renames the library to "mumimu" to avoid confusion.
-  (let ((commit "6b42431052c7cc9a2e147938e1b67f14a93e4ee5")
-        (revision "2"))
-    (package
-      (inherit mu)
-      (name "mumimu")
-      (version (git-version (package-version mu) revision commit))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://git.elephly.net/software/mumimu.git")
-                      (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "044scxmjrckidqx935yza3aqnjyzrmhyvgx2gs2jyf68hl2qzb89"))))
-      (arguments
-       (substitute-keyword-arguments (package-arguments mu)
-         ((#:tests? anything '())
-          #f)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (replace 'patch-configure
-               (lambda _ (delete-file "autogen.sh") #t))
-             (replace 'fix-ffi
-               (lambda* (#:key outputs #:allow-other-keys)
-                 (substitute* "guile/mumimu.scm"
-                   (("\"libguile-mu\"")
-                    (format #f "\"~a/lib/libguile-mumimu\""
-                            (assoc-ref outputs "out"))))
-                 #t))
-             (delete 'install-emacs-autoloads)))
-         ((#:configure-flags flags)
-          '("--disable-gtk"
-            "--disable-webkit"
-            "--disable-mu4e"))))
-      (native-inputs
-       `(("pkg-config" ,pkg-config)
-         ("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)
-         ("glib" ,glib "bin")
-         ("tzdata" ,tzdata-for-tests)
-         ("texinfo" ,texinfo))))))
+    (license license:gpl3+)))
 
 (define-public alot
   (package
@@ -879,7 +873,7 @@ attachments, create new maildirs, and so on.")
     (description
      "Alot is an experimental terminal mail user agent (@dfn{MUA}) based on
 @code{notmuch} mail.  It is written in Python using the @code{urwid} toolkit.")
-    (license gpl3+)))
+    (license license:gpl3+)))
 
 (define-public notifymuch
   (let
@@ -892,7 +886,7 @@ attachments, create new maildirs, and so on.")
        (origin
          (method git-fetch)
          (uri (git-reference
-               (url "https://github.com/kspi/notifymuch.git")
+               (url "https://github.com/kspi/notifymuch")
                (commit commit)))
          (sha256
           (base32
@@ -927,7 +921,7 @@ is configurable, and a notification for the same message will not be send
 within a configurable period (defaults to 48 hours).  To use notifymuch, run
 @command{notifymuch} after new mail is indexed, this can be automated by
 invoking @command{notifymuch} from the post-new hook.")
-      (license gpl3))))
+      (license license:gpl3))))
 
 (define-public notmuch
   (package
@@ -1003,7 +997,7 @@ invoking @command{notifymuch} from the post-new hook.")
     (description
      "Notmuch is a command-line based program for indexing, searching, read-
 ing, and tagging large collections of email messages.")
-    (license gpl3+)))
+    (license license:gpl3+)))
 
 (define-public notmuch-addrlookup-c
   (package
@@ -1012,7 +1006,7 @@ ing, and tagging large collections of email messages.")
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                    (url "https://github.com/aperezdc/notmuch-addrlookup-c.git")
+                    (url "https://github.com/aperezdc/notmuch-addrlookup-c")
                     (commit (string-append "v" version))))
               (file-name (string-append name "-" version "-checkout"))
               (sha256
@@ -1074,7 +1068,7 @@ useful for email address completion.")
     (description
      "This package provides Python bindings to use the Notmuch mail indexing
 and search library.")
-    (license gpl3+)))
+    (license license:gpl3+)))
 
 (define-public python2-notmuch
   (package-with-python2 python-notmuch))
@@ -1109,7 +1103,7 @@ broadband.  Muchsync supports arbitrary pairwise synchronization among
 replicas.  A version-vector-based algorithm allows it to exchange only the
 minimum information necessary to bring replicas up to date regardless of which
 pairs have previously synchronized.")
-    (license gpl2+)))
+    (license license:gpl2+)))
 
 (define-public getmail
   (package
@@ -1135,7 +1129,7 @@ arbitrary message filtering, single-user and domain-mailboxes, and many other
 useful features.")
 
     ;; License is specified in file '__init__.py'.
-    (license gpl2)))
+    (license license:gpl2)))
 
 (define-public libetpan
   (package
@@ -1173,7 +1167,7 @@ useful features.")
 framework for different kinds of mail access: IMAP, SMTP, POP and NNTP.  It
 provides an API for C language.  It's the low-level API used by MailCore and
 MailCore 2.")
-    (license bsd-3)))
+    (license license:bsd-3)))
 
 (define-public compface
   (package
@@ -1194,12 +1188,12 @@ MailCore 2.")
     (description "This package takes your 48x48x1 portrait image and
 compresses it.")
     (home-page "https://legacy.cs.indiana.edu/ftp/faces/")
-    (license (x11-style "file://README"))))
+    (license (license:x11-style "file://README"))))
 
 (define-public claws-mail
   (package
     (name "claws-mail")
-    (version "3.17.5")
+    (version "3.17.6")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1207,7 +1201,7 @@ compresses it.")
                     ".tar.xz"))
               (sha256
                (base32
-                "1gjrmdmhc7zzilrlss9yl86ybv9sra8v0qi7mkwv7d9azidx5kns"))))
+                "1s05qw0r0gqwvvkxvrrwbjkbi61dvilixiwrpgcq21qc9csc9r0m"))))
     (build-system gnu-build-system)
     (native-inputs `(("pkg-config" ,pkg-config)))
     (inputs `(("bogofilter" ,bogofilter)
@@ -1256,19 +1250,19 @@ other popular email clients, as well as experienced users.  Almost all commands
 are accessible with the keyboard.  Plus, Claws-Mail is extensible via addons
 which can add many functionalities to the base client.")
     (home-page "https://www.claws-mail.org/")
-    (license gpl3+))) ; most files are actually public domain or x11
+    (license license:gpl3+))) ; most files are actually public domain or x11
 
 (define-public msmtp
   (package
     (name "msmtp")
-    (version "1.8.7")
+    (version "1.8.12")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://marlam.de/msmtp/releases/"
                            "/msmtp-" version ".tar.xz"))
        (sha256
-        (base32 "1waiiksa57byb7gvx1zmh6srvl6r8rvwqklk0slb3iaf4kfbqlws"))))
+        (base32 "0m33m5bc7ajmgy7vivnzj3mhybg37259hx79xypj769kfyafyvx8"))))
     (build-system gnu-build-system)
     (inputs
      `(("libsecret" ,libsecret)
@@ -1306,12 +1300,12 @@ which can add many functionalities to the base client.")
      "msmtp is an SMTP client.  In the default mode, it transmits a mail to
 an SMTP server (for example at a free mail provider) which takes care of further
 delivery.")
-    (license gpl3+)))
+    (license license:gpl3+)))
 
 (define-public exim
   (package
     (name "exim")
-    (version "4.93.0.4")
+    (version "4.94")
     (source
      (origin
        (method url-fetch)
@@ -1325,7 +1319,7 @@ delivery.")
                     (string-append "https://ftp.exim.org/pub/exim/exim4/old/"
                                    file-name))))
        (sha256
-        (base32 "01g4sfycv13glnmfrapwhjbdw6z1z7w5bwjldxjmglwfw5p3czak"))))
+        (base32 "1nsb2i5mqxfz1sl1bmbxmpb2qiaf3wffhfiw4j9vfpagy3xfhzpp"))))
     (build-system gnu-build-system)
     (inputs
      `(("bdb" ,bdb-5.3) ; ‘#error Version 6 and later BDB API is not supported’
@@ -1412,12 +1406,12 @@ Cambridge for use on Unix systems connected to the Internet.  In style it is
 similar to Smail 3, but its facilities are more general.  There is a great
 deal of flexibility in the way mail can be routed, and there are extensive
 facilities for checking incoming mail.")
-    (license gpl2+)))
+    (license license:gpl2+)))
 
 (define-public dovecot
   (package
     (name "dovecot")
-    (version "2.3.10")
+    (version "2.3.11.3")
     (source
      (origin
        (method url-fetch)
@@ -1425,22 +1419,32 @@ facilities for checking incoming mail.")
                            (version-major+minor version) "/"
                            "dovecot-" version ".tar.gz"))
        (sha256
-        (base32 "1ibiz3k2flablkcqbkvfzsjnq5b5kxximhcrplflsjl57mr88ca7"))))
+        (base32 "1p5gp8jbavcsaara5mfn5cbrnlxssajnchczbgmmfzr7228fmnfk"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
     (inputs
      `(("bzip2" ,bzip2)
+       ("clucene" ,clucene)
+       ("icu4c" ,icu4c)
        ("libsodium" ,libsodium)         ; extra password algorithms
+       ("libstemmer" ,libstemmer)
+       ;; FIXME: The 'test-backtrace' tests fail on arm when using glibc's
+       ;; backtrace_symbol() function so fallback to using libunwind.
+       ,@(if (target-arm?)
+          `(("libunwind" ,libunwind))
+          '())
        ("linux-pam" ,linux-pam)
        ("lz4" ,lz4)
        ("openssl" ,openssl)
        ("sqlite" ,sqlite)
-       ("zlib" ,zlib)))
+       ("zlib" ,zlib)
+       ("zstd" ,zstd "lib")))
     (arguments
      `(#:configure-flags '("--sysconfdir=/etc"
                            "--localstatedir=/var"
-                           "--with-sqlite") ; not auto-detected
+                           "--with-sqlite"  ; not auto-detected
+                           "--with-lucene") ; not auto-detected
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-file-names
@@ -1469,7 +1473,8 @@ It supports mbox/Maildir and its own dbox/mdbox formats.")
     ;; Most source files are covered by either lgpl2.1 or expat.  The SHA code
     ;; is covered by a variant of BSD-3, and UnicodeData.txt is covered by the
     ;; Unicode, Inc. License Agreement for Data Files and Software.
-    (license (list lgpl2.1 license:expat (non-copyleft "file://COPYING")))))
+    (license (list license:lgpl2.1 license:expat
+                   (license:non-copyleft "file://COPYING")))))
 
 (define-public dovecot-trees
   (package
@@ -1519,7 +1524,7 @@ How it works:
 using libsodium sealed boxes.
 @item New mail is encrypted as it arrives using the Curve25519 public key.
 @end enumerate\n")
-    (license agpl3)))
+    (license license:agpl3)))
 
 (define-public dovecot-libsodium-plugin
   (let ((commit "044de73c01c35385df0105f6b387bec5d5317ce7")
@@ -1556,19 +1561,19 @@ using libsodium sealed boxes.
       (description
        "@code{dovecot-libsodium-plugin} provides a libsodium password
 hashing scheme (such as scrypt) plug-in for @code{Dovecot}.")
-      (license gpl3+))))
+      (license license:gpl3+))))
 
 (define-public isync
   (package
     (name "isync")
-    (version "1.3.1")
+    (version "1.3.3")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://sourceforge/isync/isync/"
                            version "/isync-" version ".tar.gz"))
        (sha256 (base32
-                "1sphd30jplii58y2zmw365bckm6pszmapcy905zhjll1sm1ldjv8"))))
+                "10n8ykag0q3ws6fc15xqyg3v980v5nq3kzpablly2rh2z7vkn8gj"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("perl" ,perl)))
@@ -1577,12 +1582,12 @@ hashing scheme (such as scrypt) plug-in for @code{Dovecot}.")
        ("cyrus-sasl" ,cyrus-sasl)
        ("openssl" ,openssl-1.0)
        ("zlib" ,zlib)))
-    (home-page "http://isync.sourceforge.net/")
+    (home-page "https://isync.sourceforge.io/")
     (synopsis "Mailbox synchronization program")
     (description
      "isync/mbsync is a command-line tool for two-way synchronization of
 mailboxes.  Currently Maildir and IMAP are supported types.")
-    (license gpl2+)))
+    (license license:gpl2+)))
 
 (define-public perl-email-abstract
   (package
@@ -1605,7 +1610,7 @@ mailboxes.  Currently Maildir and IMAP are supported types.")
     (synopsis "Interface to mail representations")
     (description "Email::Abstract provides module writers with the ability to
 write simple, representation-independent mail handling code.")
-    (license perl-license)))
+    (license license:perl-license)))
 
 (define-public perl-email-address
   (package
@@ -1624,7 +1629,7 @@ write simple, representation-independent mail handling code.")
     (description "Email::Address implements a regex-based RFC 2822 parser that
 locates email addresses in strings and returns a list of Email::Address
 objects found.  Alternatively you may construct objects manually.")
-    (license perl-license)))
+    (license license:perl-license)))
 
 (define-public perl-email-address-xs
   (package
@@ -1646,7 +1651,7 @@ objects found.  Alternatively you may construct objects manually.")
 addresses and groups.  Unlike Email::Address, this module does not use regular
 expressions for parsing but instead is implemented in XS and uses shared code
 from Dovecot IMAP server.")
-    (license perl-license)))
+    (license license:perl-license)))
 
 (define-public perl-email-date-format
   (package
@@ -1665,7 +1670,7 @@ from Dovecot IMAP server.")
     (synopsis "Produce RFC 2822 date strings")
     (description "Email::Date::Format provides a means for generating an RFC
 2822 compliant datetime string.")
-    (license perl-license)))
+    (license license:perl-license)))
 
 (define-public perl-email-messageid
   (package
@@ -1684,7 +1689,7 @@ from Dovecot IMAP server.")
     (synopsis "Generate world unique message-ids")
     (description "Email::MessageID generates recommended message-ids to
 identify a message uniquely.")
-    (license perl-license)))
+    (license license:perl-license)))
 
 (define-public perl-email-mime
   (package
@@ -1713,7 +1718,7 @@ identify a message uniquely.")
 handle MIME encoded messages.  It takes a message as a string, splits it up
 into its constituent parts, and allows you access to various parts of the
 message.  Headers are decoded from MIME encoding.")
-    (license perl-license)))
+    (license license:perl-license)))
 
 (define-public perl-email-mime-contenttype
   (package
@@ -1734,7 +1739,7 @@ message.  Headers are decoded from MIME encoding.")
     (synopsis "Parse MIME Content-Type headers")
     (description "Email::MIME::ContentType parses a MIME Content-Type
 header.")
-    (license perl-license)))
+    (license license:perl-license)))
 
 (define-public perl-email-mime-encodings
   (package
@@ -1754,7 +1759,7 @@ header.")
     (home-page "https://metacpan.org/release/Email-MIME-Encodings")
     (synopsis "Unified interface to MIME encoding and decoding")
     (description "This module wraps MIME::Base64 and MIME::QuotedPrint.")
-    (license perl-license)))
+    (license license:perl-license)))
 
 (define-public perl-email-sender
   (package
@@ -1785,7 +1790,7 @@ header.")
     (synopsis "Perl library for sending email")
     (description "Email::Sender replaces the old and sometimes problematic
 Email::Send library.")
-    (license perl-license)))
+    (license license:perl-license)))
 
 (define-public perl-email-simple
   (package
@@ -1806,7 +1811,7 @@ Email::Send library.")
     (synopsis "Parsing of RFC 2822 messages")
     (description "Email::Simple provides simple parsing of RFC 2822 message
 format and headers.")
-    (license perl-license)))
+    (license license:perl-license)))
 
 (define-public libesmtp
   (package
@@ -1836,7 +1841,7 @@ submission of) electronic mail via a preconfigured Mail Transport Agent (MTA).
 It may be used as part of a Mail User Agent (MUA) or other program that must
 be able to post electronic mail where mail functionality may not be that
 program's primary purpose.")
-    (license (list lgpl2.1+ gpl2+))))
+    (license (list license:lgpl2.1+ license:gpl2+))))
 
 (define-public esmtp
   (package
@@ -1846,7 +1851,7 @@ program's primary purpose.")
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/andywingo/esmtp.git")
+             (url "https://github.com/andywingo/esmtp")
              (commit "01bf9fc")))
        (sha256
         (base32
@@ -1873,7 +1878,7 @@ user's @file{$HOME/.esmtprc} configuration file; see the @command{esmtprc} man
 page for more on configuration.  This package also provides minimal
 compatibility shims for the @command{sendmail}, @command{mailq}, and
 @command{newaliases} commands.")
-    (license gpl2+)))
+    (license license:gpl2+)))
 
 (define-public fdm
   (package
@@ -1899,7 +1904,8 @@ deliver it in various ways.")
      ;; Why point to a source file?  Well, all the individual files have a
      ;; copy of this license in their headers, but there's no seprate file
      ;; with that information.
-     (non-copyleft "https://github.com/nicm/fdm/blob/master/command.c"))))
+     (license:non-copyleft
+      "https://github.com/nicm/fdm/blob/master/command.c"))))
 
 
 (define-public procmail
@@ -1947,37 +1953,36 @@ for a variety of mailbox formats such as mbox, mh and maildir.  Incoming mail
 can be sorted into separate files/directories and arbitrary commands can be
 executed on mail arrival.  Procmail is considered stable, but is no longer
 maintained.")
-    (license gpl2+))) ;; procmail allows to choose the
-                      ;; nonfree Artistic License 1.0
-                      ;; as alternative to the GPL2+.
-                      ;; This option is not listed here.
+    (license license:gpl2+))) ;; procmail allows to choose the
+                              ;; nonfree Artistic License 1.0
+                              ;; as alternative to the GPL2+.
+                              ;; This option is not listed here.
 
 (define-public khard
   (package
     (name "khard")
-    (version "0.15.1")
+    (version "0.17.0")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri name version))
               (sha256
                (base32
-                "18ba2xgfq8sw0bg6xmlfjpizid1hkzgswcfcc54gl21y2dwfda2w"))))
+                "062nv4xkfsjc11k9m52dh6xjn9z68a4a6x1s8z05wwv4jbp1lkhn"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-after 'install 'install-doc
+         (add-after 'install 'install-completions
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
-                    (doc (string-append out "/share/doc/khard")))
-               (copy-recursively "misc/khard" doc)
+                    (zsh (string-append out "/share/zsh/site-functions")))
+               (copy-recursively "misc/zsh" zsh)
                #t))))))
     (native-inputs
      `(("python-setuptools-scm" ,python-setuptools-scm)))
-    (propagated-inputs
+    (inputs
      `(("python-atomicwrites" ,python-atomicwrites)
        ("python-configobj" ,python-configobj)
-       ("python-pyyaml" ,python-pyyaml)
        ("python-ruamel.yaml" ,python-ruamel.yaml)
        ("python-unidecode" ,python-unidecode)
        ("python-vobject" ,python-vobject)))
@@ -1987,7 +1992,7 @@ modifies and removes CardDAV address book entries at your local machine.  For
 synchronizing with a remote address book, @command{vdirsyncer} is recommended.
 Khard can also be used from within the email client @command{mutt}.")
     (home-page "https://github.com/scheibler/khard")
-    (license gpl3+)))
+    (license license:gpl3+)))
 
 (define-public perl-mail-spf
   (package
@@ -2026,7 +2031,7 @@ Khard can also be used from within the email client @command{mutt}.")
     (synopsis "Perl implementation of Sender Policy Framework")
     (description "Mail::SPF is the Sender Policy Framework implemented
 in Perl.")
-    (license bsd-3)))
+    (license license:bsd-3)))
 
 (define-public perl-mail-authenticationresults
   (package
@@ -2049,7 +2054,7 @@ in Perl.")
 that indicates the message authentication status as per RFC7601.  This module
 is not fully compliant with the RFC but it tries to implement most styles of
 Authentication-Results header seen in the wild.")
-    (license perl-license)))
+    (license license:perl-license)))
 
 (define-public perl-mail-dkim
   (package
@@ -2081,7 +2086,7 @@ Keys Identified Mail (DKIM) standard, and the older Yahoo! DomainKeys standard,
 both of which sign and verify emails using digital signatures and DNS records.
 Mail-DKIM can be used by any Perl program that wants to provide support for
 DKIM and/or DomainKeys.")
-    (license gpl3+)))
+    (license license:gpl3+)))
 
 (define-public dkimproxy
   (package
@@ -2156,7 +2161,7 @@ of incoming messages.
 It was designed for Postfix, but can be used to add DKIM support to nearly any
 existing mail server.  With Postfix, the proxies can operate as either
 @code{Before-Queue} or @code{After-Queue} content filters.")
-    (license gpl2+)))
+    (license license:gpl2+)))
 
 (define-public mb2md
   (package
@@ -2201,19 +2206,19 @@ existing mail server.  With Postfix, the proxies can operate as either
     (description
      "Mb2md is a Perl script that takes one or more mbox format files and
 converts them to maildir format directories.")
-    (license public-domain)))
+    (license license:public-domain)))
 
 (define-public mpop
   (package
     (name "mpop")
-    (version "1.4.7")
+    (version "1.4.10")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://marlam.de/mpop/releases/"
                            "mpop-" version ".tar.xz"))
        (sha256
-        (base32 "0c6n5afn9pr4p7gxkv462lysrw52w9fhvavzm99c78dcp9dj5xnk"))))
+        (base32 "1243hazpiwgvz2m3p48cdh0yw1019i6xjxgc7qyhmxcdy0inb6wy"))))
     (build-system gnu-build-system)
     (inputs
      `(("gnutls" ,gnutls)))
@@ -2228,7 +2233,7 @@ mpop supports multiple accounts, header based mail filtering, delivery
 to mbox files, maildir folders or an @acronym{MDA, Mail Delivery Agent},
 TLS/SSL, several authentication methods, @acronym{IDN, Internationalized Domain
 Names} and SOCKS proxies.")
-    (license gpl3+)))
+    (license license:gpl3+)))
 
 (define-public mhonarc
   (package
@@ -2250,7 +2255,7 @@ Names} and SOCKS proxies.")
 provides HTML mail archiving with index, mail thread linking,
 etc; plus other capabilities including support for MIME and
 powerful user customization features.")
-    (license gpl2+)))
+    (license license:gpl2+)))
 
 
 (define-public sendmail
@@ -2332,20 +2337,20 @@ define(`confINST_DEP', `')
      "Sendmail is a mail transfer agent (MTA) originally developed by Eric
 Allman.  It is highly configurable and supports many delivery methods and many
 transfer protocols.")
-    (license (non-copyleft "file://LICENSE"
-                           "See LICENSE in the distribution."))))
+    (license (license:non-copyleft "file://LICENSE"
+                                   "See LICENSE in the distribution."))))
 
 (define-public opensmtpd
   (package
     (name "opensmtpd")
-    (version "6.6.4p1")
+    (version "6.7.1p1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.opensmtpd.org/archives/"
                            "opensmtpd-" version ".tar.gz"))
        (sha256
-        (base32 "1kyph9ycq0j21dl9n1sq5fns9p4gckdi0fmnf8awrcwrdcm9dyg2"))))
+        (base32 "1jh8vxfajm1mvp1v5yh6llrhjzv0n9fgab88mlwllwqynhcfjy3l"))))
     (build-system gnu-build-system)
     (inputs
      `(("bdb" ,bdb)
@@ -2369,6 +2374,13 @@ transfer protocols.")
              "--with-table-db")
        #:phases
        (modify-phases %standard-phases
+         ;; See: https://github.com/OpenSMTPD/OpenSMTPD/issues/1069.
+         (add-after 'unpack 'fix-smtpctl-encrypt-bug
+           (lambda _
+             (substitute* "smtpd/smtpctl.c"
+               (("\"encrypt\", \"--\",")
+                "\"encrypt\","))
+             #t))
          ;; Fix some incorrectly hard-coded external tool file names.
          (add-after 'unpack 'patch-FHS-file-names
            (lambda _
@@ -2404,104 +2416,163 @@ functionality than those available in other SMTP daemons.  The objective is to
 provide enough features to satisfy typical usage at the risk of unsuitability
 to esoteric or niche requirements.")
     (home-page "https://www.opensmtpd.org")
-    (license (list bsd-2 bsd-3 bsd-4 (non-copyleft "file://COPYING")
-                   public-domain isc license:openssl))))
+    (license (list license:bsd-2 license:bsd-3 license:bsd-4
+                   (license:non-copyleft "file://COPYING")
+                   license:public-domain license:isc license:openssl))))
 
 (define-public opensmtpd-extras
   (package
     (name "opensmtpd-extras")
-    (version "5.7.1")
+    (version "6.7.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.opensmtpd.org/archives/"
-                                  name "-" version ".tar.gz"))
+                                  "opensmtpd-extras-" version ".tar.gz"))
               (sha256
                (base32
-                "1kld4hxgz792s0cb2gl7m2n618ikzqkj88w5dhaxdrxg4x2c4vdm"))))
+                "1b1mx71bvmv92lbm08wr2p60g3qhikvv3n15zsr6dcwbk9aqahzq"))))
     (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
     (inputs
      `(("libressl" ,libressl)
        ("libevent" ,libevent)
-       ("libasr" ,libasr)
-       ("python-2" ,python-2)
+       ("mysql" ,mysql)
        ("opensmtpd" ,opensmtpd)
-       ("perl" ,perl)
-       ("lua" ,lua)
        ("postgresql" ,postgresql)
-       ("sqlite" ,sqlite)
-       ("linux-pam" ,linux-pam)))
-    (native-inputs
-     `(("bison" ,bison)
-       ("pkg-config" ,pkg-config)
-       ("groff" ,groff)
-       ("automake" ,automake)
-       ("autoconf" ,autoconf)))
+       ("python" ,python-2)
+       ("sqlite" ,sqlite)))
     (arguments
-     `(;; We have to configure it like this because the default checks for for example
-       ;; python in /usr/local/bin, /usr/bin and fails otherwise.
-       #:configure-flags (list
-                          "--with-filter-clamav"    "--with-filter-dkim-signer"
-                          "--with-filter-dnsbl"     "--with-filter-lua"
-                          "--with-filter-monkey"    "--with-filter-pause"
-                          "--with-filter-perl"      "--with-filter-python"
-                          "--with-filter-regex"     "--with-filter-spamassassin"
-                          "--with-filter-stub"      "--with-filter-trace"
-                          "--with-filter-void"
-
-                          "--with-queue-null"       "--with-queue-python"
-                          "--with-queue-ram"        "--with-queue-stub"
-
-                          "--with-scheduler-python" "--with-scheduler-ram"
-                          "--with-scheduler-stub"
-
-                          "--with-table-ldap"       ; "--with-table-mysql"
-                          "--with-table-passwd"     "--with-table-postgres"
-                          "--with-table-python"     "--with-table-socketmap"
-                          "--with-table-sqlite"     "--with-table-stub"
-                          ;;"--with-table-redis"    ; TODO: package hiredis
-
-                          "--with-user=smtpd"       "--with-privsep-user=smtpd"
-                          "--localstatedir=/var"    "--sysconfdir=/etc"
-                          "--with-lua-type=lua"     ; can use lua or luajit
-
-                          (string-append "--with-python="
-                                         (assoc-ref %build-inputs "python-2"))
-                          (string-append "--with-lua="
-                                         (assoc-ref %build-inputs "lua")))))
-    (license (list bsd-2 bsd-3 bsd-4
-                   public-domain isc license:openssl))
+     `(#:configure-flags
+       (list "--sysconfdir=/etc"
+             "--localstatedir=/var"
+
+             "--with-queue-null"
+             "--with-queue-python"
+             "--with-queue-ram"
+             "--with-queue-stub"
+
+             "--with-table-ldap"
+             "--with-table-mysql"
+             "--with-table-postgres"
+             ;; "--with-table-redis"    ; TODO: package hiredis
+             "--with-table-socketmap"
+             "--with-table-passwd"
+             "--with-table-python"
+             "--with-table-sqlite"
+             "--with-table-stub"
+
+             "--with-scheduler-ram"
+             "--with-scheduler-stub"
+             "--with-scheduler-python"
+
+             "--with-user-smtpd=smtpd"
+
+             ;; We have to configure it like this because the default checks for
+             ;; for example Python in /usr/{,local/}bin and fails otherwise.
+             (string-append "--with-python="
+                            (assoc-ref %build-inputs "python")))))
+    (home-page "https://www.opensmtpd.org")
     (synopsis "Extra tables, filters, and various other addons for OpenSMTPD")
     (description
      "This package provides extra tables, filters, and various other addons
 for OpenSMTPD to extend its functionality.")
-    (home-page "https://www.opensmtpd.org")))
+    (license (list license:bsd-2 license:bsd-3 ; openbsd-compat
+                   license:isc))))             ; everything else
+
+(define-public mailman
+  (package
+    (name "mailman")
+    (version "3.3.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "mailman" version))
+        (sha256
+         (base32
+          "0idfiv48jjgc0jq4731094ddhraqq8bxnwmjk6sg5ask0jss9kxq"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("gunicorn" ,gunicorn)
+       ("python-aiosmtpd" ,python-aiosmtpd)
+       ("python-alembic" ,python-alembic)
+       ("python-atpublic" ,python-atpublic)
+       ("python-authheaders" ,python-authheaders)
+       ("python-authres" ,python-authres)
+       ("python-click" ,python-click)
+       ("python-dateutil" ,python-dateutil)
+       ("python-dnspython" ,python-dnspython)
+       ("python-falcon" ,python-falcon)
+       ("python-flufl-bounce" ,python-flufl-bounce)
+       ("python-flufl-i18n" ,python-flufl-i18n)
+       ("python-flufl-lock" ,python-flufl-lock)
+       ("python-importlib-resources" ,python-importlib-resources)
+       ("python-lazr-config" ,python-lazr-config)
+       ("python-passlib" ,python-passlib)
+       ("python-requests" ,python-requests)
+       ("python-sqlalchemy" ,python-sqlalchemy)
+       ("python-zope-component" ,python-zope-component)
+       ("python-zope-configuration" ,python-zope-configuration)
+       ("python-zope-event" ,python-zope-event)
+       ("python-zope-interface" ,python-zope-interface)))
+    (native-inputs
+     `(("python-nose" ,python-nose)))
+    (home-page "https://www.list.org")
+    (synopsis "Mailing list manager")
+    (description
+     "GNU Mailman is software for managing email discussion and mailing
+lists.  Both users and administrators generally perform their actions in a
+web interface, although email and command-line interfaces are also provided.
+The system features built-in archiving, automatic bounce processing, content
+filtering, digest delivery, and more.")
+    (license license:gpl3+)))
 
 (define-public python-mailmanclient
   (package
     (name "python-mailmanclient")
-    (version "3.1.1")
+    (version "3.3.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "mailmanclient" version))
        (sha256
         (base32
-         "0fdfs5g3pf30v2i7w18pdkv9xnfxmfcv66mzv56dck0a1igq07m3"))))
+         "0pjgzpvhdb6ql8asb20xr8d01m646zpghmcp9fmscks0n1k4di4g"))))
     (build-system python-build-system)
     (arguments
      `(#:tests? #f)) ; Requires mailman running
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-httplib2" ,python-httplib2)))
-    (home-page "https://launchpad.net/mailman.client")
+     `(("python-requests" ,python-requests)))
+    ;(native-inputs
+    ; `(("mailman" ,mailman)
+    ;   ("python-falcon" ,python-falcon)
+    ;   ("python-pytest" ,python-pytest)
+    ;   ("python-pytest-services" ,python-pytest-services)))
+    (home-page "https://www.list.org/")
     (synopsis "Python bindings for the Mailman 3 REST API")
     (description
      "The mailmanclient library provides official Python bindings for
 the GNU Mailman 3 REST API.")
-    (license lgpl3+)))
+    (properties `((python2-variant . ,(delay python2-mailmanclient))))
+    (license license:lgpl3+)))
 
+;; This is the last version which supports Python-2.
 (define-public python2-mailmanclient
-  (package-with-python2 python-mailmanclient))
+  (let ((base (package-with-python2
+                (strip-python2-variant python-mailmanclient))))
+    (package
+      (inherit base)
+      (version "3.1.1")
+      (source
+        (origin
+          (method url-fetch)
+          (uri (pypi-uri "mailmanclient" version))
+          (sha256
+           (base32
+            "0fdfs5g3pf30v2i7w18pdkv9xnfxmfcv66mzv56dck0a1igq07m3"))))
+      (propagated-inputs
+       `(("python2-six" ,python2-six)
+         ("python2-httplib2" ,python2-httplib2))))))
 
 (define-public mlmmj
   (package
@@ -2562,6 +2633,44 @@ installation on systems where resources are limited.  Its features include:
 @end enumerate\n")
     (license license:expat)))
 
+(define-public python-django-mailman3
+  (package
+    (name "python-django-mailman3")
+    (version "1.3.4")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "django-mailman3" version))
+        (sha256
+         (base32
+          "1yrm7wpjy34xai72vn2vkhc9131cdrbqy08rrabf36kynj5vcdvy"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _
+             (setenv "DJANGO_SETTINGS_MODULE"
+                     "django_mailman3.tests.settings_test")
+             (invoke "django-admin" "test"
+                     "--pythonpath=."))))))
+    (propagated-inputs
+     `(("python-django" ,python-django)
+       ("python-django-allauth" ,python-django-allauth)
+       ("python-django-gravatar2" ,python-django-gravatar2)
+       ("python-mailmanclient" ,python-mailmanclient)
+       ("python-pytz" ,python-pytz)))
+    (native-inputs
+     `(("python-mock" ,python-mock)))
+    (home-page "https://gitlab.com/mailman/django-mailman3")
+    (synopsis "Django library to help interaction with Mailman")
+    (description
+     "This package contains libraries and templates for Django-based interfaces
+interacting with Mailman.")
+    (properties `((python2-variant . ,(delay python2-django-mailman3))))
+    (license license:gpl3+)))
+
+;; This is the last version to support Python-2.
 (define-public python2-django-mailman3
   (package
     (name "python2-django-mailman3")
@@ -2599,37 +2708,140 @@ installation on systems where resources are limited.  Its features include:
     (description
      "Libraries and templates for Django-based interfaces
 interacting with Mailman.")
-    (license gpl3+)))
+    (license license:gpl3+)))
+
+(define-public python-mailman-hyperkitty
+  (package
+    (name "python-mailman-hyperkitty")
+    (version "1.1.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "mailman-hyperkitty" version))
+        (sha256
+         (base32
+          "1lfqa9admhvdv71f528jmz2wl0i5cv77v6l64px2pm4zqr9ckkjx"))
+        (patches
+          (list
+            (origin
+              ;; see: https://gitlab.com/mailman/mailman-hyperkitty/issues/17
+              ;; fixes test_archive_message_unserializable
+              (method url-fetch)
+              (uri "https://salsa.debian.org/mailman-team/mailman-hyperkitty/raw/debian/1.1.0-9/debian/patches/0002-Skip-the-test_archive_message_unserializable.patch")
+              (sha256
+               (base32
+                "0p1fwm46c4bl81lvsg3kjhn2r1lwgkpgxamb3xyqn7h9qdrw10hw")))))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-requests" ,python-requests)
+       ("python-zope-interface" ,python-zope-interface)))
+    (inputs
+     `(("mailman" ,mailman)))
+    (native-inputs
+     `(("python-mock" ,python-mock)
+       ("python-nose" ,python-nose)
+       ("python-nose2" ,python-nose2)))
+    (home-page "https://gitlab.com/mailman/mailman-hyperkitty/")
+    (synopsis "Mailman archiver plugin for HyperKitty")
+    (description
+     "Mailman3 allows emails sent to its mailing lists to be archived by any
+software provided that there is a plugin (loadable by Mailman3) designed to
+communicate with it properly.  This module contains a Mailman3 archiver plugin
+which sends emails to HyperKitty, the official Mailman3 web archiver.")
+    (license license:gpl3+)))
+
+(define-public python-hyperkitty
+  (package
+    (name "python-hyperkitty")
+    (version "1.3.3")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "HyperKitty" version))
+        (sha256
+         (base32
+          "0p85r9q6mn5as5b39xp9hkkipnk0156acx540n2ygk3qb3jd4a5n"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _
+             ;; It is unclear why this test fails.
+             (substitute* "hyperkitty/tests/commands/test_import.py"
+               (("def test_bad_content_type_part_two")
+                "@SkipTest\n    def test_bad_content_type_part_two"))
+             (setenv "PYTHONPATH" (string-append ".:" (getenv "PYTHONPATH")))
+             (invoke "example_project/manage.py" "test"
+                     "--settings=hyperkitty.tests.settings_test"))))))
+    (propagated-inputs
+     `(("python-dateutil" ,python-dateutil)
+       ("python-django" ,python-django)
+       ("python-django-compressor" ,python-django-compressor)
+       ("python-django-extensions" ,python-django-extensions)
+       ("python-django-gravatar2" ,python-django-gravatar2)
+       ("python-django-haystack" ,python-django-haystack)
+       ("python-django-mailman3" ,python-django-mailman3)
+       ("python-django-q" ,python-django-q)
+       ("python-djangorestframework" ,python-djangorestframework)
+       ("python-flufl-lock" ,python-flufl-lock)
+       ("python-mailmanclient" ,python-mailmanclient)
+       ("python-networkx" ,python-networkx)
+       ("python-pytz" ,python-pytz)
+       ("python-robot-detection" ,python-robot-detection)))
+    (native-inputs
+     `(("python-beautifulsoup4" ,python-beautifulsoup4)
+       ("python-elasticsearch" ,python-elasticsearch)
+       ("python-isort" ,python-isort)
+       ("python-mock" ,python-mock)
+       ("python-whoosh" ,python-whoosh)))
+    (home-page "https://gitlab.com/mailman/hyperkitty")
+    (synopsis "Web interface to access GNU Mailman v3 archives")
+    (description
+     "The hyperkitty Django app provides a web user interface to access GNU
+Mailman3 archives, and manage it.  This interface uses django, and requires
+some configuration.")
+    (license license:gpl3)))    ; Some files are gpl2+
 
 (define-public postorius
   (package
     (name "postorius")
-    (version "1.0.3")
+    (version "1.3.3")
     (source
      (origin
        (method url-fetch)
-       (uri (pypi-uri "postorius" version "+post2.tar.gz"))
-       (file-name (string-append name "-" version ".tar.gz"))
+       (uri (pypi-uri "postorius" version))
        (sha256
         (base32
-         "1wymcpv2icjjy8h1ni52p6dr7wwxf71ivqgbqhzx4i82yqphcaq5"))))
+         "08jn23gblbkfl09qlykbpsmp39mmach3sl69h1j5cd5kkx839rwa"))))
     (build-system python-build-system)
     (arguments
-     `(; One test dependency relies on Persona, which was shut down in
-       ;; November 2016.
-       #:tests? #f
-       ;; The part of the frontend of Mailman is still python 2.7.
-       #:python ,python-2))
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (add-installed-pythonpath inputs outputs)
+             (if tests?
+                 (invoke "python" "example_project/manage.py" "test"
+                         "--settings=test_settings" "postorius")
+                 #t))))
+       #:tests? #f)) ; Tests try to run a mailman instance to test against.
     (inputs
-     `(("python2-django" ,python2-django)
-       ("python2-django-mailman3" ,python2-django-mailman3)
-       ("python2-mailmanclient" ,python2-mailmanclient)))
+     `(("python-django" ,python-django)
+       ("python-django-mailman3" ,python-django-mailman3)
+       ("python-mailmanclient" ,python-mailmanclient)
+       ("python-readme-renderer" ,python-readme-renderer)))
+    (native-inputs
+     `(("python-beautifulsoup4" ,python-beautifulsoup4)
+       ("python-isort" ,python-isort)
+       ("python-mock" ,python-mock)
+       ("python-vcrpy" ,python-vcrpy)))
     (home-page "https://gitlab.com/mailman/postorius")
     (synopsis "Web user interface for GNU Mailman")
     (description
      "Postorius is a Django app which provides a web user interface
 to access GNU Mailman.")
-    (license (list gpl3+ lgpl3+))))
+    (license (list license:gpl3+ license:lgpl3+))))
 
 (define-public blists
   (package
@@ -2669,7 +2881,7 @@ on the fly.  Both programs are written in C and are very fast.")
 (define-public swaks
   (package
     (name "swaks")
-    (version "20181104.0")
+    (version "20190914.0")
     (source
      (origin
        (method url-fetch)
@@ -2678,7 +2890,7 @@ on the fly.  Both programs are written in C and are very fast.")
              version ".tar.gz"))
        (sha256
         (base32
-         "0n1yd27xcyb1ylp5gln3yv5gzi9r377hjy1j32367kgb3247ygq2"))))
+         "12awq5z4sdd54cxprj834zajxhkpy4jwhzf1fhigcx1zbhdaacsp"))))
     (build-system perl-build-system)
     (inputs
      `(("perl-net-dns" ,perl-net-dns)
@@ -2713,7 +2925,7 @@ unix-domain sockets, internet-domain sockets, and pipes to spawned processes.
 Options can be specified in environment variables, configuration files, and
 the command line allowing maximum configurability and ease of use for
 operators and scripters.")
-    (license gpl2+)))
+    (license license:gpl2+)))
 
 (define-public alpine
   (package
@@ -2721,7 +2933,7 @@ operators and scripters.")
     ;; Upstream doesn't use git tags, but does ‘tag’ their releases in the
     ;; commit message.  Hence the lack of GIT-VERSIONing despite using a commit
     ;; ID below.  Don't forget to update it…
-    (version "2.21.99999")
+    (version "2.22")
     (source
      (origin
        (method git-fetch)
@@ -2731,10 +2943,10 @@ operators and scripters.")
        ;; http://alpine.freeiz.com/alpine/readme/README.patches
        (uri (git-reference
              (url "http://repo.or.cz/alpine.git")
-             (commit "abeb2c25935ef8c75f1e5deef0f81276754dc975")))
+             (commit "b50297779a4becb9ceca9c6b5b375d526fe3df78")))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0rqgbw08a5lj41dkp82aq480lqkc4bnxagna7wpqffi821n8gkwz"))
+        (base32 "06js44fvdl7l33hfd4lsxpcd1cz3c0h796cswyzz0lkrzx89yl48"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -2743,7 +2955,8 @@ operators and scripters.")
            #t))))
     (build-system gnu-build-system)
     (arguments
-     `(#:make-flags (list "CC=gcc")
+     `(#:make-flags
+       (list (string-append "CC=" ,(cc-for-target)))
        #:configure-flags (list (string-append "--with-ssl-include-dir="
                                               (assoc-ref %build-inputs "openssl")
                                               "/include/openssl")
@@ -2760,6 +2973,13 @@ operators and scripters.")
                                "--with-date-stamp=Thu  1 Jan 01:00:01 CET 1970")
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'assume-shadow-passwords
+           ;; Alpine's configure script confuses ‘shadow password support’ with
+           ;; ‘/etc/shadow exists in the build environment’.  It does not.
+           (lambda _
+             (substitute* "configure"
+               (("test -f /etc/shadow") "true"))
+             #t))
          (add-after 'unpack 'make-reproducible
            (lambda _
              ;; This removes time-dependent code to make alpine reproducible.
@@ -2786,19 +3006,19 @@ tools and applications:
 @item pico, the standalone text editor, GNU nano's predecessor
 @item pilot, the standalone file system navigator
 @end enumerate\n")
-    (license asl2.0)))
+    (license license:asl2.0)))
 
 (define-public balsa
   (package
     (name "balsa")
-    (version "2.5.7")
+    (version "2.6.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://pawsa.fedorapeople.org/balsa/"
-                           name "-" version ".tar.bz2"))
+                           "balsa-" version ".tar.bz2"))
        (sha256
-        (base32 "0yfqhfpwm1qnwmbpr6dfn2f5w8a8xxq51pn8ypgg0fw973l1c1nx"))))
+        (base32 "1xkxx801p7sbfkn0bh3cz85wra4xf1z1zhjqqc80z1z1nln7fhb4"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -2816,7 +3036,7 @@ tools and applications:
      `(("cyrus-sasl" ,cyrus-sasl)
        ("enchant" ,enchant)
        ("gdk-pixbuf" ,gdk-pixbuf)
-       ("gmime" ,gmime-2.6)
+       ("gmime" ,gmime)
        ("gnutls" ,gnutls)
        ("gpgme" ,gpgme)
        ("gtk+" ,gtk+)
@@ -2824,7 +3044,9 @@ tools and applications:
        ("gtkspell3" ,gtkspell3)
        ("libcanberra" ,libcanberra)
        ("libesmtp" ,libesmtp)
+       ("libical" ,libical)
        ("libnotify" ,libnotify)
+       ("libsecret" ,libsecret)
        ("openldap" ,openldap)
        ("sqlite" ,sqlite)
        ("webkitgtk" ,webkitgtk)))
@@ -2840,7 +3062,7 @@ tools and applications:
 the GNOME desktop.  It supports both POP3 and IMAP servers as well as the
 mbox, maildir and mh local mailbox formats.  Balsa also supports SMTP and/or
 the use of a local MTA such as Sendmail.")
-    (license gpl3+)))
+    (license license:gpl3+)))
 
 (define-public afew
   (package
@@ -2865,7 +3087,7 @@ the use of a local MTA such as Sendmail.")
 provides automatic tagging each time new mail is registered with notmuch.  It
 can add tags based on email headers or Maildir folders and can handle spam and
 killed threads.")
-    (license isc)))
+    (license license:isc)))
 
 (define-public pan
   (package
@@ -2912,7 +3134,7 @@ killed threads.")
 and binaries. It supports offline reading, scoring and killfiles, yEnc, NZB,
 PGP handling, multiple servers, and secure connections.")
     ;; License of the docs: fdl-1.1; Others: gpl2.
-    (license (list fdl1.1+ gpl2))))
+    (license (list license:fdl1.1+ license:gpl2))))
 
 (define-public imapfilter
   (package
@@ -2922,7 +3144,7 @@ PGP handling, multiple servers, and secure connections.")
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/lefcha/imapfilter.git")
+             (url "https://github.com/lefcha/imapfilter")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
@@ -2952,13 +3174,13 @@ servers.  The 4rev1 and 4 versions of IMAP are supported.")
 (define-public urlscan
   (package
     (name "urlscan")
-    (version "0.9.4")
+    (version "0.9.5")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "urlscan" version))
         (sha256
-         (base32 "1q0vxv9haap01vz1cbkzss62cgwb9365lv5vnkg2gbpx4g5y7a9l"))))
+         (base32 "07vcwirap0p4dkqrqblfn1q017slgd8m6qyijvbi3gxnr09pbyx2"))))
     (build-system python-build-system)
     (propagated-inputs
      `(("python-urwid" ,python-urwid)))
@@ -2966,13 +3188,13 @@ servers.  The 4rev1 and 4 versions of IMAP are supported.")
     (synopsis "View/select the URLs in an email message or file")
     (description
      "Urlscan is a small program that is designed to integrate with the
-@code{mutt} mailreader to allow you to easily launch a Web browser for URLs
+Mutt mail reader to allow you to easily launch a Web browser for URLs
 contained in email messages.  It parses an email message or file and scans it
 for URLs and email addresses.  It then displays the URLs and their context
 within the message, and allows you to choose one or more URLs to send to your
-Web browser.  Alternatively, it send a list of all URLs to stdout.  It is a
-replacement for the @code{urlview} program.")
-    (license gpl2)))
+Web browser.  Alternatively, it send a list of all URLs to standard output.
+It is a replacement for the @command{urlview} program.")
+    (license license:gpl2)))
 
 (define-public tnef
   (package
@@ -2982,7 +3204,7 @@ replacement for the @code{urlview} program.")
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/verdammelt/tnef.git")
+             (url "https://github.com/verdammelt/tnef")
              (commit version)))
        (sha256
         (base32 "104g48mcm00bgiyzas2vf86331w7bnw7h3bc11ib4lp7rz6zqfck"))
@@ -2997,14 +3219,14 @@ replacement for the @code{urlview} program.")
     (description
      "TNEF is a tar-like program that unpacks MIME attachments of type
 @code{application/ms-tnef}.")
-    (license gpl2+)))
+    (license license:gpl2+)))
 
 (define-public mumi
-  (let ((commit "c85015dac8110bd7a4c37375b9eb05ebeadedf74")
-        (revision "15"))
+  (let ((commit "5a578328199bab51a147fbadbce12c8d06959ed6")
+        (revision "2"))
     (package
       (name "mumi")
-      (version (git-version "0.0.0" revision commit))
+      (version (git-version "0.0.1" revision commit))
       (source (origin
                 (method git-fetch)
                 (uri (git-reference
@@ -3013,7 +3235,7 @@ replacement for the @code{urlview} program.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "05nma73kqnva6ci92aq8jb3718ry5dz3sd64ibpxn5w77z5kpwr7"))))
+                  "0hngv82gd19l4q7nnbf97r120z1yagsmkp0x3lc8haza5q4mc12c"))))
       (build-system gnu-build-system)
       (arguments
        `(#:modules ((guix build gnu-build-system)
@@ -3042,18 +3264,16 @@ replacement for the @code{urlview} program.")
                      (,go ,(getenv "GUILE_LOAD_COMPILED_PATH"))))
                  #t))))))
       (inputs
-       `(("guile-debbugs" ,guile-debbugs)
-         ("guile-email" ,guile-email)
+       `(("guile-email" ,guile-email)
+         ("guile-fibers" ,guile-fibers)
          ("guile-gcrypt" ,guile-gcrypt)
          ("guile-json" ,guile-json-3)
          ("guile-redis" ,guile-redis)
-         ("guile-sqlite3" ,guile-sqlite3)
          ("guile-syntax-highlight" ,guile-syntax-highlight)
          ("guile-webutils" ,guile-webutils)
-         ("gnutls" ,gnutls)         ;needed to talk to https://debbugs.gnu.org
-         ("guile" ,guile-2.2)
-         ("mailutils" ,mailutils)
-         ("mumimu" ,mumimu)))   ;'mumimu' executable recorded in (mumi config)
+         ("guile-xapian" ,guile-xapian)
+         ("guile" ,guile-3.0)
+         ("mailutils" ,mailutils)))
       (native-inputs
        `(("autoconf" ,autoconf)
          ("automake" ,automake)
@@ -3061,7 +3281,7 @@ replacement for the @code{urlview} program.")
       (home-page "https://git.elephly.net/software/mumi.git")
       (synopsis "Debbugs web interface")
       (description "Mumi is a Debbugs web interface.")
-      (license agpl3+))))
+      (license license:agpl3+))))
 
 (define-public ytnef
   (package
@@ -3070,7 +3290,7 @@ replacement for the @code{urlview} program.")
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                    (url "https://github.com/Yeraze/ytnef.git")
+                    (url "https://github.com/Yeraze/ytnef")
                     (commit (string-append "v" version))))
               (file-name (git-file-name name version))
               (sha256
@@ -3085,90 +3305,264 @@ replacement for the @code{urlview} program.")
     (synopsis "TNEF stream reader for winmail.dat files")
     (description "This package provides a TNEF stream reader library and
 related tools to process winmail.dat files.")
-    (license gpl2+)))
+    (license license:gpl2+)))
 
 (define-public public-inbox
-  (let ((commit "05a06f3262a2ddbf46adb85169e13ce9127e4524")
-        (revision "0"))
-    (package
-     (name "public-inbox")
-     (version (git-version "1.2.0" revision commit))
-     (source
-      (origin (method git-fetch)
-              (uri (git-reference
-                    (url "https://public-inbox.org")
-                    (commit commit)))
-              (sha256
-               (base32
-                "06cclxg46gsls3x19l9s8s9x8gkjghm6gd4jb1v9ng6fds6xi2fg"))
-              (file-name (git-file-name name version))))
-     (build-system perl-build-system)
-     (arguments
-      '(#:phases
-        (modify-phases %standard-phases
-          (add-before 'configure 'qualify-paths
-            (lambda _
-              ;; Use absolute paths for 'xapian-compact'.
-              (let ((xapian-compact (which "xapian-compact")))
-                (substitute* "script/public-inbox-compact"
-                  (("xapian-compact") xapian-compact)))
-              #t))
-          (add-before 'check 'pre-check
-            (lambda _
-              (substitute* "t/spawn.t"
-                (("\\['env'\\]") (string-append "['" (which "env") "']")))
-              (substitute* "t/ds-leak.t"
-                (("/bin/sh") (which "sh")))
-              (invoke "./certs/create-certs.perl")
-              ;; XXX: This test fails due to zombie process is not reaped by
-              ;; the builder.
-              (substitute* "t/httpd-unix.t"
-                (("^SKIP: \\{") "SKIP: { skip('Guix');"))
-              #t))
-          (add-after 'install 'wrap-programs
-            (lambda* (#:key inputs outputs #:allow-other-keys)
-              (let ((out (assoc-ref outputs "out")))
-                (for-each
-                 (lambda (prog)
-                   (wrap-program prog
-                     ;; Let those scripts find their perl modules.
-                     `("PERL5LIB" ":" prefix
-                       (,(string-append out "/lib/perl5/site_perl")
-                        ,(getenv "PERL5LIB")))
-                     ;; 'git' is invoked in various files of the PublicInbox
-                     ;; perl module.
-                     `("PATH" ":" prefix
-                       (,(string-append (assoc-ref inputs "git") "/bin")))))
-                 (find-files (string-append out "/bin"))))
-              #t)))))
-     (native-inputs
-      `(("git" ,git)
-        ("xapian" ,xapian)
-        ;; For testing.
-        ("lsof" ,lsof)
-        ("openssl" ,openssl)))
-     (inputs
-      `(("perl-dbd-sqlite" ,perl-dbd-sqlite)
-        ("perl-dbi" ,perl-dbi)
-        ("perl-email-address-xs" ,perl-email-address-xs)
-        ("perl-email-mime-contenttype" ,perl-email-mime-contenttype)
-        ("perl-email-mime" ,perl-email-mime)
-        ("perl-email-simple" ,perl-email-simple)
-        ("perl-net-server" ,perl-net-server)
-        ("perl-filesys-notify-simple" ,perl-filesys-notify-simple)
-        ("perl-plack-middleware-deflater" ,perl-plack-middleware-deflater)
-        ("perl-plack-middleware-reverseproxy" ,perl-plack-middleware-reverseproxy)
-        ("perl-plack" ,perl-plack)
-        ("perl-search-xapian" ,perl-search-xapian)
-        ("perl-timedate" ,perl-timedate)
-        ("perl-uri-escape" ,perl-uri-escape)
-        ;; For testing.
-        ("perl-ipc-run" ,perl-ipc-run)
-        ("perl-xml-feed" ,perl-xml-feed)))
-     (home-page "https://public-inbox.org/README.html")
-     (synopsis "Archive mailing lists in git repositories")
-     (description
-      "public-inbox implements the sharing of an email inbox via git to
+  (package
+    (name "public-inbox")
+    (version "1.5.0")
+    (source
+     (origin (method git-fetch)
+             (uri (git-reference
+                   (url "https://public-inbox.org")
+                   (commit (string-append "v" version))))
+             (sha256
+              (base32
+               "03zj7shdl3vibs7k5lr673bwcf8j1xx8is3mjz34ca4cdh6p5j2k"))
+             (file-name (git-file-name name version))))
+    (build-system perl-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'qualify-paths
+           (lambda _
+             ;; Use absolute paths for 'xapian-compact'.
+             (let ((xapian-compact (which "xapian-compact")))
+               (substitute* "script/public-inbox-compact"
+                 (("xapian-compact") xapian-compact)))
+             #t))
+         (add-before 'check 'pre-check
+           (lambda _
+             (substitute* "t/spawn.t"
+               (("\\['env'\\]") (string-append "['" (which "env") "']")))
+             (substitute* "t/ds-leak.t"
+               (("/bin/sh") (which "sh")))
+             (invoke "./certs/create-certs.perl")
+             ;; XXX: This test fails due to zombie process is not reaped by
+             ;; the builder.
+             (substitute* "t/httpd-unix.t"
+               (("^SKIP: \\{") "SKIP: { skip('Guix');"))
+             #t))
+         (add-after 'install 'wrap-programs
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (for-each
+                (lambda (prog)
+                  (wrap-program prog
+                    ;; Let those scripts find their perl modules.
+                    `("PERL5LIB" ":" prefix
+                      (,(string-append out "/lib/perl5/site_perl")
+                       ,(getenv "PERL5LIB")))
+                    ;; 'git' is invoked in various files of the PublicInbox
+                    ;; perl module.
+                    `("PATH" ":" prefix
+                      (,(string-append (assoc-ref inputs "git") "/bin")))))
+                (find-files (string-append out "/bin"))))
+             #t)))))
+    (native-inputs
+     `(("xapian" ,xapian)
+       ;; For testing.
+       ("lsof" ,lsof)
+       ("openssl" ,openssl)))
+    (inputs
+     `(("git" ,git)
+       ("perl-dbd-sqlite" ,perl-dbd-sqlite)
+       ("perl-dbi" ,perl-dbi)
+       ("perl-email-address-xs" ,perl-email-address-xs)
+       ("perl-email-mime-contenttype" ,perl-email-mime-contenttype)
+       ("perl-email-mime" ,perl-email-mime)
+       ("perl-email-simple" ,perl-email-simple)
+       ("perl-net-server" ,perl-net-server)
+       ("perl-filesys-notify-simple" ,perl-filesys-notify-simple)
+       ("perl-plack-middleware-deflater" ,perl-plack-middleware-deflater)
+       ("perl-plack-middleware-reverseproxy" ,perl-plack-middleware-reverseproxy)
+       ("perl-plack" ,perl-plack)
+       ("perl-search-xapian" ,perl-search-xapian)
+       ("perl-timedate" ,perl-timedate)
+       ("perl-uri-escape" ,perl-uri-escape)
+       ;; For testing.
+       ("perl-ipc-run" ,perl-ipc-run)
+       ("perl-xml-feed" ,perl-xml-feed)))
+    (home-page "https://public-inbox.org/README.html")
+    (synopsis "Archive mailing lists in git repositories")
+    (description
+     "public-inbox implements the sharing of an email inbox via git to
 complement or replace traditional mailing lists.  Readers may read via NNTP,
 Atom feeds or HTML archives.")
-     (license agpl3+))))
+    (license license:agpl3+)))
+
+(define-public sylpheed
+  (package
+    (name "sylpheed")
+    (version "3.7.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://sylpheed.sraoss.jp/sylpheed/v3.7/"
+                                  name "-" version ".tar.xz"))
+              (sha256
+               (base32
+                "0j9y5vdzch251s264diw9clrn88dn20bqqkwfmis9l7m8vmwasqd"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("bogofilter" ,bogofilter)
+       ("compface" ,compface)
+       ("gnupg" ,gnupg-1)
+       ("gpgme" ,gpgme)
+       ("gtk+-2.0" ,gtk+-2)
+       ("gtkspell" ,gtkspell3)
+       ("libnsl" ,libnsl)
+       ("openldap" ,openldap)
+       ("openssl" ,openssl)))
+    (home-page "https://sylpheed.sraoss.jp/en/")
+    (synopsis "Lightweight GTK+ email client")
+    (description
+     "Sylpheed is a simple, lightweight but featureful, and easy-to-use e-mail
+client.  Sylpheed provides intuitive user-interface.  Sylpheed is also
+designed for keyboard-oriented operation.")
+    (license license:gpl2+)))
+
+(define-public python-authres
+  (package
+    (name "python-authres")
+    (version "1.2.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "authres" version))
+        (sha256
+         (base32
+          "1dr5zpqnb54h4f5ax8334l1dcp8j9083d7v4vdi1xqkwmnavklck"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           ;; Run doctests as described in the README.
+           (lambda _
+             (invoke "python" "-m" "authres" "-v"))))))
+    (home-page "https://launchpad.net/authentication-results-python")
+    (synopsis "Email Authentication Results Header Module")
+    (description
+     "This module can be used to generate and parse RFC 5451/7001/7601
+Authentication-Results headers.  It also supports Authentication Results
+extensions:
+@itemize
+@item RFC 5617 DKIM/ADSP
+@item RFC 6008 DKIM signature identification (header.b)
+@item RFC 6212 Vouch By Reference (VBR)
+@item RFC 6577 Sender Policy Framework (SPF)
+@item RFC 7281 Authentication-Results Registration for S/MIME
+@item RFC 7293 The Require-Recipient-Valid-Since Header Field
+@item RFC 7489 Domain-based Message Authentication, Reporting, and Conformance (DMARC)
+@item Authenticated Recieved Chain (ARC) (draft-ietf-dmarc-arc-protocol-08)
+@end itemize
+Note: RFC 7601 obsoletes RFC 5451, 6577, 7001, and 7410.  Authres supports the
+current standard.  No backward compatibility issues have been noted.")
+    (license license:asl2.0)))
+
+(define-public python-dkimpy
+  (package
+    (name "python-dkimpy")
+    (version "1.0.5")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "dkimpy" version))
+        (sha256
+         (base32 "088iz5cqjqh4c7141d94pvn13bh25aizqlrifwv6fs5g16zj094s"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-after 'patch-source-shebangs 'patch-more-source
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((openssl (assoc-ref inputs "openssl")))
+               (substitute* "dkim/dknewkey.py"
+                 (("/usr/bin/openssl") (string-append openssl "/bin/openssl"))))
+             #t))
+         (replace 'check
+           (lambda _
+             (invoke "python" "test.py"))))))
+    (propagated-inputs
+     `(("python-dnspython" ,python-dnspython)))
+    (native-inputs
+     `(("python-authres" ,python-authres)
+       ("python-pynacl" ,python-pynacl)))
+    (inputs
+     `(("openssl" ,openssl)))
+    (home-page "https://launchpad.net/dkimpy")
+    (synopsis "DKIM (DomainKeys Identified Mail)")
+    (description "Python module that implements @dfn{DKIM} (DomainKeys
+Identified Mail) email signing and verification (RFC6376).  It also provides
+helper scripts for command line signing and verification.  It supports DKIM
+signing/verifying of ed25519-sha256 signatures (RFC 8463).  It also supports
+the RFC 8617 Authenticated Received Chain (ARC) protocol.")
+    (license license:bsd-3)))
+
+(define-public python-authheaders
+  (package
+    (name "python-authheaders")
+    (version "0.13.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "authheaders" version))
+        (sha256
+         (base32
+          "14k6i72k5f8dyvps8vc0aq0cczc8lvqpgjfjzsy6qqychjvjcmwk"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-authres" ,python-authres)
+       ("python-dkimpy" ,python-dkimpy)
+       ("python-dnspython" ,python-dnspython)
+       ("python-publicsuffix2" ,python-publicsuffix2)))
+    (home-page "https://github.com/ValiMail/authentication-headers")
+    (synopsis "Library wrapping email authentication header verification and generation")
+    (description
+     "This is a Python library for the generation of email authentication
+headers.  The library can perform DKIM, SPF, and DMARC validation, and the
+results are packaged into the Authentication-Results header.  The library can
+DKIM and ARC sign messages and output the corresponding signature headers.")
+    ;; The package's metadata claims it were MIT licensed, but the source file
+    ;; headers disagree. MPL-2 for the public suffix list.
+    (license (list license:zpl2.1 license:zlib license:mpl2.0))))
+
+(define-public python-aiosmtpd
+  (package
+    (name "python-aiosmtpd")
+    (version "1.2.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/aio-libs/aiosmtpd")
+             (commit version)))
+       (sha256
+        (base32 "14c30dm6jzxiblnsah53fdv68vqhxwvb9x0aq9bc4vcdas747vr7"))
+       (file-name (git-file-name name version))))
+    (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'delete-failing-tests
+           (lambda _
+             ;; This test uses an expired certificate.
+             (delete-file "aiosmtpd/tests/test_smtps.py")
+             #t))
+         (replace 'check
+           (lambda _
+             (invoke "python" "-m" "nose2" "-v"))))))
+    (native-inputs
+     `(("python-flufl-testing" ,python-flufl-testing)
+       ("python-nose2" ,python-nose2)))
+    (propagated-inputs
+     `(("python-atpublic" ,python-atpublic)))
+    (home-page "https://aiosmtpd.readthedocs.io/")
+    (synopsis "Asyncio based SMTP server")
+    (description
+     "This project is a reimplementation of the Python stdlib @code{smtpd.py}
+based on asyncio.")
+    (license (list license:asl2.0
+                   license:lgpl3))))    ; only for setup_helpers.py