gnu: Add mhonarc.
[jackhill/guix/guix.git] / gnu / packages / mail.scm
index 89bcef7..90c2da4 100644 (file)
@@ -1,14 +1,23 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014 Ian Denhardt <ian@zenhack.net>
 ;;; Copyright © 2014 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2014 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
 ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
-;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org>
+;;; Copyright © 2015, 2016 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2015 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2016 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016 Christopher Allan Webber <cwebber@dustycloud.org>
+;;; Copyright © 2016 Al McElrath <hello@yrns.org>
+;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
+;;; Copyright © 2016 Lukas Gradl <lgradl@openmailbox.org>
+;;; Copyright © 2016 Alex Kost <alezost@gmail.com>
+;;; Copyright © 2016 Troy Sankey <sankeytms@gmail.com>
+;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is>
+;;; Copyright © 2016 Clément Lassieur <clement@lassieur.org>
+;;; Copyright © 2016 Arun Isaac <arunisaac@systemreboot.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
   #:use-module (gnu packages gdb)
   #:use-module (gnu packages samba)
   #:use-module (gnu packages tls)
+  #:use-module (gnu packages networking)
+  #:use-module (gnu packages web)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
   #:use-module ((guix licenses)
-                #:select (gpl2 gpl2+ gpl3+ lgpl2.1 lgpl2.1+ lgpl3+ non-copyleft
-                          (expat . license:expat)))
+                #:select (gpl2 gpl2+ gpl3 gpl3+ lgpl2.1 lgpl2.1+ lgpl3+
+                           non-copyleft (expat . license:expat) bsd-3
+                           public-domain))
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix utils)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system perl)
-  #:use-module (guix build-system python))
+  #:use-module (guix build-system python)
+  #:use-module (guix build-system trivial))
 
 (define-public mailutils
   (package
              (sha256
               (base32
                "0szbqa12zqzldqyw97lxqax3ja2adis83i7brdfsxmrfw68iaf65"))
-             (patches (list (search-patch "m4-gets-undeclared.patch")))))
+             (patches (search-patches "m4-gets-undeclared.patch"))))
     (build-system gnu-build-system)
     (arguments
      '(;; TODO: Add `--with-sql'.
@@ -173,18 +186,19 @@ aliasing facilities to work just as they would on normal mail.")
 (define-public mutt
   (package
     (name "mutt")
-    (version "1.5.24")
+    (version "1.7.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "ftp://ftp.mutt.org/pub/mutt/mutt-"
                                  version ".tar.gz"))
              (sha256
               (base32
-               "0012njrgxf1barjksqkx7ccid2l0xyikhna9mjs9vcfpbrvcm4m2"))
-             (patches (list (search-patch "mutt-store-references.patch")))))
+               "0idkamdiwj9fgqaz1vzkfg78cnmkzp74skv0ibw2xjfq6ds9hghx"))
+             (patches (search-patches "mutt-store-references.patch"))))
     (build-system gnu-build-system)
     (inputs
      `(("cyrus-sasl" ,cyrus-sasl)
+       ("gdbm" ,gdbm)
        ("gpgme" ,gpgme)
        ("ncurses" ,ncurses)
        ("openssl" ,openssl)
@@ -194,6 +208,8 @@ aliasing facilities to work just as they would on normal mail.")
                            "--enable-imap"
                            "--enable-pop"
                            "--enable-gpgme"
+                           "--enable-hcache" ; for header caching
+                           "--enable-sidebar"
                            "--with-ssl"
                            "--with-sasl"
                            ;; so that mutt does not check whether the path
@@ -232,14 +248,14 @@ operating systems.")
           'unpack 'patch-paths-in-tests
           (lambda _
             ;; The test programs run several programs using 'system' with
-            ;; hard-coded paths.  Here we patch them all.  We also change "gpg"
-            ;; to "gpg2".  We use ISO-8859-1 here because test-iconv.c contains
+            ;; hard-coded paths.  Here we patch them all.
+            ;; We use ISO-8859-1 here because test-iconv.c contains
             ;; raw byte sequences in several different encodings.
             (with-fluids ((%default-port-encoding #f))
               (substitute* (find-files "tests" "\\.c$")
                 (("(system *\\(\")(/[^ ]*)" all pre prog-path)
                  (let* ((base (basename prog-path))
-                        (prog (which (if (string=? base "gpg") "gpg2" base))))
+                        (prog (which base)))
                    (string-append pre
                                   (or prog (error "not found: " base))))))))))))
     (home-page "http://spruce.sourceforge.net/gmime/")
@@ -285,7 +301,7 @@ and corrections.  It is based on a Bayesian filter.")
 (define-public offlineimap
   (package
     (name "offlineimap")
-    (version "6.6.0")
+    (version "7.0.6")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/OfflineIMAP/offlineimap/"
@@ -293,35 +309,36 @@ and corrections.  It is based on a Bayesian filter.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1x33zxjm3y2p54lbcsgflrs6v2zq785y2k0xi6xia6akrvjmh4n4"))))
+                "1msg0v5i3v4mvjm2c5alzz91dk5y20h4xdr60lcz3507fv80407m"))))
     (build-system python-build-system)
-    (native-inputs `(("python" ,python-2)))
+    (inputs `(("python2-pysqlite" ,python2-pysqlite)
+              ("python2-six" ,python2-six)))
     (arguments
      ;; The setup.py script expects python-2.
      `(#:python ,python-2
       ;; Tests require a modifiable IMAP account.
-       #:tests? #f))
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'wrap-binary
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin/offlineimap")))
+               (wrap-program bin
+                 `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH"))))
+               #t))))))
     (home-page "http://www.offlineimap.org")
-    (synopsis "Synch emails between two repositories")
+    (synopsis "Sync emails between two repositories")
     (description
      "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+)))
 
-(define %mu-gtester-patch
-  ;; Ensure tests have unique names, to placate GLib 2.6's gtester.
-  (origin
-    (method url-fetch)
-    (uri "https://github.com/djcb/mu/commit/b44039ed.patch")
-    (sha256
-     (base32
-      "165hryqqhx3wah8a4f5jaq465azx1pm9r4jid7880pys9gd88qlv"))))
-
 (define-public mu
   (package
     (name "mu")
-    (version "0.9.13")
+    (version "0.9.16")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/djcb/mu/archive/v"
@@ -329,37 +346,57 @@ repository and Maildir/IMAP as LOCAL repository.")
               (file-name (string-append "mu-" version ".tar.gz"))
               (sha256
                (base32
-                "0wj33pma8xgjvn2akk7khzbycwn4c9sshxvzdph9dnpy7gyqxj51"))
-              (patches (list %mu-gtester-patch))))
+                "0p7hqri1r1x6750x138cc29mh81kdav2dcim26y58s8an206h25g"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("glib" ,glib "bin")             ; for gtester
        ("autoconf" ,autoconf)
        ("automake" ,automake)
+       ("emacs" ,emacs-minimal)
        ("libtool" ,libtool)
        ("texinfo" ,texinfo)))
     ;; TODO: Add webkit and gtk to build the mug GUI.
     (inputs
      `(("xapian" ,xapian)
-       ("emacs" ,emacs-no-x)
        ("guile" ,guile-2.0)
        ("glib" ,glib)
        ("gmime" ,gmime)
        ("tzdata" ,tzdata)))             ;for mu/test/test-mu-query.c
     (arguments
-     '(#:phases (alist-cons-after
-                 'unpack 'autoreconf
-                 (lambda _
-                   (zero? (system* "autoreconf" "-vi")))
-                 (alist-cons-before
-                   'check 'check-tz-setup
-                   (lambda* (#:key inputs #:allow-other-keys)
-                     ;; For mu/test/test-mu-query.c
-                     (setenv "TZDIR"
-                             (string-append (assoc-ref inputs "tzdata")
-                                            "/share/zoneinfo")))
-                   %standard-phases))))
+     `(#:modules ((guix build gnu-build-system)
+                  (guix build utils)
+                  (guix build emacs-utils))
+       #:imported-modules (,@%gnu-build-system-modules
+                           (guix build emacs-utils))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-configure.ac
+           ;; By default, elisp code goes to "share/emacs/site-lisp/mu4e",
+           ;; so our Emacs package can't find it.  Setting "--with-lispdir"
+           ;; configure flag doesn't help because "mu4e" will be added to
+           ;; the lispdir anyway, so we have to modify "configure.ac".
+           (lambda _
+             (substitute* "configure.ac"
+               (("^ +lispdir=.*") ""))
+             #t))
+         (add-after 'patch-configure.ac 'autoreconf
+           (lambda _
+             (zero? (system* "autoreconf" "-vi"))))
+         (add-before 'check 'check-tz-setup
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; For mu/test/test-mu-query.c
+             (setenv "TZDIR"
+                     (string-append (assoc-ref inputs "tzdata")
+                                    "/share/zoneinfo"))
+             #t))
+         (add-after 'install 'install-emacs-autoloads
+           (lambda* (#:key outputs #:allow-other-keys)
+             (emacs-generate-autoloads
+              "mu4e"
+              (string-append (assoc-ref outputs "out")
+                             "/share/emacs/site-lisp"))
+             #t)))))
     (home-page "http://www.djcbsoftware.nl/code/mu/")
     (synopsis "Quickly find emails")
     (description
@@ -369,20 +406,57 @@ messages you need; in addition, it allows you to view messages, extract
 attachments, create new maildirs, and so on.")
     (license gpl3+)))
 
+(define-public alot
+  (package
+    (name "alot")
+    (version "0.3.7")
+    (source (origin
+              (method url-fetch)
+              ;; package author intends on distributing via github rather
+              ;; than pypi:
+              ;; https://github.com/pazz/alot/issues/877#issuecomment-230173331
+              (uri (string-append "https://github.com/pazz/alot/archive/"
+                                  version ".tar.gz"))
+              (file-name (string-append "alot-" version ".tar.gz"))
+              (sha256
+               (base32
+                "09md9llg38r6xby8l0y0zf8nhlh91cr4xs0r15b294hhp8hl2bgx"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f ; no tests
+       ;; python 3 is unsupported, more info:
+       ;; https://github.com/pazz/alot/blob/0.3.7/docs/source/faq.rst
+       #:python ,python-2))
+    (inputs
+     `(("python2-magic" ,python2-magic)
+       ("python2-configobj" ,python2-configobj)
+       ("python2-twisted" ,python2-twisted)
+       ("python2-urwid" ,python2-urwid)
+       ("python2-urwidtrees" ,python2-urwidtrees)
+       ("python2-pygpgme" ,python2-pygpgme)
+       ("python2-notmuch" ,python2-notmuch)))
+    (home-page "https://github.com/pazz/alot")
+    (synopsis "Commandline MUA using notmuch")
+    (description
+     "Alot is an experimental terminal mail user agent (MUA) based on
+@code{notmuch} mail.  It is written in Python using the @code{urwid} toolkit.")
+    (license gpl3+)))
+
 (define-public notmuch
   (package
     (name "notmuch")
-    (version "0.20.2")
+    (version "0.22.1")
     (source (origin
               (method url-fetch)
-              (uri (string-append "http://notmuchmail.org/releases/notmuch-"
+              (uri (string-append "https://notmuchmail.org/releases/notmuch-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1v5dcnlg4km5hfaq0i0qywq5fn66fi0rq4aaibyqkwxz8mis4hgp"))))
+                "0jwpda3q023dn3sp41n8648951i7iagfv8zzpriv7hpkjivlafg7"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:tests? #f ;; FIXME: 637 tests; 70 fail and 98 are skipped
+     '(#:tests? #f ; FIXME: 694 tests; 170 fail and 100 are skipped
+                   ; with perl input: 50 fail and 100 are skipped
        #:phases (modify-phases %standard-phases
                   (replace 'configure
                     (lambda* (#:key outputs #:allow-other-keys)
@@ -393,14 +467,14 @@ attachments, create new maildirs, and so on.")
                         (zero? (system* "./configure"
                                         (string-append "--prefix=" out)))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
+     `(("bash-completion" ,bash-completion)
+       ("emacs" ,emacs-minimal)
+       ("pkg-config" ,pkg-config)
        ("python" ,python-2)
        ("python-docutils" ,python2-docutils)
-       ("python-sphinx" ,python2-sphinx)
-       ("bash-completion" ,bash-completion)))
+       ("python-sphinx" ,python2-sphinx)))
     (inputs
-     `(("emacs" ,emacs)
-       ("glib" ,glib)
+     `(("glib" ,glib)
        ("gmime" ,gmime)
        ("talloc" ,talloc)
        ("xapian" ,xapian)
@@ -412,33 +486,72 @@ attachments, create new maildirs, and so on.")
 ing, and tagging large collections of email messages.")
     (license gpl3+)))
 
-(define-public python2-notmuch
+(define-public notmuch-addrlookup-c
   (package
-    (name "python2-notmuch")
-    (version "0.15.2")
+    (name "notmuch-addrlookup-c")
+    (version "7")
     (source (origin
               (method url-fetch)
               (uri (string-append
-                    "https://pypi.python.org/packages/source/n/notmuch/notmuch-"
-                    version
-                    ".tar.gz"))
+                    "https://github.com/aperezdc/" name "/archive/v"
+                    version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "18g8701ibr153ngsz258kgcd42wqnbf9ifpqig1bijy6b0zx9xn5"))))
+                "0rslg2ifgyhl6asv3yr1f62m9xjfcinv7i6qb07h2k217jqlmrri"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:tests? #f ; no tests
+       #:make-flags (list "CC=gcc"
+                          (string-append "PREFIX="
+                                         (assoc-ref %outputs "out")))
+       #:phases (modify-phases %standard-phases
+                  (delete 'configure)
+                  ;; Remove vim code completion config, it's not needed to
+                  ;; build (or be patched).
+                  (add-before 'patch-source-shebangs 'delete-ycm-file
+                              (lambda _ (delete-file ".ycm_extra_conf.py")))
+                  (replace 'install
+                           (lambda* (#:key outputs #:allow-other-keys)
+                             (let ((bin (string-append
+                                         (assoc-ref outputs "out") "/bin")))
+                               (install-file "notmuch-addrlookup" bin)))))))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("glib" ,glib)
+       ("notmuch" ,notmuch)))
+    (home-page "https://github.com/aperezdc/notmuch-addrlookup-c")
+    (synopsis "Address lookup tool for Notmuch")
+    (description "This is an address lookup tool using a Notmuch database,
+useful for email address completion.")
+    (license license:expat)))
+
+(define-public python-notmuch
+  (package
+    (name "python-notmuch")
+    (version "0.22.1")
+    ;; Notmuch python bindings are now unavailable on pypi.  The
+    ;; bindings are distributed via the notmuch release tarball.
+    (source (package-source notmuch))
     (build-system python-build-system)
     (inputs `(("notmuch" ,notmuch)))
     (arguments
-     `(#:python ,python-2
-       #:phases (modify-phases %standard-phases
-                  (add-before
-                   'build 'set-libnotmuch-file-name
-                   (lambda* (#:key inputs #:allow-other-keys)
-                     (let ((notmuch (assoc-ref inputs "notmuch")))
-                       (substitute* "notmuch/globals.py"
-                         (("libnotmuch\\.so\\.[0-9]")
-                          (string-append notmuch "/lib/libnotmuch.so.4")))
-                       #t))))
-       #:tests? #f))                              ;no "test" target
+     `(#:tests? #f  ; no "test" target
+       #:phases
+       (modify-phases %standard-phases
+         ;; This python package lives in a subdirectory of the notmuch source
+         ;; tree, so chdir into it before building.
+         (add-after 'unpack 'enter-python-dir
+           (lambda _ (chdir "bindings/python") #t))
+         ;; Make sure the correct notmuch shared library gets loaded.
+         (add-before 'build 'set-libnotmuch-file-name
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((notmuch (assoc-ref inputs "notmuch")))
+               (substitute* "notmuch/globals.py"
+                 (("libnotmuch\\.so\\.")
+                  (string-append notmuch "/lib/libnotmuch.so.")))
+               #t))))))
     (home-page "http://notmuchmail.org/")
     (synopsis "Python bindings of the Notmuch mail indexing library")
     (description
@@ -446,10 +559,13 @@ ing, and tagging large collections of email messages.")
 and search library.")
     (license gpl3+)))
 
+(define-public python2-notmuch
+  (package-with-python2 python-notmuch))
+
 (define-public getmail
   (package
     (name "getmail")
-    (version "4.46.0")
+    (version "4.49.0")
     (source
      (origin
        (method url-fetch)
@@ -457,7 +573,7 @@ and search library.")
                            name "-" version ".tar.gz"))
        (sha256
         (base32
-         "15rqmm25pq6ll8aaqh8h6pfdkpqs7y6yismb3h3w1bz8j292c8zl"))))
+         "1m0yzxd05fklwbmjj1n2q4sx397c1j5qi9a0r5fv3h8pplz4lv0w"))))
     (build-system python-build-system)
     (arguments
      `(#:tests? #f ; no tests
@@ -476,14 +592,14 @@ useful features.")
 (define-public libetpan
   (package
     (name "libetpan")
-    (version "1.6")
+    (version "1.7.2")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://github.com/dinhviethoa/" name
                    "/archive/" version ".tar.gz"))
              (file-name (string-append name "-" version ".tar.gz"))
              (sha256
-               (base32 "05qyqx2c1ppb1jnrs3m52i60f9xlxfxdmb9dnwg4vqjv8kwv2qkr"))))
+               (base32 "081ixgj3skglq9i7v0jb835lmfx21zi4i5b7997igwr0lj174y9j"))))
     (build-system gnu-build-system)
     (native-inputs `(("autoconf" ,(autoconf-wrapper))
                      ("automake" ,automake)
@@ -496,14 +612,15 @@ useful features.")
        ("openssl" ,openssl)))
     (inputs
      `(("curl" ,curl)
-       ("expat" ,expat)))
+       ("expat" ,expat)
+       ("zlib" ,zlib)))
     (arguments
-      '(#:phases (alist-cons-after
-                  'unpack 'autogen
-                  (lambda _
-                    (setenv "NOCONFIGURE" "true")
-                    (zero? (system* "sh" "autogen.sh")))
-                  %standard-phases)
+      '(#:phases
+        (modify-phases %standard-phases
+          (add-after 'unpack 'autogen
+            (lambda _
+              (setenv "NOCONFIGURE" "true")
+              (zero? (system* "sh" "autogen.sh")))))
         #:configure-flags
         '("--disable-static" "--disable-db")))
     (home-page "http://www.etpan.org/libetpan.html")
@@ -518,7 +635,7 @@ MailCore 2.")
 (define-public claws-mail
   (package
     (name "claws-mail")
-    (version "3.13.1")
+    (version "3.14.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -526,7 +643,7 @@ MailCore 2.")
                     ".tar.xz"))
               (sha256
                (base32
-                "049av7r0xhjjjm1p93l2ns3xisvn125v3ncqar23cqjzgcichg5d"))))
+                "0nfchgga3ir91s8rky0a0vnz8cgj2f6h716wh3cmb466a01xfss6"))))
     (build-system gnu-build-system)
     (native-inputs `(("pkg-config" ,pkg-config)))
     (inputs `(("bogofilter" ,bogofilter)
@@ -547,10 +664,18 @@ MailCore 2.")
               ("libsm" ,libsm)
               ("libxml2" ,libxml2)
               ("perl" ,perl)
-              ("python-2" ,python-2)))
+              ("python-2" ,python-2)
+              ("mime-info" ,shared-mime-info)))
     (arguments
       '(#:configure-flags
-        '("--enable-gnutls" "--enable-pgpmime-plugin" "--enable-enchant")))
+        '("--enable-gnutls" "--enable-pgpmime-plugin" "--enable-enchant")
+        #:phases (modify-phases %standard-phases
+                   (add-before 'build 'patch-mime
+                     (lambda* (#:key inputs #:allow-other-keys)
+                       (substitute* "src/procmime.c"
+                         (("/usr/share/mime/globs")
+                          (string-append (assoc-ref inputs "mime-info")
+                                         "/share/mime/globs"))))))))
     (synopsis "GTK-based Email client")
     (description
      "Claws-Mail is an email client (and news reader) based on GTK+.  The
@@ -564,14 +689,15 @@ which can add many functionalities to the base client.")
 (define-public msmtp
   (package
     (name "msmtp")
-    (version "1.6.3")
+    (version "1.6.5")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "mirror://sourceforge/msmtp/msmtp-" version ".tar.xz"))
-       (sha256 (base32
-                "0mbkflxv2swjz4185inis83v6pxcblpmapwjhgpc6wh7kh3bx0pr"))))
+       (uri (string-append "mirror://sourceforge/msmtp/msmtp/" version
+                           "/msmtp-" version ".tar.xz"))
+       (sha256
+        (base32
+         "01jh9ba49bih8zsh40myw6qq1ll210q1vw0jg865vrn7jc3dd83n"))))
     (build-system gnu-build-system)
     (inputs
      `(("libidn" ,libidn)
@@ -585,7 +711,19 @@ which can add many functionalities to the base client.")
     (arguments
      `(#:configure-flags (list "--with-libgsasl"
                                "--with-libidn"
-                               "--with-tls=gnutls")))
+                               "--with-tls=gnutls")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'install-msmtpq
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin"))
+                    (doc (string-append out "/share/doc/msmtp"))
+                    (msmtpq (string-append "scripts/msmtpq")))
+               (install-file (string-append msmtpq "/msmtpq") bin)
+               (install-file (string-append msmtpq "/msmtp-queue") bin)
+               (install-file (string-append msmtpq "/README.msmtpq") doc)
+               #t))))))
     (synopsis
      "Simple and easy to use SMTP client with decent sendmail compatibility")
     (description
@@ -597,14 +735,17 @@ delivery.")
 (define-public exim
   (package
     (name "exim")
-    (version "4.85")
+    (version "4.87")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "ftp://ftp.exim.org/pub/exim/exim4/exim-" version ".tar.bz2"))
+       (uri (list (string-append "ftp://ftp.exim.org/pub/exim/exim4/exim-"
+                                 version ".tar.bz2")
+                  (string-append "ftp://ftp.exim.org/pub/exim/exim4/old/exim-"
+                                 version ".tar.bz2")))
        (sha256
-        (base32 "195a3ll5ck9viazf9pvgcyc0sziln5g0ggmlm6ax002lphmiy88k"))))
+        (base32
+         "1jbxn13shq90kpn0s73qpjnx5xm8jrpwhcwwgqw5s6sdzw6iwsbl"))))
     (build-system gnu-build-system)
     (inputs
      `(("bdb" ,bdb)
@@ -612,12 +753,12 @@ delivery.")
        ("gzip" ,gzip)
        ("bzip2" ,bzip2)
        ("xz" ,xz)
-       ("pcre" ,pcre)
        ("perl" ,perl)
        ("libxt" ,libxt)
        ("libxaw" ,libxaw)))
     (native-inputs
-     `(("perl" ,perl)))
+     `(("pcre" ,pcre "bin")
+       ("perl" ,perl)))
     (arguments
      '(#:phases
        (alist-replace
@@ -682,7 +823,7 @@ facilities for checking incoming mail.")
 (define-public dovecot
   (package
     (name "dovecot")
-    (version "2.2.19")
+    (version "2.2.25")
     (source
      (origin
        (method url-fetch)
@@ -690,7 +831,7 @@ facilities for checking incoming mail.")
                            (version-major+minor version) "/"
                            name "-" version ".tar.gz"))
        (sha256 (base32
-                "17sf5aancad4pg1vx1606k99389wg76blpqzmnmxlz4hklzix7km"))))
+                "0rwn5wc5b8j9fzqcjggdgpzmb77myrf4ra294z1gg5v3hhng7nfq"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
@@ -726,14 +867,14 @@ It supports mbox/Maildir and its own dbox/mdbox formats.")
 (define-public isync
   (package
     (name "isync")
-    (version "1.1.2")
+    (version "1.2.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://sourceforge/isync/isync/"
                            version "/isync-" version ".tar.gz"))
        (sha256 (base32
-                "1960ah3fmp75cakd06lcx50n5q0yvfsadjh3lffhyvjvj7ava9d2"))))
+                "1bij6nm06ghkg98n2pdyacam2fyg5y8f7ajw0d5653m0r4ldw5p7"))))
     (build-system gnu-build-system)
     (inputs
      `(("bdb" ,bdb)
@@ -760,6 +901,7 @@ mailboxes.  Currently Maildir and IMAP are supported types.")
     (build-system perl-build-system)
     (propagated-inputs
      `(("perl-email-simple" ,perl-email-simple)
+       ("perl-module-pluggable" ,perl-module-pluggable)
        ("perl-mro-compat" ,perl-mro-compat)))
     (home-page "http://search.cpan.org/dist/Email-Abstract")
     (synopsis "Interface to mail representations")
@@ -1009,4 +1151,262 @@ compatibility shims for the @command{sendmail}, @command{mailq}, and
 @command{newaliases} commands.")
     (license gpl2+)))
 
-;;; mail.scm ends here
+(define-public fdm
+  (package
+    (name "fdm")
+    (version "1.9")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append "https://github.com/nicm/fdm/releases/download/"
+                                 version "/fdm-"
+                                 version ".tar.gz"))
+             (file-name (string-append name "-" version ".tar.gz"))
+             (sha256
+               (base32 "054rscijahiza5f9qha79rg3siji3bk5mk10f8c2vqx7m4w6qh8n"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("tdb" ,tdb)
+       ("openssl" ,openssl)
+       ("zlib" ,zlib)))
+    (home-page "https://github.com/nicm/fdm")
+    (synopsis "Mail Retrieval Agent (MRA) and Mail Delivery Agent (MDA)")
+    (description "fdm is a program designed to fetch mail from POP3
+or IMAP servers, or receive local mail from stdin, and
+deliver it in various ways.")
+    (license
+     ;; 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"))))
+
+
+(define-public procmail
+  (package
+    (name "procmail")
+    (version "3.22")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "ftp://ftp.fu-berlin.de/pub/unix/mail/procmail/procmail-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32
+         "05z1c803n5cppkcq99vkyd5myff904lf9sdgynfqngfk9nrpaz08"))
+       ;; The following patch fixes an ambiguous definition of
+       ;; getline() in formail.c.  The patch is provided by Debian as
+       ;; patch 24.
+       (patches (search-patches "procmail-ambiguous-getline-debian.patch"
+                                "procmail-CVE-2014-3618.patch"))))
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (replace 'configure
+                    (lambda _
+                      (substitute* "Makefile"
+                        (("/bin/sh")
+                         (which "sh"))
+                        (("/usr")
+                         (assoc-ref %outputs "out"))
+                        (("/bin/rm")
+                         (which "rm")))
+                      #t)))
+       #:tests? #f)) ;; There are no tests indicating a successful
+    ;; build.  Some tests of basic locking mechanisms provided by the
+    ;; filesystem are performed during 'make install'.  However, these
+    ;; are performed before the actual build process.
+    (build-system gnu-build-system)
+    (inputs `(("exim" ,exim)))
+    (home-page "http://www.procmail.org/")
+    (synopsis "Versatile mail delivery agent (MDA)")
+    (description "Procmail is a mail delivery agent (MDA) featuring support
+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.
+
+(define-public khard
+  (package
+    (name "khard")
+    (version "0.9.0")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri name version))
+              (sha256
+               (base32
+                "0y83rji4f270hbb41m4jpr0z3yzvpvbsl32mpg9d38hlydw8fk1s"))))
+    (build-system python-build-system)
+    (arguments
+      `(#:python ,python-2 ; only python-2 is supported.
+        #:phases
+        (modify-phases %standard-phases
+          (add-before 'build 'disable-egg-compression
+            ;; Do not compress the egg.
+            (lambda _
+              (let ((port (open-file "setup.cfg" "a")))
+                (display "\n[easy_install]\nzip_ok = 0\n"
+                         port)
+                (close-port port)
+                #t)))
+          (add-after 'install 'install-doc
+            (lambda* (#:key outputs #:allow-other-keys)
+              (let* ((out (assoc-ref outputs "out"))
+                     (doc (string-append out "/share/doc/khard")))
+                (copy-recursively "misc/khard" doc)))))))
+    (native-inputs
+     `(("python2-setuptools" ,python2-setuptools)))
+    (propagated-inputs
+     `(("python2-vobject" ,python2-vobject)
+       ("python2-pyyaml" ,python2-pyyaml)
+       ("python2-atomicwrites" ,python2-atomicwrites)
+       ("python2-configobj" ,python2-configobj)))
+    (synopsis "Console address book using CardDAV")
+    (description "Khard is an address book for the console.  It creates, reads,
+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+)))
+
+(define-public perl-mail-spf
+ (package
+  (name "perl-mail-spf")
+  (version "v2.9.0")
+  (source
+    (origin
+      (method url-fetch)
+      (uri (string-append
+             "mirror://cpan/authors/id/J/JM/JMEHNLE/mail-spf/Mail-SPF-"
+             version
+             ".tar.gz"))
+      (sha256
+        (base32
+          "0qk1rfgfm5drj4iyniiabrasrpqv570vzhgz66lwgb67y4amkjv1"))))
+  (build-system perl-build-system)
+  (native-inputs
+    `(("perl-module-build" ,perl-module-build)
+      ("perl-net-dns-resolver-programmable"
+       ,perl-net-dns-resolver-programmable)))
+  (arguments
+   `(#:phases (modify-phases %standard-phases
+       (add-before 'configure 'modify-Build.PL
+         (lambda* (#:key outputs #:allow-other-keys)
+           (substitute* "Build.PL"
+             (("'/usr/sbin'") (string-append "'"
+                                             (assoc-ref outputs "out")
+                                             "/sbin'")))
+             #t)))))
+  (inputs
+    `(("perl-error" ,perl-error)
+      ("perl-net-dns" ,perl-net-dns)
+      ("perl-netaddr-ip" ,perl-netaddr-ip)
+      ("perl-uri" ,perl-uri)))
+  (home-page
+    "http://search.cpan.org/dist/Mail-SPF")
+  (synopsis
+    "Perl implementation of Sender Policy Framework")
+  (description "Mail::SPF is the Sender Policy Framework implemented
+in Perl.")
+  (license bsd-3)))
+
+(define-public mb2md
+  (package
+    (name "mb2md")
+    (version "3.20")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "http://batleth.sapienti-sat.org/projects/mb2md/mb2md-"
+                    version ".pl.gz"))
+              (sha256
+               (base32
+                "0bvkky3c90738h3skd2f1b2yy5xzhl25cbh9w2dy97rs86ssjidg"))))
+    (build-system trivial-build-system)
+    (arguments
+     '(#:modules ((guix build utils))
+       #:builder
+       (begin
+         (use-modules (guix build utils))
+         (let* ((source (assoc-ref %build-inputs "source"))
+                (out (assoc-ref %outputs "out"))
+                (bin (string-append out "/bin"))
+                (perl (assoc-ref %build-inputs "perl"))
+                (gzip (assoc-ref %build-inputs "gzip"))
+                (perl-timedate (assoc-ref %build-inputs "perl-timedate"))
+                (perl5lib (string-append perl-timedate "/lib/perl5/site_perl")))
+           (mkdir-p bin)
+           (with-directory-excursion bin
+             (copy-file source "mb2md.gz")
+             (system* (string-append gzip "/bin/gzip") "-d" "mb2md.gz")
+             (substitute* "mb2md"
+               (("#!/usr/bin/perl")
+                (string-append "#!/usr/bin/perl -I " perl5lib)))
+             (patch-shebang "mb2md" (list (string-append perl "/bin")))
+             (chmod "mb2md" #o555))
+           #t))))
+    (native-inputs `(("gzip", gzip)))
+    (inputs `(("perl" ,perl)
+              ("perl-timedate" ,perl-timedate)))
+    (home-page "http://batleth.sapienti-sat.org/projects/mb2md/")
+    (synopsis "Mbox to maildir converter")
+    (description
+     "Mb2md is a Perl script that takes one or more mbox format files and
+converts them to maildir format directories.")
+    (license public-domain)))
+
+(define-public mpop
+  (package
+    (name "mpop")
+    (version "1.2.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "http://downloads.sourceforge.net/mpop/mpop-"
+                           version ".tar.xz"))
+       (sha256
+        (base32
+         "0n0ij258kn8lfa6nyr6l6plc4hf1wvyf1hkwicvdbjqdqrgjnq81"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("gnutls" ,gnutls)
+       ("libidn" ,libidn)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (arguments
+     `(#:configure-flags (list "--with-tls=gnutls")))
+    (home-page "http://mpop.sourceforge.net/")
+    (synopsis "POP3 mail client")
+    (description "mpop is a small and fast POP3 client suitable as a
+fetchmail replacement.
+
+mpop supports multiple accounts, header based mail filtering, delivery
+to mbox files, maildir folders or a Mail Delivery Agent (MDA),
+TLS/SSL, several authentication methods, Internationalized Domain
+Names (IDN) and SOCKS proxies.")
+    (license gpl3+)))
+
+(define-public mhonarc
+  (package
+    (name "mhonarc")
+    (version "2.6.19")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://cpan/authors/id/E/EH/EHOOD/MHonArc-"
+                           version ".tar.gz"))
+       (sha256
+        (base32
+         "0ll3v93yji334zqp6xfzfxc0127pmjcznmai1l5q6dzawrs2igzq"))))
+    (build-system perl-build-system)
+    (home-page "https://www.mhonarc.org/")
+    (synopsis "Create HTML archives of mail/news messages")
+    (description
+     "MHonArc is a Perl mail-to-HTML converter.  MHonArc
+provides HTML mail archiving with index, mail thread linking,
+etc; plus other capabilities including support for MIME and
+powerful user customization features.")
+    (license gpl2+)))