gnu: offlineimap: Add sqlite support.
[jackhill/guix/guix.git] / gnu / packages / mail.scm
index 752f0a9..e5eefc7 100644 (file)
@@ -6,6 +6,13 @@
 ;;; 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 Andreas Enge <andreas@enge.fr>
+;;; 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>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
   #:use-module (gnu packages backup)
+  #:use-module (gnu packages bash)
+  #:use-module (gnu packages bison)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages cyrus-sasl)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages dejagnu)
   #:use-module (gnu packages emacs)
   #:use-module (gnu packages enchant)
-  #:use-module (gnu packages gdbm)
   #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gnupg)
-  #:use-module (gnu packages gnutls)
   #:use-module (gnu packages gsasl)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages guile)
+  #:use-module (gnu packages flex)
   #:use-module (gnu packages libcanberra)
   #:use-module (gnu packages libidn)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages m4)
-  #:use-module (gnu packages databases)
   #:use-module (gnu packages ncurses)
-  #:use-module (gnu packages openssl)
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages python)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages gdb)
   #:use-module (gnu packages samba)
+  #:use-module (gnu packages tls)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
   #:use-module ((guix licenses)
-                #:select (gpl2 gpl2+ gpl3+ lgpl2.1+ lgpl3+ non-copyleft))
+                #:select (gpl2 gpl2+ gpl3 gpl3+ lgpl2.1 lgpl2.1+ lgpl3+
+                           non-copyleft (expat . license:expat)))
   #: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))
 
 (define-public mailutils
@@ -167,22 +177,19 @@ aliasing facilities to work just as they would on normal mail.")
 (define-public mutt
   (package
     (name "mutt")
-    (version "1.5.23")
+    (version "1.6.0")
     (source (origin
              (method url-fetch)
-             (uri (list ;; Temporarily put bitbucket first, because
-                        ;; ftp.mutt.org has been down for a while.
-                        (string-append "https://bitbucket.org/mutt/mutt/downloads/mutt-"
-                                       version ".tar.gz")
-                        (string-append "ftp://ftp.mutt.org/mutt/devel/mutt-"
-                                       version ".tar.gz")))
+             (uri (string-append "ftp://ftp.mutt.org/pub/mutt/mutt-"
+                                 version ".tar.gz"))
              (sha256
               (base32
-               "0dzx4qk50pjfsb6cs5jahng96a52k12f7pm0sc78iqdrawg71w1s"))
-             (patches (list (search-patch "mutt-CVE-2014-9116.patch")))))
+               "06bc2drbgalkk68rzg7hq2v5m5qgjxff5357wg0419dpi8ivdbr9"))
+             (patches (list (search-patch "mutt-store-references.patch")))))
     (build-system gnu-build-system)
     (inputs
      `(("cyrus-sasl" ,cyrus-sasl)
+       ("gdbm" ,gdbm)
        ("gpgme" ,gpgme)
        ("ncurses" ,ncurses)
        ("openssl" ,openssl)
@@ -192,6 +199,7 @@ aliasing facilities to work just as they would on normal mail.")
                            "--enable-imap"
                            "--enable-pop"
                            "--enable-gpgme"
+                           "--enable-hcache" ; for header caching
                            "--with-ssl"
                            "--with-sasl"
                            ;; so that mutt does not check whether the path
@@ -207,7 +215,7 @@ operating systems.")
 (define-public gmime
   (package
     (name "gmime")
-    (version "2.6.19")
+    (version "2.6.20")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/gmime/"
@@ -215,7 +223,7 @@ operating systems.")
                                   "/gmime-" version ".tar.xz"))
               (sha256
                (base32
-                "0jm1fgbjgh496rsc0il2y46qd4bqq2ln9168p4zzh68mk4ml1yxg"))))
+                "0rfzbgsh8ira5p76kdghygl5i3fvmmx4wbw5rp7f8ajc4vxp18g0"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
@@ -225,20 +233,21 @@ operating systems.")
               ("zlib" ,zlib)))
     (arguments
      `(#:phases
-       (alist-cons-after
-        '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
-          ;; 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))))
-                 (string-append pre (or prog (error "not found: " base))))))))
-        %standard-phases)))
+       (modify-phases %standard-phases
+         (add-after
+          '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
+            ;; 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))))
+                   (string-append pre
+                                  (or prog (error "not found: " base))))))))))))
     (home-page "http://spruce.sourceforge.net/gmime/")
     (synopsis "MIME message parser and creator library")
     (description
@@ -282,7 +291,7 @@ and corrections.  It is based on a Bayesian filter.")
 (define-public offlineimap
   (package
     (name "offlineimap")
-    (version "6.5.5")
+    (version "6.7.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/OfflineIMAP/offlineimap/"
@@ -290,26 +299,45 @@ and corrections.  It is based on a Bayesian filter.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "00k84qagph3xnxss6rkxm61x07ngz8fvffx4z9jyw5baf3cdd32p"))))
+                "0462mal2fxvavxhwjk1a6vsnspx07yniifa687dwg46aplqznin4"))))
     (build-system python-build-system)
     (native-inputs `(("python" ,python-2)))
+    (inputs `(("python2-pysqlite" ,python2-pysqlite)))
     (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.12")
+    (version "0.9.13")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/djcb/mu/archive/v"
@@ -317,7 +345,8 @@ repository and Maildir/IMAP as LOCAL repository.")
               (file-name (string-append "mu-" version ".tar.gz"))
               (sha256
                (base32
-                "1bxryacmas2llj68m2dv8dr1vwx8f5k2i2azh69jajkpqx7i4wdq"))))
+                "0wj33pma8xgjvn2akk7khzbycwn4c9sshxvzdph9dnpy7gyqxj51"))
+              (patches (list %mu-gtester-patch))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
@@ -359,27 +388,33 @@ attachments, create new maildirs, and so on.")
 (define-public notmuch
   (package
     (name "notmuch")
-    (version "0.18.1")
+    (version "0.21")
     (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
-                "1pdp9l7yv71d3fjb30qyccva8h03hvg88q4a00yi50v2j70kvmgj"))))
+                "1cr53rbpkcy3pvrmhbg2gq7sjpwb0c8xd7a4zhzxbiv8s7z8yvyh"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:tests? #f ;; FIXME: Test suite hangs and times out.
-       #:phases (alist-replace
-                 'configure
-                 (lambda* (#:key outputs #:allow-other-keys)
-                   (setenv "CONFIG_SHELL" (which "sh"))
-                   (let ((out (assoc-ref outputs "out")))
-                     (zero? (system* "./configure"
-                                     (string-append "--prefix=" out)))))
-                 %standard-phases)))
+     '(#:tests? #f ;; FIXME: 662 tests; 168 fail and 99 are skipped
+                   ;; with perl input: 50 fail and 99 are skipped
+       #:phases (modify-phases %standard-phases
+                  (replace 'configure
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      (setenv "CC" "gcc")
+                      (setenv "CONFIG_SHELL" (which "sh"))
+
+                      (let ((out (assoc-ref outputs "out")))
+                        (zero? (system* "./configure"
+                                        (string-append "--prefix=" out)))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     `(("pkg-config" ,pkg-config)
+       ("python" ,python-2)
+       ("python-docutils" ,python2-docutils)
+       ("python-sphinx" ,python2-sphinx)
+       ("bash-completion" ,bash-completion)))
     (inputs
      `(("emacs" ,emacs)
        ("glib" ,glib)
@@ -394,10 +429,85 @@ attachments, create new maildirs, and so on.")
 ing, and tagging large collections of email messages.")
     (license gpl3+)))
 
+(define-public notmuch-addrlookup-c
+  (package
+    (name "notmuch-addrlookup-c")
+    (version "7")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/aperezdc/" name "/archive/v"
+                    version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "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 python2-notmuch
+  (package
+    (name "python2-notmuch")
+    (version "0.15.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://pypi.python.org/packages/source/n/notmuch/notmuch-"
+                    version
+                    ".tar.gz"))
+              (sha256
+               (base32
+                "18g8701ibr153ngsz258kgcd42wqnbf9ifpqig1bijy6b0zx9xn5"))))
+    (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
+    (home-page "http://notmuchmail.org/")
+    (synopsis "Python bindings of the Notmuch mail indexing library")
+    (description
+     "This package provides Python bindings to use the Notmuch mail indexing
+and search library.")
+    (license gpl3+)))
+
 (define-public getmail
   (package
     (name "getmail")
-    (version "4.46.0")
+    (version "4.48.0")
     (source
      (origin
        (method url-fetch)
@@ -405,7 +515,7 @@ ing, and tagging large collections of email messages.")
                            name "-" version ".tar.gz"))
        (sha256
         (base32
-         "15rqmm25pq6ll8aaqh8h6pfdkpqs7y6yismb3h3w1bz8j292c8zl"))))
+         "0k5rm5kag14izng2ajcagvli9sns5mzvkyfa65ri4xymxs91wi29"))))
     (build-system python-build-system)
     (arguments
      `(#:tests? #f ; no tests
@@ -466,20 +576,20 @@ MailCore 2.")
 (define-public claws-mail
   (package
     (name "claws-mail")
-    (version "3.11.1")
+    (version "3.13.2")
     (source (origin
               (method url-fetch)
               (uri (string-append
-                    "mirror://sourceforge/claws-mail/claws-mail-" version
+                    "http://www.claws-mail.org/releases/" name "-" version
                     ".tar.xz"))
               (sha256
-               (base32 "0cyixz1jgfpi8abh9fbb8ylx9mcvw4jqj81cms666wpqr6v828yp"))))
+               (base32
+                "1l8ankx0qpq1ix1an8viphcf11ksh53jsrm1xjmq8cjbh5910wva"))))
     (build-system gnu-build-system)
     (native-inputs `(("pkg-config" ,pkg-config)))
     (inputs `(("bogofilter" ,bogofilter)
               ("curl" ,curl)
               ("dbus-glib" ,dbus-glib)
-              ("dbus" ,dbus)
               ("enchant" ,enchant)
               ("expat" ,expat)
               ("ghostscript" ,ghostscript)
@@ -512,17 +622,18 @@ which can add many functionalities to the base client.")
 (define-public msmtp
   (package
     (name "msmtp")
-    (version "1.4.32")
+    (version "1.6.3")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
-             "mirror://sourceforge/msmtp/msmtp-" version ".tar.bz2"))
+             "mirror://sourceforge/msmtp/msmtp-" version ".tar.xz"))
        (sha256 (base32
-                "122z38pv4q03w3mbnhrhg4w85a51258sfdg2ips0b6cgwz3wbw1b"))))
+                "0mbkflxv2swjz4185inis83v6pxcblpmapwjhgpc6wh7kh3bx0pr"))))
     (build-system gnu-build-system)
     (inputs
      `(("libidn" ,libidn)
+       ("libsecret" ,libsecret)
        ("gnutls" ,gnutls)
        ("zlib" ,zlib)
        ("gsasl" ,gsasl)))
@@ -532,7 +643,19 @@ which can add many functionalities to the base client.")
     (arguments
      `(#:configure-flags (list "--with-libgsasl"
                                "--with-libidn"
-                               "--with-ssl=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
@@ -544,14 +667,17 @@ delivery.")
 (define-public exim
   (package
     (name "exim")
-    (version "4.85")
+    (version "4.86.2")
     (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
+         "1cvfcc1hi60lydv8h3a2rxlfc0v2nflwpvzjj7h7cdsqs2pxwmkp"))))
     (build-system gnu-build-system)
     (inputs
      `(("bdb" ,bdb)
@@ -626,17 +752,61 @@ deal of flexibility in the way mail can be routed, and there are extensive
 facilities for checking incoming mail.")
     (license gpl2+)))
 
+(define-public dovecot
+  (package
+    (name "dovecot")
+    (version "2.2.19")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "http://www.dovecot.org/releases/"
+                           (version-major+minor version) "/"
+                           name "-" version ".tar.gz"))
+       (sha256 (base32
+                "17sf5aancad4pg1vx1606k99389wg76blpqzmnmxlz4hklzix7km"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("openssl" ,openssl)
+       ("zlib" ,zlib)
+       ("bzip2" ,bzip2)
+       ("sqlite" ,sqlite)
+       ("linux-pam" ,linux-pam)))
+    (arguments
+     `(#:configure-flags '("--sysconfdir=/etc"
+                           "--localstatedir=/var")
+       #:phases (modify-phases %standard-phases
+                  (add-before
+                   'configure 'pre-configure
+                   (lambda _
+                     ;; Simple hack to avoid installing in /etc
+                     (substitute* '("doc/Makefile.in"
+                                    "doc/example-config/Makefile.in")
+                       (("pkgsysconfdir = .*")
+                        "pkgsysconfdir = /tmp/etc"))
+                     #t)))))
+    (home-page "http://www.dovecot.org")
+    (synopsis "Secure POP3/IMAP server")
+    (description
+     "Dovecot is a mail server whose major goals are security and reliability.
+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")))))
+
 (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)
@@ -648,4 +818,390 @@ facilities for checking incoming mail.")
 mailboxes.  Currently Maildir and IMAP are supported types.")
     (license gpl2+)))
 
-;;; mail.scm ends here
+(define-public perl-email-abstract
+  (package
+    (name "perl-email-abstract")
+    (version "3.008")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://cpan/authors/id/R/RJ/RJBS/"
+                           "Email-Abstract-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0h42rhvp769wb421cpbbg6v6xjp8iv86mvz70pqgfgf4nsn6jwgw"))))
+    (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")
+    (description "Email::Abstract provides module writers with the ability to
+write simple, representation-independent mail handling code.")
+    (license (package-license perl))))
+
+(define-public perl-email-address
+  (package
+    (name "perl-email-address")
+    (version "1.907")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://cpan/authors/id/R/RJ/RJBS/"
+                           "Email-Address-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1ai4r149pzjv9dc2vddir8zylj0z1pii93rm4g591lx7avim71hx"))))
+    (build-system perl-build-system)
+    (home-page "http://search.cpan.org/dist/Email-Address")
+    (synopsis "Email address parsing and creation")
+    (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 (package-license perl))))
+
+(define-public perl-email-date-format
+  (package
+    (name "perl-email-date-format")
+    (version "1.005")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://cpan/authors/id/R/RJ/RJBS/"
+                           "Email-Date-Format-" version ".tar.gz"))
+       (sha256
+        (base32
+         "012ivfwpnbl3wr50f9c6f4azhdlxnm31pdn72528g79v61z6372p"))))
+    (build-system perl-build-system)
+    (home-page "http://search.cpan.org/dist/Email-Date-Format")
+    (synopsis "Produce RFC 2822 date strings")
+    (description "Email::Date::Format provides a means for generating an RFC
+2822 compliant datetime string.")
+    (license (package-license perl))))
+
+(define-public perl-email-messageid
+  (package
+    (name "perl-email-messageid")
+    (version "1.405")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://cpan/authors/id/R/RJ/RJBS/"
+                           "Email-MessageID-" version ".tar.gz"))
+       (sha256
+        (base32
+         "09216naz21x99ff33wdm3j3zq1zhdbxhrsmx8bvavjrw3gjsvrq3"))))
+    (build-system perl-build-system)
+    (home-page "http://search.cpan.org/dist/Email-MessageID")
+    (synopsis "Generate world unique message-ids")
+    (description "Email::MessageID generates recommended message-ids to
+identify a message uniquely.")
+    (license (package-license perl))))
+
+(define-public perl-email-mime
+  (package
+    (name "perl-email-mime")
+    (version "1.929")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://cpan/authors/id/R/RJ/RJBS/"
+                           "Email-MIME-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1sf7dldg4dvicyw6dl1vx6s1gjq3fcppi0103ikl0vi6v5xjdjdh"))))
+    (build-system perl-build-system)
+    (propagated-inputs
+     `(("perl-email-address" ,perl-email-address)
+       ("perl-email-messageid" ,perl-email-messageid)
+       ("perl-email-mime-contenttype" ,perl-email-mime-contenttype)
+       ("perl-email-mime-encodings" ,perl-email-mime-encodings)
+       ("perl-email-simple" ,perl-email-simple)
+       ("perl-mime-types" ,perl-mime-types)))
+    (home-page "http://search.cpan.org/dist/Email-MIME")
+    (synopsis "MIME message handling")
+    (description "Email::MIME is an extension of the Email::Simple module, to
+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 (package-license perl))))
+
+(define-public perl-email-mime-contenttype
+  (package
+    (name "perl-email-mime-contenttype")
+    (version "1.017")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://cpan/authors/id/R/RJ/RJBS/"
+                           "Email-MIME-ContentType-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1cl1l97lg690dh7i704hqi7yhxalq1chy7ylld5yc5v38jqa6gcn"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-capture-tiny" ,perl-capture-tiny)))
+    (home-page "http://search.cpan.org/dist/Email-MIME-ContentType")
+    (synopsis "Parse MIME Content-Type headers")
+    (description "Email::MIME::ContentType parses a MIME Content-Type
+header.")
+    (license (package-license perl))))
+
+(define-public perl-email-mime-encodings
+  (package
+    (name "perl-email-mime-encodings")
+    (version "1.315")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://cpan/authors/id/R/RJ/RJBS/"
+                           "Email-MIME-Encodings-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0p5b8g9gh35m8fqrpx60g4bp98rvwd02n5b0vm9wh7mk0xah8wac"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-capture-tiny" ,perl-capture-tiny)))
+    (home-page "http://search.cpan.org/dist/Email-MIME-Encodings")
+    (synopsis "Unified interface to MIME encoding and decoding")
+    (description "This module wraps MIME::Base64 and MIME::QuotedPrint.")
+    (license (package-license perl))))
+
+(define-public perl-email-sender
+  (package
+    (name "perl-email-sender")
+    (version "1.300016")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://cpan/authors/id/R/RJ/RJBS/"
+                           "Email-Sender-" version ".tar.gz"))
+       (sha256
+        (base32
+         "18x26fjh399q3s2g8dajb9r10633c46jrnbvycpnpclgnzhjs100"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-capture-tiny" ,perl-capture-tiny)))
+    (propagated-inputs
+     `(("perl-email-abstract" ,perl-email-abstract)
+       ("perl-email-address" ,perl-email-address)
+       ("perl-email-simple" ,perl-email-simple)
+       ("perl-list-moreutils" ,perl-list-moreutils)
+       ("perl-module-runtime" ,perl-module-runtime)
+       ("perl-moo" ,perl-moo)
+       ("perl-moox-types-mooselike" ,perl-moox-types-mooselike)
+       ("perl-sub-exporter" ,perl-sub-exporter)
+       ("perl-throwable" ,perl-throwable)
+       ("perl-try-tiny" ,perl-try-tiny)))
+    (home-page "http://search.cpan.org/dist/Email-Sender")
+    (synopsis "Perl library for sending email")
+    (description "Email::Sender replaces the old and sometimes problematic
+Email::Send library.")
+    (license (package-license perl))))
+
+(define-public perl-email-simple
+  (package
+    (name "perl-email-simple")
+    (version "2.206")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://cpan/authors/id/R/RJ/RJBS/"
+                           "Email-Simple-" version ".tar.gz"))
+       (sha256
+        (base32
+         "19dpy3j5na2k9qw1jcpc8ia25038068r9j1bn34f9yyrisz7s522"))))
+    (build-system perl-build-system)
+    (propagated-inputs
+     `(("perl-email-date-format" ,perl-email-date-format)))
+    (home-page "http://search.cpan.org/dist/Email-Simple")
+    (synopsis "Parsing of RFC 2822 messages")
+    (description "Email::Simple provides simple parsing of RFC 2822 message
+format and headers.")
+    (license (package-license perl))))
+
+(define-public libesmtp
+  (package
+    (name "libesmtp")
+    (version "1.0.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "http://www.stafford.uklinux.net/libesmtp/libesmtp-"
+                           version ".tar.bz2"))
+       (sha256
+        (base32
+         "02zbniyz7qys1jmx3ghx21kxmns1wc3hmv80gp7ag7yra9f1m9nh"))))
+    (build-system gnu-build-system)
+    (propagated-inputs
+     `(("openssl" ,openssl)))
+    (home-page "http://www.stafford.uklinux.net/libesmtp/")
+    (synopsis "Library for sending mail via remote hosts using SMTP")
+    (description "libESMTP is an SMTP client which manages posting (or
+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+))))
+
+(define-public esmtp
+  (package
+    (name "esmtp")
+    (version "1.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/andywingo/esmtp.git")
+             (commit "01bf9fc")))
+       (sha256
+        (base32
+         "1ay282rrl92h0m0m8z5zzjnwiiagi7c78aq2qvhia5mw7prwfyw2"))
+       (file-name (string-append name "-" version "-checkout"))))
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (add-before
+                   'configure 'autoconf
+                   (lambda _ (zero? (system* "autoreconf" "-vfi")))))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("bison" ,bison)
+       ("flex" ,flex)
+       ("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("libtool" ,libtool)))
+    (inputs
+     `(("libesmtp" ,libesmtp)))
+    (home-page "http://sourceforge.net/projects/esmtp/")
+    (synopsis "Relay-only mail transfer agent (MTA)")
+    (description "Esmtp is a simple relay-only mail transfer agent built using
+libESMTP.  It sends e-mail via a remote SMTP server using credentials from the
+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+)))
+
+(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
+        (list
+         (search-patch "procmail-ambiguous-getline-debian.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 `(("glibc" ,glibc)
+              ("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.8.1")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri name version))
+              (sha256
+               (base32
+                "098gs94qmnspdfn6ar8lycx7dbsz9bcff90aps0cmn47mw7llch0"))))
+    (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+)))