gnu: gemma: Update to 0.98.3.
[jackhill/guix/guix.git] / gnu / packages / mail.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
3 ;;; Copyright © 2014, 2015, 2017, 2020 Mark H Weaver <mhw@netris.org>
4 ;;; Copyright © 2014 Ian Denhardt <ian@zenhack.net>
5 ;;; Copyright © 2014 Sou Bunnbu <iyzsong@gmail.com>
6 ;;; Copyright © 2014, 2019 Julien Lepiller <julien@lepiller.eu>
7 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
8 ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
9 ;;; Copyright © 2015, 2016, 2018 Eric Bavier <bavier@member.fsf.org>
10 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
11 ;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
12 ;;; Copyright © 2016 Christopher Allan Webber <cwebber@dustycloud.org>
13 ;;; Copyright © 2016 Al McElrath <hello@yrns.org>
14 ;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
15 ;;; Copyright © 2016 Lukas Gradl <lgradl@openmailbox.org>
16 ;;; Copyright © 2016 Alex Kost <alezost@gmail.com>
17 ;;; Copyright © 2016, 2017 Troy Sankey <sankeytms@gmail.com>
18 ;;; Copyright © 2016, 2017, 2018 Nikita <nikita@n0.is>
19 ;;; Copyright © 2016 Clément Lassieur <clement@lassieur.org>
20 ;;; Copyright © 2016, 2017, 2018, 2019, 2020 Arun Isaac <arunisaac@systemreboot.net>
21 ;;; Copyright © 2016 John Darrington <jmd@gnu.org>
22 ;;; Copyright © 2016, 2018 Marius Bakke <mbakke@fastmail.com>
23 ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
24 ;;; Copyright © 2017 Kyle Meyer <kyle@kyleam.com>
25 ;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
26 ;;; Copyright © 2017, 2018, 2020 Rene Saavedra <pacoon@protonmail.com>
27 ;;; Copyright © 2018, 2019, 2020, 2021 Pierre Langlois <pierre.langlois@gmx.com>
28 ;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
29 ;;; Copyright © 2018 Gábor Boskovits <boskovits@gmail.com>
30 ;;; Copyright © 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
31 ;;; Copyright © 2019, 2020 Tanguy Le Carrour <tanguy@bioneland.org>
32 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
33 ;;; Copyright © 2020 Justus Winter <justus@sequoia-pgp.org>
34 ;;; Copyright © 2020 Eric Brown <ecbrown@ericcbrown.com>
35 ;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
36 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
37 ;;; Copyright © 2020 Alexey Abramov <levenson@mmer.org>
38 ;;; Copyright © 2020 Tim Gesthuizen <tim.gesthuizen@yahoo.de>
39 ;;; Copyright © 2020 Alexandru-Sergiu Marton <brown121407@posteo.ro>
40 ;;; Copyright © 2020 Oleg Pykhalov <go.wigust@gmail.com>
41 ;;; Copyright © 2020 B. Wilson <elaexuotee@wilsonb.com>
42 ;;; Copyright © 2020 divoplade <d@divoplade.fr>
43 ;;;
44 ;;; This file is part of GNU Guix.
45 ;;;
46 ;;; GNU Guix is free software; you can redistribute it and/or modify it
47 ;;; under the terms of the GNU General Public License as published by
48 ;;; the Free Software Foundation; either version 3 of the License, or (at
49 ;;; your option) any later version.
50 ;;;
51 ;;; GNU Guix is distributed in the hope that it will be useful, but
52 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
53 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
54 ;;; GNU General Public License for more details.
55 ;;;
56 ;;; You should have received a copy of the GNU General Public License
57 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
58
59 (define-module (gnu packages mail)
60 #:use-module (gnu packages)
61 #:use-module (gnu packages admin)
62 #:use-module (gnu packages aspell)
63 #:use-module (gnu packages autotools)
64 #:use-module (gnu packages backup)
65 #:use-module (gnu packages base)
66 #:use-module (gnu packages bash)
67 #:use-module (gnu packages bison)
68 #:use-module (gnu packages boost)
69 #:use-module (gnu packages calendar)
70 #:use-module (gnu packages check)
71 #:use-module (gnu packages compression)
72 #:use-module (gnu packages crypto)
73 #:use-module (gnu packages curl)
74 #:use-module (gnu packages cyrus-sasl)
75 #:use-module (gnu packages databases)
76 #:use-module (gnu packages dbm)
77 #:use-module (gnu packages dejagnu)
78 #:use-module (gnu packages django)
79 #:use-module (gnu packages dns)
80 #:use-module (gnu packages docbook)
81 #:use-module (gnu packages documentation)
82 #:use-module (gnu packages emacs)
83 #:use-module (gnu packages enchant)
84 #:use-module (gnu packages file)
85 #:use-module (gnu packages gdb)
86 #:use-module (gnu packages gettext)
87 #:use-module (gnu packages ghostscript)
88 #:use-module (gnu packages glib)
89 #:use-module (gnu packages gnome)
90 #:use-module (gnu packages gnupg)
91 #:use-module (gnu packages groff)
92 #:use-module (gnu packages gsasl)
93 #:use-module (gnu packages gtk)
94 #:use-module (gnu packages guile)
95 #:use-module (gnu packages guile-xyz)
96 #:use-module (gnu packages flex)
97 #:use-module (gnu packages haskell-xyz)
98 #:use-module (gnu packages icu4c)
99 #:use-module (gnu packages kerberos)
100 #:use-module (gnu packages language)
101 #:use-module (gnu packages libcanberra)
102 #:use-module (gnu packages libevent)
103 #:use-module (gnu packages libidn)
104 #:use-module (gnu packages libunistring)
105 #:use-module (gnu packages libunwind)
106 #:use-module (gnu packages linux)
107 #:use-module (gnu packages lsof)
108 #:use-module (gnu packages lua)
109 #:use-module (gnu packages m4)
110 #:use-module (gnu packages man)
111 #:use-module (gnu packages ncurses)
112 #:use-module (gnu packages networking)
113 #:use-module (gnu packages ninja)
114 #:use-module (gnu packages openldap)
115 #:use-module (gnu packages onc-rpc)
116 #:use-module (gnu packages pcre)
117 #:use-module (gnu packages perl)
118 #:use-module (gnu packages perl-check)
119 #:use-module (gnu packages perl-web)
120 #:use-module (gnu packages pkg-config)
121 #:use-module (gnu packages protobuf)
122 #:use-module (gnu packages python)
123 #:use-module (gnu packages python-check)
124 #:use-module (gnu packages python-crypto)
125 #:use-module (gnu packages python-web)
126 #:use-module (gnu packages python-xyz)
127 #:use-module (gnu packages ragel)
128 #:use-module (gnu packages rdf)
129 #:use-module (gnu packages readline)
130 #:use-module (gnu packages ruby)
131 #:use-module (gnu packages search)
132 #:use-module (gnu packages serialization)
133 #:use-module (gnu packages samba)
134 #:use-module (gnu packages screen)
135 #:use-module (gnu packages sphinx)
136 #:use-module (gnu packages sqlite)
137 #:use-module (gnu packages tcl)
138 #:use-module (gnu packages texinfo)
139 #:use-module (gnu packages time)
140 #:use-module (gnu packages tls)
141 #:use-module (gnu packages version-control)
142 #:use-module (gnu packages w3m)
143 #:use-module (gnu packages web)
144 #:use-module (gnu packages webkit)
145 #:use-module (gnu packages xdisorg)
146 #:use-module (gnu packages xorg)
147 #:use-module (gnu packages xml)
148 #:use-module ((guix licenses) #:prefix license:)
149 #:use-module (guix packages)
150 #:use-module (guix download)
151 #:use-module (guix git-download)
152 #:use-module (guix svn-download)
153 #:use-module (guix utils)
154 #:use-module (guix build-system cmake)
155 #:use-module (guix build-system glib-or-gtk)
156 #:use-module (guix build-system gnu)
157 #:use-module (guix build-system guile)
158 #:use-module (guix build-system perl)
159 #:use-module (guix build-system python)
160 #:use-module (guix build-system trivial)
161 #:use-module (srfi srfi-1)
162 #:use-module (ice-9 match))
163
164 (define-public anubis
165 (package
166 (name "anubis")
167 ;; This 4.2.90 alpha release adds support for Guile 3 and has fixes for
168 ;; other issues.
169 (version "4.2.90")
170 (source
171 (origin
172 (method url-fetch)
173 (uri (string-append "https://alpha.gnu.org/gnu/anubis/anubis-"
174 version ".tar.gz"))
175 (sha256
176 (base32
177 "0dvm6acl32dv8bixx9z50gzwfp6kj4kxnn1j3dcwjlp7sasjp41s"))))
178 (build-system gnu-build-system)
179 (native-inputs
180 `(("automake" ,automake)
181 ("autoconf" ,autoconf)
182 ("gettext" ,gettext-minimal)
183 ("m4" ,m4))) ;for the test suite
184 (inputs
185 `(("gdbm" ,gdbm)
186 ("gnutls" ,gnutls)
187 ("gpgme" ,gpgme)
188 ("gsasl" ,gsasl)
189 ("guile" ,guile-3.0)
190 ("libgcrypt" ,libgcrypt) ;gnutls support depends on libgcrypt
191 ("libgpg-error" ,libgpg-error)))
192 (outputs '("out" "debug"))
193 (synopsis "SMTP message submission daemon")
194 (description "Anubis is a daemon that sits between the Mail User
195 Agent (MUA) and the Mail Transfer Agent (MTA). When a mail is sent by a user
196 in the MUA, it is first passed to Anubis, which performs additional processing
197 to the message before passing it on for delivery by the MTA. Anubis may, for
198 example, modify the message headers or body, or encrypt or sign the message.")
199 (home-page "https://www.gnu.org/software/anubis/manual/")
200 (license license:gpl3+)))
201
202 (define-public mailutils
203 (package
204 (name "mailutils")
205 (version "3.10")
206 (source (origin
207 (method url-fetch)
208 (uri (string-append "mirror://gnu/mailutils/mailutils-"
209 version ".tar.xz"))
210 (sha256
211 (base32
212 "17smrxjdgbbzbzakik30vj46q4iib85ksqhb82jr4vjp57akszh9"))
213 (patches
214 ;; Fixes https://issues.guix.gnu.org/43088.
215 (search-patches "mailutils-fix-uninitialized-variable.patch"))))
216 (build-system gnu-build-system)
217 (arguments
218 `(#:phases
219 (modify-phases %standard-phases
220 (add-before 'check 'prepare-test-suite
221 (lambda _
222 ;; Use the right file name for `cat'.
223 (substitute* "testsuite/lib/mailutils.exp"
224 (("/bin/cat")
225 (which "cat")))
226
227 ;; Tests try to invoke 'mda' such that it looks up the
228 ;; 'root' user, which does not exist in the build
229 ;; environment.
230 (substitute* '("mda/mda/tests/testsuite"
231 "mda/lmtpd/tests/testsuite")
232 (("root <") "nobody <")
233 (("spool/root") "spool/nobody")
234 (("root@localhost") "nobody@localhost"))
235
236 ;; The 'pipeact.at' tests generate a shell script; make
237 ;; sure it uses the right shell.
238 (substitute* '("sieve/tests/testsuite"
239 "mh/tests/testsuite")
240 (("#! /bin/sh")
241 (string-append "#!" (which "sh"))))
242
243 (substitute* "mh/tests/testsuite"
244 (("moreproc: /bin/cat")
245 (string-append "moreproc: " (which "cat"))))
246
247 ;; XXX: The comsatd tests rely on being able to open
248 ;; /dev/tty, but that gives ENODEV in the build
249 ;; environment. Thus, ignore test failures here.
250 (substitute* "comsat/tests/Makefile.in"
251 (("\\$\\(SHELL\\) \\$\\(TESTSUITE\\)" all)
252 (string-append "-" all)))
253
254 ;; XXX: The ‘moderator: program discard’ test does not specify
255 ;; an explicit From: but does expect an exact match. But why are
256 ;; all other tests unaffected?
257 (substitute* "sieve/tests/testsuite"
258 (("gray@")
259 "nixbld@"))
260
261 ;; 'frm' tests expect write access to $HOME.
262 (setenv "HOME" (getcwd))
263
264 ;; Avoid the message "I'm going to create the standard MH path
265 ;; for you", which would lead to one test failure (when diffing
266 ;; stdout of 'fmtcheck'.)
267 (call-with-output-file ".mh_profile"
268 (lambda (port)
269 (format port "Path: ~a/Mail-for-tests~%"
270 (getcwd))))
271
272 #t)))
273 ;; TODO: Add `--with-sql'.
274 #:configure-flags
275 (list "--sysconfdir=/etc"
276
277 ;; Add "/X.Y" to the installation directory.
278 (string-append "--with-guile-site-dir="
279 (assoc-ref %outputs "out")
280 "/share/guile/site/"
281 ,(match (assoc "guile"
282 (package-inputs this-package))
283 (("guile" guile)
284 (version-major+minor
285 (package-version guile))))))
286
287 #:parallel-tests? #f))
288 (native-inputs
289 `(("perl" ,perl) ;for 'gylwrap'
290 ("texinfo" ,texinfo)
291 ("dejagnu" ,dejagnu)))
292 (inputs
293 `(("m4" ,m4)
294 ("guile" ,guile-3.0)
295 ("gsasl" ,gsasl)
296 ("gnutls" ,gnutls)
297 ("ncurses" ,ncurses)
298 ("readline" ,readline)
299 ("linux-pam" ,linux-pam)
300 ("libltdl" ,libltdl)
301 ("gdbm" ,gdbm)
302
303 ;; Required for SEARCH CHARSET.
304 ("libiconv" ,libiconv)
305 ("libunistring" ,libunistring)))
306 (home-page "https://mailutils.org")
307 (synopsis "Utilities and library for reading and serving mail")
308 (description
309 "GNU Mailutils is a collection of programs for managing, viewing and
310 processing electronic mail. It contains both utilities and server daemons
311 and all operate in a protocol-agnostic way. The underlying libraries are
312 also available, simplifying the addition of mail capabilities to new
313 software.")
314 (license
315 ;; Libraries are under LGPLv3+, and programs under GPLv3+.
316 (list license:gpl3+ license:lgpl3+))))
317
318 (define-public guile2.2-mailutils
319 (package
320 (inherit mailutils)
321 (name "guile2.2-mailutils")
322 (inputs
323 `(("guile" ,guile-2.2)
324 ,@(alist-delete "guile" (package-inputs mailutils))))))
325
326 (define-public guile3.0-mailutils
327 (deprecated-package "guile3.0-mailutils" mailutils))
328
329 (define-public nullmailer
330 (package
331 (name "nullmailer")
332 (version "2.2")
333 (source
334 (origin
335 (method url-fetch)
336 (uri (list
337 (string-append "https://untroubled.org/nullmailer/"
338 "nullmailer-" version ".tar.gz")
339 ;; Previous releases are moved to this subdirectory.
340 (string-append "https://untroubled.org/nullmailer/archive/"
341 "nullmailer-" version ".tar.gz")))
342 (sha256
343 (base32 "0md8cf90fl2yf3zh9njjy42a673v4j4ygyq95xg7fzkygdigm1lq"))))
344 (build-system gnu-build-system)
345 (arguments
346 `(#:configure-flags
347 (list "--enable-tls"
348 "--localstatedir=/var"
349 "--sysconfdir=/etc")
350 #:phases
351 (modify-phases %standard-phases
352 (add-before 'check 'patch-test-FHS-file-names
353 (lambda _
354 (with-directory-excursion "test"
355 (substitute* (list "functions.in"
356 "tests/send")
357 ;; Fix some shebangs later generated on the fly.
358 (("/bin/sh") (which "bash"))))
359 #t))
360 (add-before 'check 'pass-PATH-to-tests
361 ;; ‘runtest’ launches each test through ‘env -’, clearing $PATH. The
362 ;; tests then source ‘functions’, which first demands a working $PATH
363 ;; only to clobber it later. Pass our $PATH to the test environment
364 ;; and don't touch it after that.
365 (lambda _
366 (with-directory-excursion "test"
367 (substitute* "runtests"
368 (("env - bash")
369 (string-append "env - PATH=\"" (getenv "PATH") "\" bash")))
370 (substitute* "functions.in"
371 (("export PATH=.*") "")))
372 #t))
373 (add-before 'check 'delete-failing-tests
374 (lambda _
375 (with-directory-excursion "test/tests"
376 (for-each delete-file
377 (list
378 ;; XXX ‘nullmailer-inject: nullmailer-queue failed: 15’
379 "inject/queue"
380 ;; XXX These require the not-yet-packaged tcpserver.
381 "protocols" "smtp-auth")))
382 #t))
383 (add-before 'install 'skip-install-data-local
384 ;; Don't attempt to install run-time files outside of the store.
385 (lambda _
386 (substitute* "Makefile"
387 ((" install-data-local") ""))
388 #t)))))
389 (native-inputs
390 ;; For tests.
391 `(("daemontools" ,daemontools))) ; for svc
392 (inputs
393 `(("gnutls" ,gnutls)))
394 (home-page "https://untroubled.org/nullmailer/")
395 (synopsis "Simple relay-only mail transfer agent")
396 (description
397 "Nullmailer is a simple replacement @acronym{MTA, Mail Transfer Agent} for
398 hosts that receive no local mail and only relay mail to a fixed set of smart
399 relays. It's useful for systems such as Web servers that must be able to send
400 email notifications, without having to run a full-blown MTA such as sendmail
401 or qmail.
402
403 Nullmailer is designed to be simple to configure, easy to extend, and secure.
404 It requires little ongoing administration. The included @command{sendmail}
405 emulator front-end should allow most (if not all) sendmail-compatible programs
406 to run without any changes.")
407 (license (list license:lgpl2.1+ ; lib/cli++/ (but some files lack headers)
408 license:gpl2+)))) ; everything else
409
410 (define-public fetchmail
411 (package
412 (name "fetchmail")
413 (version "6.4.14")
414 (source
415 (origin
416 (method url-fetch)
417 (uri (string-append "mirror://sourceforge/fetchmail/branch_"
418 (version-major+minor version) "/"
419 "fetchmail-" version ".tar.xz"))
420 (sha256
421 (base32 "1jxxb3qyrh7118fwqa3bhirjh97j2w8r71s8vcb6vp3w1wwhfis2"))))
422 (build-system gnu-build-system)
423 (inputs
424 `(("openssl" ,openssl)))
425 (arguments
426 `(#:configure-flags
427 (list (string-append "--with-ssl="
428 (assoc-ref %build-inputs "openssl")))))
429 (home-page "https://www.fetchmail.info/")
430 (synopsis "Remote-mail retrieval and forwarding utility")
431 (description
432 "Fetchmail is a full-featured, robust, well-documented remote-mail
433 retrieval and forwarding utility intended to be used over on-demand
434 TCP/IP links (such as SLIP or PPP connections). It supports every
435 remote-mail protocol now in use on the Internet: POP2, POP3, RPOP, APOP,
436 KPOP, all flavors of IMAP, ETRN, and ODMR. It can even support IPv6
437 and IPSEC.
438
439 Fetchmail retrieves mail from remote mail servers and forwards it via SMTP,
440 so it can then be read by normal mail user agents such as mutt, elm
441 or BSD Mail. It allows all your system MTA's filtering, forwarding, and
442 aliasing facilities to work just as they would on normal mail.")
443 (license license:gpl2+))) ; most files are actually public domain or x11
444
445 (define-public mutt
446 (package
447 (name "mutt")
448 (version "2.0.4")
449 (source (origin
450 (method url-fetch)
451 (uri (list
452 (string-append "https://bitbucket.org/mutt/mutt/downloads/"
453 "mutt-" version ".tar.gz")
454 (string-append "http://ftp.mutt.org/pub/mutt/mutt-"
455 version ".tar.gz")))
456 (sha256
457 (base32
458 "1m4ig69qw4g3lhm4351snmy5i0ch65fqc9vqqdybr6jy21w7w225"))
459 (patches (search-patches "mutt-store-references.patch"))))
460 (build-system gnu-build-system)
461 (inputs
462 `(("cyrus-sasl" ,cyrus-sasl)
463 ("gdbm" ,gdbm)
464 ("gpgme" ,gpgme)
465 ("libidn2" ,libidn2)
466 ("ncurses" ,ncurses)
467 ("openssl" ,openssl)
468 ("perl" ,perl)
469 ("sqlite" ,sqlite)))
470 (arguments
471 `(#:configure-flags '("--enable-smtp"
472 "--enable-imap"
473 "--enable-pop"
474 "--enable-gpgme"
475 "--enable-hcache" ; for header caching
476 "--enable-sidebar"
477 "--enable-autocrypt"
478 "--with-ssl"
479 "--with-sasl"
480 "--with-sqlite3" ; required for Autocrypt
481 "--with-idn2" ; recommended for Autocrypt
482 ;; So that mutt does not check whether the path
483 ;; exists, which it does not in the chroot.
484 "--with-mailpath=/var/mail")))
485 (home-page "http://www.mutt.org/")
486 (synopsis "Mail client")
487 (description
488 "Mutt is a small but very powerful text-based mail client for Unix
489 operating systems.")
490 (license license:gpl2+)))
491
492 (define-public neomutt
493 (package
494 (name "neomutt")
495 (version "20201127")
496 (source
497 (origin
498 (method git-fetch)
499 (uri (git-reference
500 (url "https://github.com/neomutt/neomutt")
501 (commit version)))
502 (file-name (git-file-name name version))
503 (sha256
504 (base32 "1yhpz591jhcjpwllgppwf7vl7z2rnaqfphsvqd1sihd9k4lwch06"))))
505 (build-system gnu-build-system)
506 (inputs
507 `(("cyrus-sasl" ,cyrus-sasl)
508 ("gdbm" ,gdbm)
509 ("gpgme" ,gpgme)
510 ("ncurses" ,ncurses)
511 ("gnutls" ,gnutls)
512 ("openssl" ,openssl) ; for S/MIME
513 ("perl" ,perl)
514 ("kyotocabinet" ,kyotocabinet)
515 ("libxslt" ,libxslt)
516 ("libidn2" ,libidn2)
517 ("libxml2" ,libxml2)
518 ("lmdb" ,lmdb)
519 ("notmuch" ,notmuch)))
520 (native-inputs
521 `(("automake" ,automake)
522 ("gettext-minimal" ,gettext-minimal)
523 ("pkg-config" ,pkg-config)
524 ("docbook-xsl" ,docbook-xsl)
525 ("docbook-xml" ,docbook-xml-4.2)
526 ("w3m" ,w3m)
527 ("tcl" ,tcl)
528
529 ;; Test file data for the unit tests included in the neomutt source.
530 ("neomutt-test-files"
531 ,(let ((commit "8629adab700a75c54e8e28bf05ad092503a98f75"))
532 (origin
533 (method git-fetch)
534 (uri (git-reference
535 (url "https://github.com/neomutt/neomutt-test-files")
536 (commit commit)))
537 (file-name (git-file-name "neomutt-test-files" commit))
538 (sha256
539 (base32 "1ci04nqkab9mh60zzm66sd6mhsr6lya8wp92njpbvafc86vvwdlr")))))))
540 (arguments
541 `(#:test-target "test"
542 #:configure-flags
543 (list "--gpgme"
544
545 ;; Database, implies header caching.
546 "--disable-tokyocabinet"
547 "--disable-qdbm"
548 "--disable-bdb"
549 "--lmdb"
550 "--kyotocabinet"
551
552 "--gdbm"
553
554 "--gnutls"
555 "--disable-ssl"
556 "--sasl"
557 (string-append "--with-sasl="
558 (assoc-ref %build-inputs "cyrus-sasl"))
559
560
561 "--smime"
562 "--notmuch"
563 "--disable-idn"
564 "--idn2"
565
566 ;; If we do not set this, neomutt wants to check
567 ;; whether the path exists, which it does not
568 ;; in the chroot.
569 "--with-mailpath=/var/mail"
570
571 "--with-ui=ncurses"
572 (string-append "--with-ncurses="
573 (assoc-ref %build-inputs "ncurses"))
574 (string-append "--prefix="
575 (assoc-ref %outputs "out"))
576 "--debug")
577 #:phases
578 (modify-phases %standard-phases
579 ;; TODO: autosetup is meant to be included in the source,
580 ;; but we should package autosetup and use our own version of it.
581 (replace 'configure
582 (lambda* (#:key outputs inputs configure-flags #:allow-other-keys)
583 (let* ((out (assoc-ref outputs "out"))
584 (flags `(,@configure-flags))
585 (bash (which "bash")))
586 (setenv "SHELL" bash)
587 (setenv "CONFIG_SHELL" bash)
588 (apply invoke bash
589 (string-append (getcwd) "/configure")
590 flags))))
591 (add-before 'check 'prepare-test-files
592 (lambda* (#:key inputs #:allow-other-keys)
593 (copy-recursively (assoc-ref inputs "neomutt-test-files") "tests")
594 (with-directory-excursion "tests"
595 (setenv "NEOMUTT_TEST_DIR" (getcwd)) ; must be absolute
596 (invoke "bash" "setup.sh")
597 #t))))))
598 (home-page "https://neomutt.org/")
599 (synopsis "Command-line mail reader based on Mutt")
600 (description
601 "NeoMutt is a command-line mail reader which is based on mutt.
602 It adds a large amount of new and improved features to mutt.")
603 (license license:gpl2+)))
604
605 (define-public gmime
606 (package
607 (name "gmime")
608 (version "3.2.7")
609 (source (origin
610 (method url-fetch)
611 (uri (string-append "mirror://gnome/sources/gmime/"
612 (version-major+minor version)
613 "/gmime-" version ".tar.xz"))
614 (sha256
615 (base32
616 "0i3xfc84qn1z99i70q68kbnp9rmgqrnprqb418ba52s6g9j9dsia"))))
617 (build-system gnu-build-system)
618 (native-inputs
619 `(("pkg-config" ,pkg-config)
620 ("gnupg" ,gnupg) ; for tests only
621 ("gobject-introspection" ,gobject-introspection)))
622 (inputs `(("glib" ,glib)
623 ("gpgme" ,gpgme)
624 ("zlib" ,zlib)))
625 (arguments
626 `(#:configure-flags
627 (list "--enable-introspection=yes")
628 #:phases
629 (modify-phases %standard-phases
630 (add-after
631 'unpack 'patch-paths-in-tests
632 (lambda _
633 ;; The test programs run several programs using 'system' with
634 ;; hard-coded paths. Here we patch them all.
635 ;; We use ISO-8859-1 here because test-iconv.c contains
636 ;; raw byte sequences in several different encodings.
637 (with-fluids ((%default-port-encoding #f))
638 (substitute* (find-files "tests" "\\.c$")
639 (("(system *\\(\")(/[^ ]*)" all pre prog-path)
640 (let* ((base (basename prog-path))
641 (prog (which base)))
642 (string-append pre
643 (or prog (error "not found: " base)))))))
644 #t)))))
645 (home-page "http://spruce.sourceforge.net/gmime/")
646 (synopsis "MIME message parser and creator library")
647 (description
648 "GMime provides a core library and set of utilities which may be used for
649 the creation and parsing of messages using the Multipurpose Internet Mail
650 Extension (MIME).")
651 (license (list license:lgpl2.1+ license:gpl2+ license:gpl3+))))
652
653 ;; Some packages are not ready for GMime 3 yet.
654 (define-public gmime-2.6
655 (package
656 (inherit gmime)
657 (version "2.6.23")
658 (source (origin
659 (method url-fetch)
660 (uri (string-append "mirror://gnome/sources/gmime/"
661 (version-major+minor version)
662 "/gmime-" version ".tar.xz"))
663 (sha256
664 (base32
665 "0slzlzcr3h8jikpz5a5amqd0csqh2m40gdk910ws2hnaf5m6hjbi"))))))
666
667 (define-public altermime
668 (package
669 (name "altermime")
670 (version "0.3.11")
671 (source (origin
672 (method url-fetch)
673 (uri (string-append "http://pldaniels.com/altermime/altermime-"
674 version ".tar.gz"))
675 (sha256
676 (base32
677 "15zxg6spcmd35r6xbidq2fgcg2nzyv1sbbqds08lzll70mqx4pj7"))))
678 (build-system gnu-build-system)
679 (arguments
680 `(#:make-flags (list "CC=gcc"
681 (string-append "PREFIX=" (assoc-ref %outputs "out")))
682 #:tests? #f ; there are none
683 #:phases
684 (modify-phases %standard-phases
685 (delete 'configure)
686 (add-after 'unpack 'fix-bugs
687 (lambda _
688 (substitute* "MIME_headers.c"
689 (("hinfo->filename, sizeof\\(hinfo->name\\)")
690 "hinfo->filename, sizeof(hinfo->filename)")
691 (("memset\\(hinfo->defects, 0, _MIMEH_DEFECT_ARRAY_SIZE\\);")
692 "memset(hinfo->defects, 0, sizeof(hinfo->defects));"))
693 (substitute* "pldstr.c"
694 (("if \\(\\(st->start\\)&&\\(st->start != '\\\\0'\\)\\)")
695 "if ((st->start)&&(*st->start != '\\0'))"))
696 (substitute* "qpe.c"
697 (("if \\(lineend != '\\\\0'\\)")
698 "if (*lineend != '\\0')"))
699 #t))
700 (add-after 'unpack 'install-to-prefix
701 (lambda _
702 (substitute* "Makefile"
703 (("/usr/local") "${PREFIX}")
704 (("cp altermime.*") "install -D -t ${PREFIX}/bin altermime\n"))
705 #t))
706 (add-after 'unpack 'disable-Werror
707 (lambda _
708 (substitute* "Makefile"
709 (("-Werror") ""))
710 #t)))))
711 (home-page "https://pldaniels.com/altermime/")
712 (synopsis "Modify MIME-encoded messages")
713 (description
714 "alterMIME is a small program which is used to alter your mime-encoded
715 mailpack. What can alterMIME do?
716
717 @enumerate
718 @item Insert disclaimers,
719 @item insert arbitrary X-headers,
720 @item modify existing headers,
721 @item remove attachments based on filename or content-type,
722 @item replace attachments based on filename.
723 @end enumerate
724 .")
725 ;; MIME_headers.c is distributed under BSD-3; the rest of the code is
726 ;; published under the alterMIME license.
727 (license (list (license:non-copyleft "file://LICENSE")
728 license:bsd-3))))
729
730 (define-public astroid
731 (package
732 (name "astroid")
733 (version "0.15")
734 (source
735 (origin
736 (method git-fetch)
737 (uri (git-reference
738 (url "https://github.com/astroidmail/astroid")
739 (commit (string-append "v" version))))
740 (file-name (git-file-name name version))
741 (sha256
742 (base32 "11cxbva9ni98gii59xmbxh4c6idcg3mg0pgdsp1c3j0yg7ix0lj3"))
743 (modules '((guix build utils)))
744 (snippet
745 '(begin
746 ;; https://github.com/astroidmail/astroid/pull/685
747 (substitute* "tests/test_composed_message.cc"
748 (("\\\\n\\.\\.\\.") "\\n...\\n"))
749 #t))))
750 (build-system cmake-build-system)
751 (arguments
752 `(#:modules ((guix build cmake-build-system)
753 ((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:)
754 (guix build utils)
755 (ice-9 match))
756 #:imported-modules ((guix build glib-or-gtk-build-system)
757 ,@%cmake-build-system-modules)
758 #:configure-flags (list "-GNinja")
759 #:phases
760 (modify-phases %standard-phases
761 (add-after 'unpack 'skip-markdown-test
762 ;; This test relies on the plugins and the test suite
763 ;; cannot find the Astroid module.
764 ;; gi.require_version ('Astroid', '0.2')
765 ;; ValueError: Namespace Astroid not available
766 (lambda _
767 (substitute* "tests/CMakeLists.txt"
768 ((".*markdown.*") ""))
769 #t))
770 (replace 'build
771 (lambda _
772 (invoke "ninja" "-j" (number->string (parallel-job-count)))))
773 (add-before 'check 'start-xserver
774 (lambda* (#:key inputs #:allow-other-keys)
775 (let ((xorg-server (assoc-ref inputs "xorg-server")))
776 (setenv "HOME" (getcwd))
777 (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
778 (setenv "DISPLAY" ":1")
779 #t)))
780 (replace 'check
781 (lambda* (#:key tests? #:allow-other-keys)
782 (when tests?
783 (setenv "CTEST_OUTPUT_ON_FAILURE" "1")
784 (invoke "ctest" "."))
785 #t))
786 (replace 'install
787 (lambda _
788 (invoke "ninja" "install")))
789 (add-after 'install 'wrap-with-GI_TYPELIB_PATH
790 (lambda* (#:key inputs outputs #:allow-other-keys)
791 (let ((out (assoc-ref outputs "out"))
792 (paths (map (match-lambda
793 ((outputs . directory)
794 (let ((girepodir (string-append
795 directory
796 "/lib/girepository-1.0")))
797 (if (file-exists? girepodir)
798 girepodir
799 #f))))
800 inputs)))
801 (wrap-program (string-append out "/bin/astroid")
802 `("GI_TYPELIB_PATH" ":" prefix ,(filter identity paths))))
803 #t))
804 (add-after 'install 'glib-or-gtk-compile-schemas
805 (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-compile-schemas))
806 (add-after 'install 'glib-or-gtk-wrap
807 (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap)))))
808 (native-inputs
809 `(("glib-networking" ,glib-networking)
810 ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
811 ("gnupg" ,gnupg)
812 ("ninja" ,ninja)
813 ("pkg-config" ,pkg-config)
814 ("ronn" ,ronn)
815 ("w3m" ,w3m)
816 ("xorg-server" ,xorg-server)))
817 (inputs
818 `(("boost" ,boost)
819 ("gmime" ,gmime)
820 ("gobject-introspection" ,gobject-introspection) ; it is referenced
821 ("gtkmm" ,gtkmm)
822 ("libpeas" ,libpeas)
823 ("libsass" ,libsass)
824 ("notmuch" ,notmuch)
825 ("protobuf" ,protobuf)
826 ("python" ,python-wrapper)
827 ("python-pygobject" ,python-pygobject)
828 ("webkitgtk" ,webkitgtk)))
829 (propagated-inputs
830 `(("adwaita-icon-theme" ,adwaita-icon-theme))) ; Required for the thread view
831 (home-page "https://astroidmail.github.io/")
832 (synopsis "GTK frontend to the notmuch mail system")
833 (description
834 "Astroid is a lightweight and fast Mail User Agent that provides a
835 graphical interface to searching, display and composing email, organized in
836 thread and tags. Astroid uses the notmuch backend for searches through tons of
837 email. Astroid searches, displays and compose emails — and relies on other
838 programs for fetching, syncing and sending email.")
839 (license (list license:gpl3+ ; 'this program'
840 license:lgpl2.1+)))) ; code from geary, gmime
841
842 (define-public ripmime
843 ;; Upstream does not tag or otherwise provide any releases (only a version
844 ;; number in the source)
845 (let ((commit "a556ffe08d620602475c976732e8e1a82f3169e9")
846 (revision "1"))
847 (package
848 (name "ripmime")
849 (version (git-version "1.4.0.10" revision commit))
850 (source (origin
851 (method git-fetch)
852 (uri (git-reference
853 (url "https://github.com/inflex/ripMIME")
854 (commit commit)))
855 (file-name (git-file-name name version))
856 (sha256
857 (base32
858 "1z8ar8flvkd9q3ax4x28sj5pyq8ykk5pq249y967lj2406lxparh"))))
859 (build-system gnu-build-system)
860 (arguments
861 `(#:phases
862 (modify-phases %standard-phases
863 ;; Source has no configure script
864 (delete 'configure)
865 ;; Buildcodes make the build non-reproducible; remove them
866 (add-after 'unpack 'strip-buildcodes
867 (lambda _
868 (substitute* "generate-buildcodes.sh"
869 (("`date \\+%s`") "0")
870 (("`date`") "0")
871 (("`uname -a`") "Guix"))
872 #t))
873 ;; https://github.com/inflex/ripMIME/pull/16 makes 'mkdir-p-bin-man unnecessary
874 (add-before 'install 'mkdir-p-bin-man
875 (lambda _
876 (mkdir-p (string-append (assoc-ref %outputs "out") "/bin"))
877 (mkdir-p (string-append (assoc-ref %outputs "out") "/man"))
878 #t)))
879 ;; Makefile has no tests
880 #:tests? #f
881 #:make-flags (list (string-append "LOCATION=" (assoc-ref %outputs "out"))
882 "CC=gcc")))
883 (synopsis "Extract attachments from MIME-encoded email")
884 (description
885 "ripMIME is a small program to extract the attached files out of a
886 MIME-encoded email package.")
887 (home-page "https://github.com/inflex/ripMIME")
888 (license license:bsd-3))))
889
890 (define-public mailcap
891 (let* ((version "2.1.49")
892 (tag ;; mailcap tags their releases like this: rMajor-minor-patch
893 (string-append "r" (string-join (string-split version #\.) "-"))))
894 (package
895 (name "mailcap")
896 (version version)
897 (source
898 (origin
899 (method git-fetch)
900 (uri (git-reference
901 (url "https://pagure.io/mailcap.git")
902 (commit tag)))
903 (file-name (git-file-name name version))
904 (sha256
905 (base32
906 "0ck1fw6gqn51phcfakhfpfq1yziv3gnmgjvswzhj9x0p162n6alj"))))
907 (build-system gnu-build-system)
908 (arguments
909 '(#:phases
910 (modify-phases %standard-phases
911 (delete 'configure)
912 (add-before 'install 'set-dest-dir
913 (lambda* (#:key outputs #:allow-other-keys)
914 (let ((out (assoc-ref outputs "out")))
915 (setenv "DESTDIR" out)
916 (substitute* "Makefile"
917 (("/usr") "")) ; This allows the man page to install.
918 #t))))))
919 (native-inputs
920 `(("python" ,python))) ; for tests
921 (synopsis "MIME type associations for file types")
922 (description
923 "This package provides MIME type associations for file types.")
924 (home-page "https://pagure.io/mailcap")
925 (license (list license:expat ; mailcap.5
926 license:public-domain))))) ; mailcap and mime.types
927
928 (define-public bogofilter
929 (package
930 (name "bogofilter")
931 (version "1.2.5")
932 (source
933 (origin
934 (method url-fetch)
935 (uri (string-append "mirror://sourceforge/bogofilter/bogofilter-stable/"
936 "bogofilter-" version ".tar.xz"))
937 (sha256
938 (base32 "1sl9xrnnlk2sn8gmibhn8li09vnansjbxb9l1182qmgz7cvs2j1j"))))
939 (build-system gnu-build-system)
940 (arguments
941 '(#:phases
942 (modify-phases %standard-phases
943 (add-before 'check 'pre-check
944 (lambda _
945 (substitute* "src/tests/t.frame"
946 (("GREP=/bin/grep")
947 (string-append "GREP=" (which "grep") "\n")))
948 #t)))))
949 (native-inputs `(("flex" ,flex)))
950 (inputs `(("bdb" ,bdb)))
951 (home-page "https://bogofilter.sourceforge.io/")
952 (synopsis "Mail classifier based on a Bayesian filter")
953 (description
954 "Bogofilter is a mail filter that classifies mail as spam or ham
955 (non-spam) by a statistical analysis of the message's header and
956 content (body). The program is able to learn from the user's classifications
957 and corrections. It is based on a Bayesian filter.")
958 (license license:gpl3+)))
959
960 (define-public offlineimap
961 (package
962 (name "offlineimap")
963 (version "7.3.3")
964 (source (origin
965 (method git-fetch)
966 (uri (git-reference
967 (url "https://github.com/OfflineIMAP/offlineimap")
968 (commit (string-append "v" version))))
969 (file-name (git-file-name name version))
970 (sha256
971 (base32
972 "1gg8ry67i20qapj4z20am9bm67m2q28kixcj7ja75m897vhzarnq"))))
973 (build-system python-build-system)
974 (native-inputs
975 `(("asciidoc" ,asciidoc)))
976 (inputs
977 `(("python2-pysqlite" ,python2-pysqlite)
978 ("python2-rfc6555" ,python2-rfc6555)
979 ("python2-six" ,python2-six)))
980 (arguments
981 ;; The setup.py script expects python-2.
982 `(#:python ,python-2
983 ;; Tests require a modifiable IMAP account.
984 #:tests? #f
985 #:phases
986 (modify-phases %standard-phases
987 (add-after 'build 'build-documentation
988 (lambda _
989 (substitute* "docs/Makefile"
990 ;; Prevent xmllint and xsltproc from downloading a DTD file.
991 (("a2x -v") "a2x --no-xmllint --xsltproc-opts=--nonet -v"))
992 (invoke "make" "-C" "docs" "man")))
993 (add-after 'install 'install-documentation
994 (lambda* (#:key outputs #:allow-other-keys)
995 (let* ((out (assoc-ref outputs "out"))
996 (man (string-append out "/share/man")))
997 (install-file "docs/offlineimap.1" (string-append man "/man1"))
998 (install-file "docs/offlineimapui.7" (string-append man "/man7"))
999 #t))))))
1000 (home-page "https://www.offlineimap.org")
1001 (synopsis "Sync emails between two repositories")
1002 (description
1003 "OfflineImap synchronizes emails between two repositories, so that you
1004 can read the same mailbox from multiple computers. It supports IMAP as REMOTE
1005 repository and Maildir/IMAP as LOCAL repository.")
1006 (license license:gpl2+)))
1007
1008 (define-public emacs-mew
1009 (package
1010 (name "emacs-mew")
1011 (version "6.8")
1012 (source (origin
1013 (method url-fetch)
1014 (uri (string-append "https://mew.org/Release/mew-"
1015 version ".tar.gz"))
1016 (sha256
1017 (base32
1018 "0ixzyq33l6j34410kqav3lwn2wx171zvqd3irvns2jvhrbww8i6g"))))
1019 (native-inputs
1020 `(("emacs" ,emacs)))
1021 (propagated-inputs
1022 `(("ruby-sqlite3" ,ruby-sqlite3) ; optional for the database of messages
1023 ("ruby" ,ruby))) ; to set GEM_PATH so ruby-sqlite3 is found at runtime
1024 (build-system gnu-build-system)
1025 (arguments
1026 (let ((elisp-dir "/share/emacs/site-lisp")
1027 (icon-dir "/share/mew"))
1028 `(#:modules ((guix build gnu-build-system)
1029 (guix build utils)
1030 (guix build emacs-utils))
1031 #:imported-modules (,@%gnu-build-system-modules
1032 (guix build emacs-utils))
1033 #:configure-flags
1034 (list (string-append "--with-elispdir=" %output ,elisp-dir)
1035 (string-append "--with-etcdir=" %output ,icon-dir))
1036 #:phases
1037 (modify-phases %standard-phases
1038 (add-after 'configure 'patch-mew-icon-directory
1039 (lambda* (#:key outputs #:allow-other-keys)
1040 (emacs-substitute-sexps "mew-key.el"
1041 ("(def.* mew-icon-directory"
1042 `(progn
1043 (add-to-list 'image-load-path 'mew-icon-directory)
1044 ,(string-append (assoc-ref outputs "out") ,icon-dir))))
1045 #t))
1046 (add-after 'install 'generate-autoloads
1047 (lambda* (#:key outputs #:allow-other-keys)
1048 (emacs-generate-autoloads
1049 "mew" (string-append (assoc-ref outputs "out") ,elisp-dir))
1050 #t)))
1051 #:tests? #f)))
1052 (home-page "https://mew.org")
1053 (synopsis "Emacs e-mail client")
1054 (description "Mew (Messaging in the Emacs World) is a user interface
1055 for text messages, multimedia messages (MIME), news articles and
1056 security functionality including PGP, S/MIME, SSH, and SSL.")
1057 (license license:bsd-3)))
1058
1059 (define-public mu
1060 (package
1061 (name "mu")
1062 (version "1.4.14")
1063 (source (origin
1064 (method url-fetch)
1065 (uri (string-append "https://github.com/djcb/mu/releases/"
1066 "download/" version "/"
1067 "mu-" version ".tar.xz"))
1068 (sha256
1069 (base32
1070 "1fk0zyxajwyzp1f8yn7imbqq77s2w5cab5m9jla4zrybwkdi0r6z"))))
1071 (build-system gnu-build-system)
1072 (native-inputs
1073 `(("pkg-config" ,pkg-config)
1074 ("glib" ,glib "bin") ; for gtester
1075 ("emacs" ,emacs-minimal)
1076 ("tzdata" ,tzdata-for-tests))) ; for mu/test/test-mu-query.c
1077 (inputs
1078 `(("xapian" ,xapian)
1079 ("guile" ,guile-2.2)
1080 ("glib" ,glib)
1081 ("gmime" ,gmime)))
1082 (arguments
1083 `(#:modules ((guix build gnu-build-system)
1084 (guix build utils)
1085 (guix build emacs-utils))
1086 #:imported-modules (,@%gnu-build-system-modules
1087 (guix build emacs-utils))
1088 #:phases
1089 (modify-phases %standard-phases
1090 (add-after 'unpack 'patch-configure
1091 ;; By default, elisp code goes to "share/emacs/site-lisp/mu4e",
1092 ;; so our Emacs package can't find it. Setting "--with-lispdir"
1093 ;; configure flag doesn't help because "mu4e" will be added to
1094 ;; the lispdir anyway, so we have to modify "configure.ac".
1095 (lambda _
1096 (substitute* "configure"
1097 (("^ +lispdir=\"\\$\\{lispdir\\}/mu4e/\".*") "")
1098 ;; Use latest Guile
1099 (("guile-2.0") "guile-2.2"))
1100 (substitute* '("guile/Makefile.in"
1101 "guile/mu/Makefile.in")
1102 (("share/guile/site/2.0/") "share/guile/site/2.2/"))
1103 #t))
1104 (add-after 'unpack 'patch-bin-sh-in-tests
1105 (lambda _
1106 (substitute* '("guile/tests/test-mu-guile.c"
1107 "mu/test-mu-cmd.c"
1108 "mu/test-mu-cmd-cfind.c"
1109 "mu/test-mu-query.c"
1110 "mu/test-mu-threads.c")
1111 (("/bin/sh") (which "sh")))
1112 #t))
1113 (add-before 'install 'fix-ffi
1114 (lambda* (#:key outputs #:allow-other-keys)
1115 (substitute* "guile/mu.scm"
1116 (("\"libguile-mu\"")
1117 (format #f "\"~a/lib/libguile-mu\""
1118 (assoc-ref outputs "out"))))
1119 #t))
1120 (add-before 'check 'check-tz-setup
1121 (lambda* (#:key inputs #:allow-other-keys)
1122 ;; For mu/test/test-mu-query.c
1123 (setenv "TZDIR"
1124 (string-append (assoc-ref inputs "tzdata")
1125 "/share/zoneinfo"))
1126 #t))
1127 (add-after 'install 'install-emacs-autoloads
1128 (lambda* (#:key outputs #:allow-other-keys)
1129 (emacs-generate-autoloads
1130 "mu4e"
1131 (string-append (assoc-ref outputs "out")
1132 "/share/emacs/site-lisp"))
1133 #t)))))
1134 (home-page "https://www.djcbsoftware.nl/code/mu/")
1135 (synopsis "Quickly find emails")
1136 (description
1137 "Mu is a tool for dealing with e-mail messages stored in the
1138 Maildir-format. Mu's purpose in life is to help you to quickly find the
1139 messages you need; in addition, it allows you to view messages, extract
1140 attachments, create new maildirs, and so on.")
1141 (license license:gpl3+)))
1142
1143 (define-public alot
1144 (package
1145 (name "alot")
1146 (version "0.9.1")
1147 (source (origin
1148 (method git-fetch)
1149 ;; package author intends on distributing via github rather
1150 ;; than pypi:
1151 ;; https://github.com/pazz/alot/issues/877#issuecomment-230173331
1152 (uri (git-reference
1153 (url "https://github.com/pazz/alot")
1154 (commit version)))
1155 (file-name (git-file-name name version))
1156 (sha256
1157 (base32
1158 "0s94m17yph1gq9f2svipb3bbwbw1s4j3zf2xkg5h91006v8286r6"))))
1159 (build-system python-build-system)
1160 (arguments
1161 `(#:phases
1162 (modify-phases %standard-phases
1163 (add-before 'check 'fix-tests
1164 (lambda* (#:key inputs #:allow-other-keys)
1165 (let ((gnupg (assoc-ref inputs "gnupg")))
1166 (substitute* "tests/test_crypto.py"
1167 (("gpg2") (string-append gnupg "/bin/gpg")))
1168 #t)))
1169 (add-before 'check 'disable-failing-tests
1170 ;; FIXME: Investigate why these tests are failing.
1171 (lambda _
1172 (substitute* "tests/test_helper.py"
1173 (("def test_env_set") "def _test_env_set"))
1174 (substitute* "tests/commands/test_global.py"
1175 (("def test_no_spawn_no_stdin_attached")
1176 "def _test_no_spawn_no_stdin_attached"))
1177 #t)))))
1178 (native-inputs
1179 `(("procps" ,procps)
1180 ("python-mock" ,python-mock)))
1181 (inputs
1182 `(("gnupg" ,gnupg)
1183 ("python-magic" ,python-magic)
1184 ("python-configobj" ,python-configobj)
1185 ("python-twisted" ,python-twisted)
1186 ("python-service-identity" ,python-service-identity)
1187 ("python-urwid" ,python-urwid)
1188 ("python-urwidtrees" ,python-urwidtrees)
1189 ("python-gpg" ,python-gpg)
1190 ("python-notmuch" ,python-notmuch)))
1191 (home-page "https://github.com/pazz/alot")
1192 (synopsis "Command-line MUA using Notmuch")
1193 (description
1194 "Alot is a terminal-based mail user agent based on the Notmuch mail
1195 indexer. It is written in Python using the @code{urwid} toolkit and features
1196 a modular and command prompt driven interface to provide a full mail user
1197 agent (@dfn{MUA}) experience as an alternative to the Emacs mode shipped with
1198 Notmuch.")
1199 (license license:gpl3+)))
1200
1201 (define-public notifymuch
1202 (let
1203 ((commit "9d4aaf54599282ce80643b38195ff501120807f0")
1204 (revision "1"))
1205 (package
1206 (name "notifymuch")
1207 (version (string-append "0.1-" revision "." (string-take commit 7)))
1208 (source
1209 (origin
1210 (method git-fetch)
1211 (uri (git-reference
1212 (url "https://github.com/kspi/notifymuch")
1213 (commit commit)))
1214 (sha256
1215 (base32
1216 "1lssr7iv43mp5v6nzrfbqlfzx8jcc7m636wlfyhhnd8ydd39n6k4"))
1217 (file-name (string-append name "-" version "-checkout"))))
1218 (build-system python-build-system)
1219 (inputs
1220 `(("python-notmuch" ,python-notmuch)
1221 ("python-pygobject" ,python-pygobject)
1222 ("gobject-introspection" ,gobject-introspection)
1223 ("libnotify" ,libnotify)
1224 ("gtk+" ,gtk+)))
1225 (arguments
1226 `(#:phases
1227 (modify-phases %standard-phases
1228 (add-after 'install 'wrap-binary
1229 (lambda* (#:key outputs #:allow-other-keys)
1230 (let* ((out (assoc-ref outputs "out"))
1231 (bin (string-append out "/bin/notifymuch")))
1232 (wrap-program bin
1233 `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))
1234 `("GI_TYPELIB_PATH" ":" prefix
1235 (,(getenv "GI_TYPELIB_PATH")
1236 ,(string-append out "/lib/girepository-1.0")))))
1237 #t)))))
1238 (home-page "https://github.com/kspi/notifymuch")
1239 (synopsis "Displays notifications for changes in the notmuch email database")
1240 (description "notifymuch displays desktop notifications for messages in
1241 the notmuch database. The notifications are sent using libnotify to a
1242 notification daemon. The query to find messages to send a notification about
1243 is configurable, and a notification for the same message will not be send
1244 within a configurable period (defaults to 48 hours). To use notifymuch, run
1245 @command{notifymuch} after new mail is indexed, this can be automated by
1246 invoking @command{notifymuch} from the post-new hook.")
1247 (license license:gpl3))))
1248
1249 (define-public notmuch
1250 (package
1251 (name "notmuch")
1252 (version "0.31.3")
1253 (source (origin
1254 (method url-fetch)
1255 (uri (string-append "https://notmuchmail.org/releases/notmuch-"
1256 version ".tar.xz"))
1257 (sha256
1258 (base32
1259 "1jisflxdly1nlyy17212ch3hk96dns4j9f5552jz724gs2p42h28"))))
1260 (build-system gnu-build-system)
1261 (arguments
1262 `(#:modules ((guix build gnu-build-system)
1263 ((guix build emacs-build-system) #:prefix emacs:)
1264 (guix build utils))
1265 #:imported-modules (,@%gnu-build-system-modules
1266 (guix build emacs-build-system)
1267 (guix build emacs-utils))
1268 #:make-flags
1269 (list "V=1" ; verbose test output
1270 "NOTMUCH_TEST_TIMEOUT=1h") ; don't fail on slow machines
1271 #:phases (modify-phases %standard-phases
1272 (add-after 'unpack 'patch-notmuch-lib.el
1273 (lambda _
1274 (substitute* "emacs/notmuch-lib.el"
1275 (("/bin/sh") (which "sh")))
1276 #t))
1277 (replace 'configure
1278 (lambda* (#:key outputs #:allow-other-keys)
1279 (setenv "CC" "gcc")
1280 (setenv "CONFIG_SHELL" (which "sh"))
1281
1282 (let* ((out (assoc-ref outputs "out"))
1283 (elisp
1284 (string-append out "/share/emacs/site-lisp/")))
1285 (invoke "./configure"
1286 (string-append "--prefix=" out)
1287 (string-append "--emacslispdir=" elisp)
1288 (string-append "--emacsetcdir=" elisp)))))
1289 (add-before 'check 'disable-failing-tests
1290 ;; FIXME: Investigate why these tests are failing,
1291 ;; and try removing this for notmuch versions > 0.31.
1292 (lambda _
1293 (substitute* "test/T356-protected-headers.sh"
1294 (("\\$NOTMUCH_GMIME_X509_CERT_VALIDITY") "0"))
1295 #t))
1296 (add-before 'check 'prepare-test-environment
1297 (lambda _
1298 (setenv "TEST_CC" "gcc")
1299 ;; Patch various inline shell invocations.
1300 (substitute* (find-files "test" "\\.sh$")
1301 (("/bin/sh") (which "sh")))
1302 #t))
1303 (add-after 'install 'make-autoloads
1304 (assoc-ref emacs:%standard-phases 'make-autoloads)))))
1305 (native-inputs
1306 `(("bash-completion" ,bash-completion)
1307 ("emacs" ,emacs-no-x) ; -minimal lacks libxml, needed for some tests
1308 ("pkg-config" ,pkg-config)
1309 ("python" ,python)
1310 ("python-docutils" ,python-docutils)
1311 ("sphinx" ,python-sphinx)
1312
1313 ;; The following are required for tests only.
1314 ("which" ,which)
1315 ("dtach" ,dtach)
1316 ("gnupg" ,gnupg)
1317 ("man" ,man-db)
1318 ("perl" ,perl)))
1319 (inputs
1320 `(("glib" ,glib)
1321 ("gmime" ,gmime)
1322 ("talloc" ,talloc)
1323 ("xapian" ,xapian)
1324 ("zlib" ,zlib)))
1325 (home-page "https://notmuchmail.org/")
1326 (synopsis "Thread-based email index, search, and tagging")
1327 (description
1328 "Notmuch is a command-line based program for indexing, searching, read-
1329 ing, and tagging large collections of email messages.")
1330 (license license:gpl3+)))
1331
1332 (define-public notmuch-addrlookup-c
1333 (package
1334 (name "notmuch-addrlookup-c")
1335 (version (string-append "9"))
1336 (source (origin
1337 (method git-fetch)
1338 (uri (git-reference
1339 (url "https://github.com/aperezdc/notmuch-addrlookup-c")
1340 (commit (string-append "v" version))))
1341 (file-name (string-append name "-" version "-checkout"))
1342 (sha256
1343 (base32
1344 "1j3zdx161i1x4w0nic14ix5i8hd501rb31daf8api0k8855sx4rc"))))
1345 (build-system gnu-build-system)
1346 (arguments
1347 '(#:tests? #f ; no tests
1348 #:make-flags (list "CC=gcc")
1349 #:phases (modify-phases %standard-phases
1350 (delete 'configure)
1351 ;; Remove vim code completion config, it's not needed to
1352 ;; build (or be patched).
1353 (add-before 'patch-source-shebangs 'delete-ycm-file
1354 (lambda _ (delete-file ".ycm_extra_conf.py")))
1355 (replace 'install
1356 (lambda* (#:key outputs #:allow-other-keys)
1357 (let ((bin (string-append
1358 (assoc-ref outputs "out") "/bin")))
1359 (install-file "notmuch-addrlookup" bin)))))))
1360 (native-inputs
1361 `(("pkg-config" ,pkg-config)))
1362 (inputs
1363 `(("glib" ,glib)
1364 ("notmuch" ,notmuch)))
1365 (home-page "https://github.com/aperezdc/notmuch-addrlookup-c")
1366 (synopsis "Address lookup tool for Notmuch")
1367 (description "This is an address lookup tool using a Notmuch database,
1368 useful for email address completion.")
1369 (license license:expat)))
1370
1371 (define-public python-notmuch
1372 (package
1373 (name "python-notmuch")
1374 (version (package-version notmuch))
1375 ;; Notmuch python bindings are now unavailable on pypi. The
1376 ;; bindings are distributed via the notmuch release tarball.
1377 (source (package-source notmuch))
1378 (build-system python-build-system)
1379 (inputs `(("notmuch" ,notmuch)))
1380 (arguments
1381 `(#:tests? #f ; no "test" target
1382 #:phases
1383 (modify-phases %standard-phases
1384 ;; This python package lives in a subdirectory of the notmuch source
1385 ;; tree, so chdir into it before building.
1386 (add-after 'unpack 'enter-python-dir
1387 (lambda _ (chdir "bindings/python") #t))
1388 ;; Make sure the correct notmuch shared library gets loaded.
1389 (add-before 'build 'set-libnotmuch-file-name
1390 (lambda* (#:key inputs #:allow-other-keys)
1391 (let ((notmuch (assoc-ref inputs "notmuch")))
1392 (substitute* "notmuch/globals.py"
1393 (("libnotmuch\\.so\\.")
1394 (string-append notmuch "/lib/libnotmuch.so.")))
1395 #t))))))
1396 (home-page (package-home-page notmuch))
1397 (synopsis "Python bindings of the Notmuch mail indexing library")
1398 (description
1399 "This package provides Python bindings to use the Notmuch mail indexing
1400 and search library.")
1401 (license license:gpl3+)))
1402
1403 (define-public python2-notmuch
1404 (package-with-python2 python-notmuch))
1405
1406 (define-public muchsync
1407 (package
1408 (name "muchsync")
1409 (version "6")
1410 (source
1411 (origin
1412 (method url-fetch)
1413 (uri (string-append "http://www.muchsync.org/src/"
1414 "muchsync-" version ".tar.gz"))
1415 (sha256
1416 (base32 "1s799kx16nm5ry1fcqcc0grgxrwnnp4cnzd0hzwbkvc5v2sf6g8b"))))
1417 (build-system gnu-build-system)
1418 (native-inputs
1419 `(("pandoc" ,pandoc)
1420 ("pkg-config" ,pkg-config)))
1421 (inputs
1422 `(("libcrypto" ,openssl)
1423 ("notmuch" ,notmuch)
1424 ("sqlite" ,sqlite)
1425 ("xapian" ,xapian)))
1426 (home-page "http://www.muchsync.org/")
1427 (synopsis "Synchronize notmuch mail across machines")
1428 (description
1429 "Muchsync brings Notmuch to all of your computers by synchronizing your
1430 mail messages and Notmuch tags across machines. The protocol is heavily
1431 pipelined to work efficiently over high-latency networks such as mobile
1432 broadband. Muchsync supports arbitrary pairwise synchronization among
1433 replicas. A version-vector-based algorithm allows it to exchange only the
1434 minimum information necessary to bring replicas up to date regardless of which
1435 pairs have previously synchronized.")
1436 (license license:gpl2+))) ; with OpenSSL libcrypto exception
1437
1438 (define-public getmail
1439 (package
1440 (name "getmail")
1441 (version "5.14")
1442 (source
1443 (origin
1444 (method url-fetch)
1445 (uri (string-append "http://pyropus.ca/software/getmail/old-versions/"
1446 "getmail-" version ".tar.gz"))
1447 (sha256
1448 (base32 "1hcrd9h4g12f5gvl1djsbchcjry02ghq4icdr897s8v48pkrzagk"))))
1449 (build-system python-build-system)
1450 (arguments
1451 `(#:tests? #f ; no tests
1452 #:python ,python-2))
1453 (home-page "http://pyropus.ca/software/getmail/")
1454 (synopsis "Mail retriever")
1455 (description
1456 "A flexible, extensible mail retrieval system with support for
1457 POP3, IMAP4, SSL variants of both, maildirs, mboxrd files, external MDAs,
1458 arbitrary message filtering, single-user and domain-mailboxes, and many other
1459 useful features.")
1460
1461 ;; License is specified in file '__init__.py'.
1462 (license license:gpl2)))
1463
1464 (define-public libetpan
1465 (package
1466 (name "libetpan")
1467 (version "1.9.4")
1468 (source (origin
1469 (method git-fetch)
1470 (uri (git-reference
1471 (url "https://github.com/dinhviethoa/libetpan")
1472 (commit version)))
1473 (file-name (git-file-name name version))
1474 (sha256
1475 (base32 "0g7an003simfdn7ihg9yjv7hl2czsmjsndjrp39i7cad8icixscn"))))
1476 (build-system gnu-build-system)
1477 (native-inputs `(("autoconf" ,autoconf-wrapper)
1478 ("automake" ,automake)
1479 ("libtool" ,libtool)
1480 ("pkg-config" ,pkg-config)))
1481 (propagated-inputs
1482 ;; 'libetpan-config --libs' returns '-lssl -lcrypto -lsasl2', so these
1483 ;; libraries need to be propagated.
1484 `(("cyrus-sasl" ,cyrus-sasl)
1485 ("openssl" ,openssl)))
1486 (inputs
1487 `(("curl" ,curl)
1488 ("expat" ,expat)
1489 ("zlib" ,zlib)))
1490 (arguments
1491 '(#:configure-flags
1492 '("--disable-static" "--disable-db")))
1493 (home-page "https://www.etpan.org/libetpan.html")
1494 (synopsis "Portable middleware for email access")
1495 (description
1496 "The purpose of this mail library is to provide a portable, efficient
1497 framework for different kinds of mail access: IMAP, SMTP, POP and NNTP. It
1498 provides an API for C language. It's the low-level API used by MailCore and
1499 MailCore 2.")
1500 (license license:bsd-3)))
1501
1502 (define-public compface
1503 (package
1504 (name "compface")
1505 (version "1.5.2")
1506 (source (origin
1507 (method url-fetch)
1508 (uri (string-append "https://ftp.heanet.ie/mirrors/"
1509 "ftp.xemacs.org/aux/"
1510 "compface-" version ".tar.gz"))
1511 (sha256
1512 (base32
1513 "09b89wg63hg502hsz592cd2h87wdprb1dq1k1y07n89hym2q56d6"))))
1514 (build-system gnu-build-system)
1515 (arguments
1516 `(#:tests? #f))
1517 (synopsis "Portrait image compressor")
1518 (description "This package takes your 48x48x1 portrait image and
1519 compresses it.")
1520 (home-page "https://legacy.cs.indiana.edu/ftp/faces/")
1521 (license (license:x11-style "file://README"))))
1522
1523 (define-public claws-mail
1524 (package
1525 (name "claws-mail")
1526 (version "3.17.8")
1527 (source
1528 (origin
1529 (method url-fetch)
1530 (uri
1531 (string-append "https://www.claws-mail.org/releases/claws-mail-"
1532 version ".tar.xz"))
1533 (sha256
1534 (base32 "1byxmz68lnm2m8q1gnp0lpr3qp7dcwabrw5iqflz9mlm960v5dyd"))))
1535 (build-system glib-or-gtk-build-system)
1536 (arguments
1537 `(#:configure-flags
1538 (list
1539 "--enable-gnutls"
1540 "--enable-pgpmime-plugin"
1541 "--enable-enchant"
1542 "--enable-ldap")
1543 #:make-flags
1544 ;; Disable updating icon cache since it's done by the profile hook.
1545 ;; Conflict with other packages in the profile would be inevitable
1546 ;; otherwise.
1547 (list
1548 "gtk_update_icon_cache=true")
1549 #:phases
1550 (modify-phases %standard-phases
1551 (add-before 'build 'patch-mime
1552 (lambda* (#:key inputs #:allow-other-keys)
1553 (substitute* "src/procmime.c"
1554 (("/usr/share/mime/globs")
1555 (string-append (assoc-ref inputs "mime-info")
1556 "/share/mime/globs"))))))))
1557 (native-inputs
1558 `(("pkg-config" ,pkg-config)))
1559 (inputs
1560 `(("bogofilter" ,bogofilter)
1561 ("curl" ,curl)
1562 ("dbus-glib" ,dbus-glib)
1563 ("enchant" ,enchant)
1564 ("expat" ,expat)
1565 ("ghostscript" ,ghostscript)
1566 ("hicolor-icon-theme" ,hicolor-icon-theme)
1567 ("gnupg" ,gnupg)
1568 ("gnutls" ,gnutls)
1569 ("gpgme" ,gpgme)
1570 ("gtk" ,gtk+-2)
1571 ("libarchive" ,libarchive)
1572 ("libcanberra" ,libcanberra)
1573 ("libetpan" ,libetpan)
1574 ("libical" ,libical)
1575 ("libnotify" ,libnotify)
1576 ("libsm" ,libsm)
1577 ("libxml2" ,libxml2)
1578 ("perl" ,perl)
1579 ("python-2" ,python-2)
1580 ("mime-info" ,shared-mime-info)
1581 ("startup-notification" ,startup-notification)))
1582 (synopsis "GTK-based Email client")
1583 (description "Claws-Mail is an email client (and news reader) based on GTK+.
1584 The appearance and interface are designed to be familiar to new users coming
1585 from other popular email clients, as well as experienced users. Almost all
1586 commands are accessible with the keyboard. Plus, Claws-Mail is extensible via
1587 addons which can add many functionalities to the base client.")
1588 (home-page "https://www.claws-mail.org/")
1589 (license license:gpl3+))) ; most files are actually public domain or x11
1590
1591 (define-public msmtp
1592 (package
1593 (name "msmtp")
1594 (version "1.8.14")
1595 (source
1596 (origin
1597 (method url-fetch)
1598 (uri (string-append "https://marlam.de/msmtp/releases/"
1599 "/msmtp-" version ".tar.xz"))
1600 (sha256
1601 (base32 "1d3knxpwpglg20z4zcsi82mqv9285ah1b1b16k1fk1hlf5fhcvym"))))
1602 (build-system gnu-build-system)
1603 (inputs
1604 `(("libsecret" ,libsecret)
1605 ("gnutls" ,gnutls)
1606 ("zlib" ,zlib)
1607 ("gsasl" ,gsasl)))
1608 (native-inputs
1609 `(("pkg-config" ,pkg-config)))
1610 (home-page "https://marlam.de/msmtp/")
1611 (arguments
1612 `(#:configure-flags (list "--with-libgsasl"
1613 "--with-libidn"
1614 "--with-tls=gnutls")
1615 #:phases
1616 (modify-phases %standard-phases
1617 (add-after 'install 'install-additional-files
1618 (lambda* (#:key outputs #:allow-other-keys)
1619 (let* ((out (assoc-ref outputs "out"))
1620 (bin (string-append out "/bin"))
1621 (doc (string-append out "/share/doc/msmtp"))
1622 (msmtpq "scripts/msmtpq")
1623 (vimfiles (string-append out "/share/vim/vimfiles/plugin")))
1624 (install-file (string-append msmtpq "/msmtpq") bin)
1625 (install-file (string-append msmtpq "/msmtp-queue") bin)
1626 (install-file (string-append msmtpq "/README.msmtpq") doc)
1627 (install-file "scripts/vim/msmtp.vim" vimfiles)
1628 ;; Don't rely on netcat being in the PATH to test for a
1629 ;; connection, instead try tp ing debian.org.
1630 (substitute* (string-append bin "/msmtpq")
1631 (("EMAIL_CONN_TEST=n") "EMAIL_CONN_TEST=p"))
1632 #t))))))
1633 (synopsis
1634 "Simple and easy to use SMTP client with decent sendmail compatibility")
1635 (description
1636 "msmtp is an SMTP client. In the default mode, it transmits a mail to
1637 an SMTP server (for example at a free mail provider) which takes care of further
1638 delivery.")
1639 (license license:gpl3+)))
1640
1641 (define-public exim
1642 (package
1643 (name "exim")
1644 (version "4.94")
1645 (source
1646 (origin
1647 (method url-fetch)
1648 (uri (let ((file-name (string-append "exim-" version ".tar.xz")))
1649 (list (string-append "https://ftp.exim.org/pub/exim/exim4/"
1650 file-name)
1651 ;; ‘Fix’ releases (exim-x.y.z.f) are kept separately.
1652 (string-append "https://ftp.exim.org/pub/exim/exim4/fixes/"
1653 file-name)
1654 ;; After a new non-fix release, the old one is moved here.
1655 (string-append "https://ftp.exim.org/pub/exim/exim4/old/"
1656 file-name))))
1657 (sha256
1658 (base32 "1nsb2i5mqxfz1sl1bmbxmpb2qiaf3wffhfiw4j9vfpagy3xfhzpp"))))
1659 (build-system gnu-build-system)
1660 (inputs
1661 `(("bdb" ,bdb-5.3) ; ‘#error Version 6 and later BDB API is not supported’
1662 ("gnutls" ,gnutls/dane)
1663 ("gzip" ,gzip)
1664 ("bzip2" ,bzip2)
1665 ("xz" ,xz)
1666 ("perl" ,perl)
1667 ("libnsl" ,libnsl)
1668 ("libxt" ,libxt)
1669 ("libxaw" ,libxaw)))
1670 (native-inputs
1671 `(("pcre" ,pcre "bin")
1672 ("perl" ,perl)
1673 ("pkg-config" ,pkg-config)))
1674 (arguments
1675 '(#:phases
1676 (modify-phases %standard-phases
1677 (replace 'configure
1678 ;; We'd use #:make-flags but the top-level Makefile calls others
1679 ;; recursively, so just set all variables this way.
1680 (lambda* (#:key outputs inputs #:allow-other-keys)
1681 (substitute* '("Makefile" "OS/Makefile-Default")
1682 (("(RM_COMMAND=).*" all var)
1683 (string-append var "rm\n")))
1684 (copy-file "src/EDITME" "Local/Makefile")
1685 (copy-file "exim_monitor/EDITME" "Local/eximon.conf")
1686 (let ((out (assoc-ref outputs "out"))
1687 (gzip (assoc-ref inputs "gzip"))
1688 (bzip2 (assoc-ref inputs "bzip2"))
1689 (xz (assoc-ref inputs "xz")))
1690 (substitute* '("Local/Makefile")
1691 (("(BIN_DIRECTORY=).*" all var)
1692 (string-append var out "/bin\n"))
1693 (("(CONFIGURE_FILE=).*" all var)
1694 (string-append var out "/etc/exim.conf\n"))
1695 (("(EXIM_USER=).*" all var)
1696 (string-append var "nobody\n"))
1697 (("(FIXED_NEVER_USERS=).*" all var)
1698 (string-append var "\n")) ; XXX no root in build environment
1699 (("(COMPRESS_COMMAND=).*" all var)
1700 (string-append var gzip "/bin/gzip\n"))
1701 (("(ZCAT_COMMAND=).*" all var)
1702 (string-append var gzip "/bin/zcat\n"))
1703 (("# (USE_GNUTLS(|_PC)=.*)" all line)
1704 (string-append line "\n"))
1705 (("# (AUTH_CRAM_MD5=yes)" all line) line)
1706 (("# (AUTH_DOVECOT=yes)" all line) line)
1707 (("# (AUTH_EXTERNAL=yes)" all line) line)
1708 (("# (AUTH_PLAINTEXT=yes)" all line) line)
1709 (("# (AUTH_SPA=yes)" all line) line)
1710 (("# (AUTH_TLS=yes)" all line) line))
1711 ;; This file has hard-coded relative file names for tools despite
1712 ;; the zcat configuration above.
1713 (substitute* '("src/exigrep.src")
1714 (("'zcat'") (string-append "'" gzip "/bin/zcat'"))
1715 (("'bzcat'") (string-append "'" bzip2 "/bin/bzcat'"))
1716 (("'xzcat'") (string-append "'" xz "/bin/xzcat'"))
1717 (("'lzma'") (string-append "'" xz "/bin/lzma'"))))
1718 #t))
1719 (add-before 'build 'fix-sh-paths
1720 (lambda* (#:key inputs #:allow-other-keys)
1721 (substitute* '("scripts/lookups-Makefile" "scripts/reversion")
1722 (("SHELL=/bin/sh") "SHELL=sh"))
1723 (substitute* '("scripts/Configure-config.h")
1724 (("\\| /bin/sh") "| sh"))
1725 (let ((bash (assoc-ref inputs "bash")))
1726 (substitute* '("scripts/Configure-eximon")
1727 (("#!/bin/sh") (string-append "#!" bash "/bin/sh"))))
1728 #t))
1729 (add-before 'build 'build-reproducibly
1730 (lambda _
1731 ;; The ‘compilation number’ is incremented for every build from the
1732 ;; same source tree. It appears to vary over different (parallel?)
1733 ;; builds. Make it a ‘constant number’ instead.
1734 (substitute* "src/version.c"
1735 (("#include \"cnumber.h\"") "1")))))
1736 #:make-flags
1737 (list "CC=gcc"
1738 "INSTALL_ARG=-no_chown")
1739 ;; No 'check' target. There is a test suite in test/, which assumes that
1740 ;; certain build options were (not) used and that it can freely ‘sudo’.
1741 #:tests? #f))
1742 (home-page "https://www.exim.org/")
1743 (synopsis
1744 "Message Transfer Agent (MTA) developed at the University of Cambridge")
1745 (description
1746 "Exim is a message transfer agent (MTA) developed at the University of
1747 Cambridge for use on Unix systems connected to the Internet. In style it is
1748 similar to Smail 3, but its facilities are more general. There is a great
1749 deal of flexibility in the way mail can be routed, and there are extensive
1750 facilities for checking incoming mail.")
1751 (license license:gpl2+)))
1752
1753 (define-public dovecot
1754 (package
1755 (name "dovecot")
1756 ;; Also update dovecot-pigeonhole when updating to a new minor version.
1757 (version "2.3.13")
1758 (source
1759 (origin
1760 (method url-fetch)
1761 (uri (string-append "https://www.dovecot.org/releases/"
1762 (version-major+minor version) "/"
1763 "dovecot-" version ".tar.gz"))
1764 (sha256
1765 (base32 "1i7ijss79a23v7b6lycfzaa8r5rh01k0h0b9h0j4a6n11sw7by53"))))
1766 (build-system gnu-build-system)
1767 (native-inputs
1768 `(("pkg-config" ,pkg-config)))
1769 (inputs
1770 `(("bzip2" ,bzip2)
1771 ("clucene" ,clucene)
1772 ("icu4c" ,icu4c)
1773 ("libsodium" ,libsodium) ; extra password algorithms
1774 ("libstemmer" ,libstemmer)
1775 ;; FIXME: The 'test-backtrace' tests fail on arm when using glibc's
1776 ;; backtrace_symbol() function so fallback to using libunwind.
1777 ,@(if (target-arm?)
1778 `(("libunwind" ,libunwind))
1779 '())
1780 ("linux-pam" ,linux-pam)
1781 ("lz4" ,lz4)
1782 ("openssl" ,openssl)
1783 ("sqlite" ,sqlite)
1784 ("zlib" ,zlib)
1785 ("zstd" ,zstd "lib")))
1786 (arguments
1787 `(#:configure-flags '("--sysconfdir=/etc"
1788 "--localstatedir=/var"
1789 "--with-sqlite" ; not auto-detected
1790 "--with-lucene") ; not auto-detected
1791 #:phases
1792 (modify-phases %standard-phases
1793 (add-after 'unpack 'patch-file-names
1794 (lambda _
1795 (substitute* "src/lib-program-client/test-program-client-local.c"
1796 (("(/bin/| )cat") (which "cat"))
1797 (("/bin/echo") (which "echo"))
1798 (("/bin/false") (which "false"))
1799 (("/bin/sh") (which "bash"))
1800 (("head") (which "head"))
1801 (("sleep") (which "sleep")))
1802 (substitute* (list "src/lib-smtp/test-bin/sendmail-exit-1.sh"
1803 "src/lib-smtp/test-bin/sendmail-success.sh")
1804 (("cat") (which "cat")))
1805 #t))
1806 (replace 'install
1807 (lambda* (#:key make-flags #:allow-other-keys)
1808 ;; Simple hack to avoid installing a trivial README in /etc.
1809 (apply invoke "make" "install" "sysconfdir=/tmp/bogus"
1810 make-flags))))))
1811 (home-page "https://www.dovecot.org")
1812 (synopsis "Secure POP3/IMAP server")
1813 (description
1814 "Dovecot is a mail server whose major goals are security and reliability.
1815 It supports mbox/Maildir and its own dbox/mdbox formats.")
1816 ;; Most source files are covered by either lgpl2.1 or expat. The SHA code
1817 ;; is covered by a variant of BSD-3, and UnicodeData.txt is covered by the
1818 ;; Unicode, Inc. License Agreement for Data Files and Software.
1819 (license (list license:lgpl2.1 license:expat
1820 (license:non-copyleft "file://COPYING")))))
1821
1822 (define-public dovecot-pigeonhole
1823 (let ((dovecot-version (version-major+minor (package-version dovecot))))
1824 (package
1825 (name "dovecot-pigeonhole")
1826 (version "0.5.13")
1827 (source
1828 (origin
1829 (method url-fetch)
1830 (uri (string-append
1831 "https://pigeonhole.dovecot.org/releases/" dovecot-version "/"
1832 "dovecot-" dovecot-version "-pigeonhole-" version ".tar.gz"))
1833 (sha256
1834 (base32 "05xz2d82ck6lmv94nbc3qff09j8b60a5640i3fmqwqsvv9kfa7wi"))
1835 (modules '((guix build utils)))
1836 (snippet
1837 '(begin
1838 ;; RFC licencing is ad-hoc and rarely free. Remove them all.
1839 (delete-file-recursively "doc/rfc")
1840 (substitute* "configure"
1841 (("doc/rfc/Makefile") ""))
1842 (substitute* "doc/Makefile.in"
1843 (("rfc ") ""))
1844 #t))))
1845 (build-system gnu-build-system)
1846 (arguments
1847 `(#:configure-flags
1848 (list "--disable-static"
1849 "--with-dovecot-install-dirs=no"
1850 (string-append "--with-dovecot="
1851 (assoc-ref %build-inputs "dovecot")
1852 "/lib/dovecot")
1853 (string-append "--docdir="
1854 (assoc-ref %outputs "out")
1855 "/share/doc/" ,name "-" ,version)
1856 (string-append "--with-moduledir="
1857 (assoc-ref %outputs "out")
1858 "/lib/dovecot"))
1859 #:phases
1860 (modify-phases %standard-phases
1861 (add-after 'unpack 'patch-file-names
1862 (lambda* (#:key outputs #:allow-other-keys)
1863 (let* ((out (assoc-ref outputs "out"))
1864 (libexec (string-append out "/libexec/dovecot")))
1865 (substitute* "src/managesieve/managesieve-settings.c"
1866 (("\\.executable = \"managesieve\"")
1867 (string-append ".executable = \"" libexec
1868 "/managesieve\"")))
1869 (substitute* "src/managesieve-login/managesieve-login-settings.c"
1870 (("\\.executable = \"managesieve-login\"")
1871 (string-append ".executable = \"" libexec
1872 "/managesieve-login\"")))
1873 #t))))))
1874 (native-inputs
1875 `(("pkg-config" ,pkg-config)))
1876 (inputs
1877 `(("dovecot" ,dovecot)))
1878 (home-page "https://pigeonhole.dovecot.org")
1879 (synopsis "Dovecot Sieve mail filtering plug-in and ManageSieve service")
1880 (description
1881 "Pigeonhole adds support for the Sieve language (RFC 5228) and the
1882 ManageSieve protocol (RFC 5804) to the Dovecot e-mail server.
1883
1884 @dfn{Sieve} is a language for filtering incoming mail. Messages can be
1885 forwarded or sorted into separate folders. Unwanted messages can be rejected
1886 or discarded, and, when the user is not available, the Sieve interpreter can
1887 send an automated reply.
1888
1889 Sieve is meant to be simple, extensible, and system-independent. The
1890 intention is to make it impossible to write anything more complex (and
1891 dangerous) than simple mail filters. Unlike most other mail filtering script
1892 languages, Sieve does not allow users to execute arbitrary programmes.
1893
1894 Through the @dfn{ManageSieve} protocol, users can remotely manage their Sieve
1895 scripts without needing file system access. The server accepts only valid
1896 scripts to prevent embarrassing errors later on.")
1897 (license license:lgpl2.1))))
1898
1899 (define-public dovecot-trees
1900 (package
1901 (name "dovecot-trees")
1902 (version "2.1.0")
1903 (source
1904 (origin
1905 (method url-fetch)
1906 (uri (string-append "https://0xacab.org/riseuplabs/trees/repository/"
1907 "archive.tar.gz?ref=v" version))
1908 (file-name (string-append name "-" version ".tar.gz"))
1909 (sha256
1910 (base32
1911 "0rkk10b1bsjz979sc864vpgcdchy7yxwmyv4ik50lar1h6awdnrf"))
1912 (patches
1913 (search-patches "dovecot-trees-support-dovecot-2.3.patch"))))
1914 (build-system gnu-build-system)
1915 (native-inputs
1916 `(("automake" ,automake)
1917 ("autoconf" ,autoconf)
1918 ("libtool" ,libtool)
1919 ("dovecot" ,dovecot)
1920 ("pkg-config" ,pkg-config)))
1921 (inputs
1922 `(("libsodium" ,libsodium)))
1923 (arguments
1924 `(#:tests? #f ;No tests exist.
1925 #:configure-flags (list (string-append "--with-dovecot="
1926 (assoc-ref %build-inputs "dovecot")
1927 "/lib/dovecot"))))
1928 (home-page "https://0xacab.org/riseuplabs/trees")
1929 (synopsis "NaCL-based Dovecot email storage encryption plugin")
1930 (description
1931 "Technology for Resting Email Encrypted Storage (TREES) is a NaCL-based
1932 Dovecot encryption plugin. This plugin adds individually encrypted mail
1933 storage to the Dovecot IMAP server. It is inspired by Posteo's scrambler
1934 which uses OpenSSL and RSA key pairs. TREES works in a similar way, but uses
1935 the Sodium crypto library (based on NaCL).
1936
1937 How it works:
1938 @enumerate
1939 @item On IMAP log in, the user's cleartext password is passed to the plugin.
1940 @item The plugin creates an argon2 digest from the password.
1941 @item This password digest is used as a symmetric secret to decrypt a libsodium secretbox.
1942 @item Inside the secretbox is stored a Curve25519 private key.
1943 @item The Curve25519 private key is used to decrypt each individual message,
1944 using libsodium sealed boxes.
1945 @item New mail is encrypted as it arrives using the Curve25519 public key.
1946 @end enumerate\n")
1947 (license license:agpl3)))
1948
1949 (define-public dovecot-libsodium-plugin
1950 (let ((commit "044de73c01c35385df0105f6b387bec5d5317ce7")
1951 (revision "1"))
1952 (package
1953 (name "dovecot-libsodium-plugin")
1954 (version (string-append "0.0.0-" revision "." (string-take commit 7)))
1955 (source
1956 (origin
1957 (method git-fetch)
1958 (uri (git-reference
1959 (url "https://github.com/LuckyFellow/dovecot-libsodium-plugin")
1960 (commit commit)))
1961 (file-name (string-append name "-" version "-checkout"))
1962 (sha256
1963 (base32
1964 "13h07l7xy713zchnj2p9fhvq7fdl4zy1ai94li3ygkqjjj8hrgas"))))
1965 (build-system gnu-build-system)
1966 (native-inputs
1967 `(("automake" ,automake)
1968 ("autoconf" ,autoconf)
1969 ("libtool" ,libtool)
1970 ("dovecot" ,dovecot)
1971 ("pkg-config" ,pkg-config)))
1972 (inputs
1973 `(("libsodium" ,libsodium)))
1974 (arguments
1975 `(#:tests? #f ;No tests exist.
1976 #:configure-flags (list (string-append "--with-dovecot="
1977 (assoc-ref %build-inputs "dovecot")
1978 "/lib/dovecot"))))
1979 (home-page "https://github.com/LuckyFellow/dovecot-libsodium-plugin")
1980 (synopsis "Libsodium password hashing schemes plugin for Dovecot")
1981 (description
1982 "@code{dovecot-libsodium-plugin} provides a libsodium password
1983 hashing scheme (such as scrypt) plug-in for @code{Dovecot}.")
1984 (license license:gpl3+))))
1985
1986 (define-public isync
1987 (package
1988 (name "isync")
1989 (version "1.3.3")
1990 (source
1991 (origin
1992 (method url-fetch)
1993 (uri (string-append "mirror://sourceforge/isync/isync/"
1994 version "/isync-" version ".tar.gz"))
1995 (sha256 (base32
1996 "10n8ykag0q3ws6fc15xqyg3v980v5nq3kzpablly2rh2z7vkn8gj"))))
1997 (build-system gnu-build-system)
1998 (native-inputs
1999 `(("perl" ,perl)))
2000 (inputs
2001 `(("bdb" ,bdb)
2002 ("cyrus-sasl" ,cyrus-sasl)
2003 ("openssl" ,openssl)
2004 ("zlib" ,zlib)))
2005 (home-page "https://isync.sourceforge.io/")
2006 (synopsis "Mailbox synchronization program")
2007 (description
2008 "isync/mbsync is a command-line tool for two-way synchronization of
2009 mailboxes. Currently Maildir and IMAP are supported types.")
2010 (license license:gpl2+)))
2011
2012 (define-public perl-email-abstract
2013 (package
2014 (name "perl-email-abstract")
2015 (version "3.008")
2016 (source
2017 (origin
2018 (method url-fetch)
2019 (uri (string-append "mirror://cpan/authors/id/R/RJ/RJBS/"
2020 "Email-Abstract-" version ".tar.gz"))
2021 (sha256
2022 (base32
2023 "0h42rhvp769wb421cpbbg6v6xjp8iv86mvz70pqgfgf4nsn6jwgw"))))
2024 (build-system perl-build-system)
2025 (propagated-inputs
2026 `(("perl-email-simple" ,perl-email-simple)
2027 ("perl-module-pluggable" ,perl-module-pluggable)
2028 ("perl-mro-compat" ,perl-mro-compat)))
2029 (home-page "https://metacpan.org/release/Email-Abstract")
2030 (synopsis "Interface to mail representations")
2031 (description "Email::Abstract provides module writers with the ability to
2032 write simple, representation-independent mail handling code.")
2033 (license license:perl-license)))
2034
2035 (define-public perl-email-address
2036 (package
2037 (name "perl-email-address")
2038 (version "1.912")
2039 (source
2040 (origin
2041 (method url-fetch)
2042 (uri (string-append "mirror://cpan/authors/id/R/RJ/RJBS/"
2043 "Email-Address-" version ".tar.gz"))
2044 (sha256
2045 (base32 "1vzr0vx4zsw4zbc9xdffc31wnkc1raqmyfiyws06fbyck197i8qg"))))
2046 (build-system perl-build-system)
2047 (home-page "https://metacpan.org/release/Email-Address")
2048 (synopsis "Email address parsing and creation")
2049 (description "Email::Address implements a regex-based RFC 2822 parser that
2050 locates email addresses in strings and returns a list of Email::Address
2051 objects found. Alternatively you may construct objects manually.")
2052 (license license:perl-license)))
2053
2054 (define-public perl-email-address-xs
2055 (package
2056 (name "perl-email-address-xs")
2057 (version "1.04")
2058 (source
2059 (origin
2060 (method url-fetch)
2061 (uri (string-append "mirror://cpan/authors/id/P/PA/PALI/"
2062 "Email-Address-XS-" version ".tar.gz"))
2063 (sha256
2064 (base32
2065 "0gjrrl81z3sfwavgx5kwjd87gj44mlnbbqsm3dgdv1xllw26spwr"))))
2066 (build-system perl-build-system)
2067 (home-page "https://metacpan.org/release/Email-Address-XS")
2068 (synopsis "Parse and format RFC 5322 email addresses and groups")
2069 (description
2070 "Email::Address::XS implements RFC 5322 parser and formatter of email
2071 addresses and groups. Unlike Email::Address, this module does not use regular
2072 expressions for parsing but instead is implemented in XS and uses shared code
2073 from Dovecot IMAP server.")
2074 (license license:perl-license)))
2075
2076 (define-public perl-email-date-format
2077 (package
2078 (name "perl-email-date-format")
2079 (version "1.005")
2080 (source
2081 (origin
2082 (method url-fetch)
2083 (uri (string-append "mirror://cpan/authors/id/R/RJ/RJBS/"
2084 "Email-Date-Format-" version ".tar.gz"))
2085 (sha256
2086 (base32
2087 "012ivfwpnbl3wr50f9c6f4azhdlxnm31pdn72528g79v61z6372p"))))
2088 (build-system perl-build-system)
2089 (home-page "https://metacpan.org/release/Email-Date-Format")
2090 (synopsis "Produce RFC 2822 date strings")
2091 (description "Email::Date::Format provides a means for generating an RFC
2092 2822 compliant datetime string.")
2093 (license license:perl-license)))
2094
2095 (define-public perl-email-messageid
2096 (package
2097 (name "perl-email-messageid")
2098 (version "1.406")
2099 (source
2100 (origin
2101 (method url-fetch)
2102 (uri (string-append "mirror://cpan/authors/id/R/RJ/RJBS/"
2103 "Email-MessageID-" version ".tar.gz"))
2104 (sha256
2105 (base32
2106 "1f22sdnfq169qw1l0lg7y74pmiam7j9v95bggjnf3q4mygdmshpc"))))
2107 (build-system perl-build-system)
2108 (home-page "https://metacpan.org/release/Email-MessageID")
2109 (synopsis "Generate world unique message-ids")
2110 (description "Email::MessageID generates recommended message-ids to
2111 identify a message uniquely.")
2112 (license license:perl-license)))
2113
2114 (define-public perl-email-mime
2115 (package
2116 (name "perl-email-mime")
2117 (version "1.946")
2118 (source
2119 (origin
2120 (method url-fetch)
2121 (uri (string-append "mirror://cpan/authors/id/R/RJ/RJBS/"
2122 "Email-MIME-" version ".tar.gz"))
2123 (sha256
2124 (base32
2125 "0z1k3i0lzp2k421gc8f3wq0jbqflkbw2xqd2k7n7pmv56417kvk8"))))
2126 (build-system perl-build-system)
2127 (propagated-inputs
2128 `(("perl-email-address" ,perl-email-address)
2129 ("perl-email-messageid" ,perl-email-messageid)
2130 ("perl-email-mime-contenttype" ,perl-email-mime-contenttype)
2131 ("perl-email-mime-encodings" ,perl-email-mime-encodings)
2132 ("perl-email-simple" ,perl-email-simple)
2133 ("perl-mime-types" ,perl-mime-types)
2134 ("perl-module-runtime" ,perl-module-runtime)))
2135 (home-page "https://metacpan.org/release/Email-MIME")
2136 (synopsis "MIME message handling")
2137 (description "Email::MIME is an extension of the Email::Simple module, to
2138 handle MIME encoded messages. It takes a message as a string, splits it up
2139 into its constituent parts, and allows you access to various parts of the
2140 message. Headers are decoded from MIME encoding.")
2141 (license license:perl-license)))
2142
2143 (define-public perl-email-mime-contenttype
2144 (package
2145 (name "perl-email-mime-contenttype")
2146 (version "1.022")
2147 (source
2148 (origin
2149 (method url-fetch)
2150 (uri (string-append "mirror://cpan/authors/id/R/RJ/RJBS/"
2151 "Email-MIME-ContentType-" version ".tar.gz"))
2152 (sha256
2153 (base32
2154 "042kxhs3bp1ab9z0mbr1wy21ld4lxd6v2a2mmrashqnsn2075fws"))))
2155 (build-system perl-build-system)
2156 (native-inputs
2157 `(("perl-capture-tiny" ,perl-capture-tiny)))
2158 (home-page "https://metacpan.org/release/Email-MIME-ContentType")
2159 (synopsis "Parse MIME Content-Type headers")
2160 (description "Email::MIME::ContentType parses a MIME Content-Type
2161 header.")
2162 (license license:perl-license)))
2163
2164 (define-public perl-email-mime-encodings
2165 (package
2166 (name "perl-email-mime-encodings")
2167 (version "1.315")
2168 (source
2169 (origin
2170 (method url-fetch)
2171 (uri (string-append "mirror://cpan/authors/id/R/RJ/RJBS/"
2172 "Email-MIME-Encodings-" version ".tar.gz"))
2173 (sha256
2174 (base32
2175 "0p5b8g9gh35m8fqrpx60g4bp98rvwd02n5b0vm9wh7mk0xah8wac"))))
2176 (build-system perl-build-system)
2177 (native-inputs
2178 `(("perl-capture-tiny" ,perl-capture-tiny)))
2179 (home-page "https://metacpan.org/release/Email-MIME-Encodings")
2180 (synopsis "Unified interface to MIME encoding and decoding")
2181 (description "This module wraps MIME::Base64 and MIME::QuotedPrint.")
2182 (license license:perl-license)))
2183
2184 (define-public perl-email-sender
2185 (package
2186 (name "perl-email-sender")
2187 (version "1.300035")
2188 (source
2189 (origin
2190 (method url-fetch)
2191 (uri (string-append "mirror://cpan/authors/id/R/RJ/RJBS/"
2192 "Email-Sender-" version ".tar.gz"))
2193 (sha256
2194 (base32 "0yfssp3rqdx1dmgvnygarzgkpkhqm28r5sd0gh87ksk8yxndhjql"))))
2195 (build-system perl-build-system)
2196 (native-inputs
2197 `(("perl-capture-tiny" ,perl-capture-tiny)))
2198 (propagated-inputs
2199 `(("perl-email-abstract" ,perl-email-abstract)
2200 ("perl-email-address" ,perl-email-address)
2201 ("perl-email-simple" ,perl-email-simple)
2202 ("perl-list-moreutils" ,perl-list-moreutils)
2203 ("perl-module-runtime" ,perl-module-runtime)
2204 ("perl-moo" ,perl-moo)
2205 ("perl-moox-types-mooselike" ,perl-moox-types-mooselike)
2206 ("perl-sub-exporter" ,perl-sub-exporter)
2207 ("perl-throwable" ,perl-throwable)
2208 ("perl-try-tiny" ,perl-try-tiny)))
2209 (home-page "https://metacpan.org/release/Email-Sender")
2210 (synopsis "Perl library for sending email")
2211 (description "Email::Sender replaces the old and sometimes problematic
2212 Email::Send library.")
2213 (license license:perl-license)))
2214
2215 (define-public perl-email-simple
2216 (package
2217 (name "perl-email-simple")
2218 (version "2.216")
2219 (source
2220 (origin
2221 (method url-fetch)
2222 (uri (string-append "mirror://cpan/authors/id/R/RJ/RJBS/"
2223 "Email-Simple-" version ".tar.gz"))
2224 (sha256
2225 (base32
2226 "1m4brbjvalyp5kjqslqv4155dzwg977shxin208i7lc8236n6pyq"))))
2227 (build-system perl-build-system)
2228 (propagated-inputs
2229 `(("perl-email-date-format" ,perl-email-date-format)))
2230 (home-page "https://metacpan.org/release/Email-Simple")
2231 (synopsis "Parsing of RFC 2822 messages")
2232 (description "Email::Simple provides simple parsing of RFC 2822 message
2233 format and headers.")
2234 (license license:perl-license)))
2235
2236 (define-public libesmtp
2237 (package
2238 (name "libesmtp")
2239 (version "1.0.6")
2240 (source
2241 (origin
2242 (method url-fetch)
2243 (uri (list (string-append "https://pkgs.fedoraproject.org/repo/pkgs/"
2244 "libesmtp/libesmtp-" version ".tar.bz2/"
2245 "bf3915e627fd8f35524a8fdfeed979c8/libesmtp-"
2246 version ".tar.bz2")
2247 ;; XXX This site is offline, so we fetch Fedora's cached copy
2248 ;; of the source tarball.
2249 (string-append "http://www.stafford.uklinux.net/libesmtp/libesmtp-"
2250 version ".tar.bz2")))
2251 (sha256
2252 (base32
2253 "02zbniyz7qys1jmx3ghx21kxmns1wc3hmv80gp7ag7yra9f1m9nh"))))
2254 (build-system gnu-build-system)
2255 (propagated-inputs
2256 `(("openssl" ,openssl)))
2257 (home-page "http://www.stafford.uklinux.net/libesmtp/")
2258 (synopsis "Library for sending mail via remote hosts using SMTP")
2259 (description "libESMTP is an SMTP client which manages posting (or
2260 submission of) electronic mail via a preconfigured Mail Transport Agent (MTA).
2261 It may be used as part of a Mail User Agent (MUA) or other program that must
2262 be able to post electronic mail where mail functionality may not be that
2263 program's primary purpose.")
2264 (license (list license:lgpl2.1+ license:gpl2+))))
2265
2266 (define-public esmtp
2267 (package
2268 (name "esmtp")
2269 (version "1.2")
2270 (source
2271 (origin
2272 (method git-fetch)
2273 (uri (git-reference
2274 (url "https://github.com/andywingo/esmtp")
2275 (commit "01bf9fc")))
2276 (sha256
2277 (base32
2278 "1ay282rrl92h0m0m8z5zzjnwiiagi7c78aq2qvhia5mw7prwfyw2"))
2279 (file-name (string-append name "-" version "-checkout"))))
2280 (arguments
2281 `(#:phases (modify-phases %standard-phases
2282 (replace 'bootstrap
2283 (lambda _ (invoke "autoreconf" "-vfi"))))))
2284 (build-system gnu-build-system)
2285 (native-inputs
2286 `(("bison" ,bison)
2287 ("flex" ,flex)
2288 ("autoconf" ,autoconf)
2289 ("automake" ,automake)
2290 ("libtool" ,libtool)))
2291 (inputs
2292 `(("libesmtp" ,libesmtp)))
2293 (home-page "https://sourceforge.net/projects/esmtp/")
2294 (synopsis "Relay-only mail transfer agent (MTA)")
2295 (description "Esmtp is a simple relay-only mail transfer agent built using
2296 libESMTP. It sends e-mail via a remote SMTP server using credentials from the
2297 user's @file{$HOME/.esmtprc} configuration file; see the @command{esmtprc} man
2298 page for more on configuration. This package also provides minimal
2299 compatibility shims for the @command{sendmail}, @command{mailq}, and
2300 @command{newaliases} commands.")
2301 (license license:gpl2+)))
2302
2303 (define-public fdm
2304 (package
2305 (name "fdm")
2306 (version "2.0")
2307 (source (origin
2308 (method url-fetch)
2309 (uri (string-append "https://github.com/nicm/fdm/releases/download/"
2310 version "/fdm-" version ".tar.gz"))
2311 (sha256
2312 (base32 "196fs1z8y7p12wmqn1bylzz94szl58yv2aby3p30nmwjnyv8rch6"))))
2313 (build-system gnu-build-system)
2314 (inputs
2315 `(("tdb" ,tdb)
2316 ("openssl" ,openssl)
2317 ("zlib" ,zlib)))
2318 (home-page "https://github.com/nicm/fdm")
2319 (synopsis "Mail Retrieval Agent (MRA) and Mail Delivery Agent (MDA)")
2320 (description "fdm is a program designed to fetch mail from POP3
2321 or IMAP servers, or receive local mail from stdin, and
2322 deliver it in various ways.")
2323 (license
2324 ;; Why point to a source file? Well, all the individual files have a
2325 ;; copy of this license in their headers, but there's no seprate file
2326 ;; with that information.
2327 (license:non-copyleft
2328 "https://github.com/nicm/fdm/blob/master/command.c"))))
2329
2330
2331 (define-public procmail
2332 (package
2333 (name "procmail")
2334 (version "3.22")
2335 (source
2336 (origin
2337 (method url-fetch)
2338 (uri (string-append
2339 "ftp://ftp.fu-berlin.de/pub/unix/mail/procmail/procmail-"
2340 version
2341 ".tar.gz"))
2342 (sha256
2343 (base32
2344 "05z1c803n5cppkcq99vkyd5myff904lf9sdgynfqngfk9nrpaz08"))
2345 ;; The following patch fixes an ambiguous definition of
2346 ;; getline() in formail.c. The patch is provided by Debian as
2347 ;; patch 24.
2348 (patches (search-patches "procmail-ambiguous-getline-debian.patch"
2349 "procmail-CVE-2014-3618.patch"
2350 "procmail-CVE-2017-16844.patch"))))
2351 (arguments
2352 `(#:phases (modify-phases %standard-phases
2353 (replace 'configure
2354 (lambda _
2355 (substitute* "Makefile"
2356 (("/bin/sh")
2357 (which "sh"))
2358 (("/usr")
2359 (assoc-ref %outputs "out"))
2360 (("/bin/rm")
2361 (which "rm")))
2362 #t)))
2363 #:tests? #f)) ;; There are no tests indicating a successful
2364 ;; build. Some tests of basic locking mechanisms provided by the
2365 ;; file system are performed during 'make install'. However, these
2366 ;; are performed before the actual build process.
2367 (build-system gnu-build-system)
2368 (inputs `(("exim" ,exim)))
2369 (home-page "http://www.procmail.org/")
2370 (synopsis "Versatile mail delivery agent (MDA)")
2371 (description "Procmail is a mail delivery agent (MDA) featuring support
2372 for a variety of mailbox formats such as mbox, mh and maildir. Incoming mail
2373 can be sorted into separate files/directories and arbitrary commands can be
2374 executed on mail arrival. Procmail is considered stable, but is no longer
2375 maintained.")
2376 (license license:gpl2+))) ;; procmail allows to choose the
2377 ;; nonfree Artistic License 1.0
2378 ;; as alternative to the GPL2+.
2379 ;; This option is not listed here.
2380
2381 (define-public khard
2382 (package
2383 (name "khard")
2384 (version "0.17.0")
2385 (source (origin
2386 (method url-fetch)
2387 (uri (pypi-uri name version))
2388 (sha256
2389 (base32
2390 "062nv4xkfsjc11k9m52dh6xjn9z68a4a6x1s8z05wwv4jbp1lkhn"))))
2391 (build-system python-build-system)
2392 (arguments
2393 `(#:phases
2394 (modify-phases %standard-phases
2395 (add-after 'install 'install-completions
2396 (lambda* (#:key outputs #:allow-other-keys)
2397 (let* ((out (assoc-ref outputs "out"))
2398 (zsh (string-append out "/share/zsh/site-functions")))
2399 (copy-recursively "misc/zsh" zsh)
2400 #t))))))
2401 (native-inputs
2402 `(("python-setuptools-scm" ,python-setuptools-scm)))
2403 (inputs
2404 `(("python-atomicwrites" ,python-atomicwrites)
2405 ("python-configobj" ,python-configobj)
2406 ("python-ruamel.yaml" ,python-ruamel.yaml)
2407 ("python-unidecode" ,python-unidecode)
2408 ("python-vobject" ,python-vobject)))
2409 (synopsis "Console address book using CardDAV")
2410 (description "Khard is an address book for the console. It creates, reads,
2411 modifies and removes CardDAV address book entries at your local machine. For
2412 synchronizing with a remote address book, @command{vdirsyncer} is recommended.
2413 Khard can also be used from within the email client @command{mutt}.")
2414 (home-page "https://github.com/scheibler/khard")
2415 (license license:gpl3+)))
2416
2417 (define-public perl-mail-spf
2418 (package
2419 (name "perl-mail-spf")
2420 (version "2.9.0")
2421 (source
2422 (origin
2423 (method url-fetch)
2424 (uri (string-append
2425 "mirror://cpan/authors/id/J/JM/JMEHNLE/mail-spf/Mail-SPF-v"
2426 version
2427 ".tar.gz"))
2428 (sha256
2429 (base32 "0qk1rfgfm5drj4iyniiabrasrpqv570vzhgz66lwgb67y4amkjv1"))))
2430 (build-system perl-build-system)
2431 (native-inputs
2432 `(("perl-module-build" ,perl-module-build)
2433 ("perl-net-dns-resolver-programmable"
2434 ,perl-net-dns-resolver-programmable)))
2435 (arguments
2436 `(#:phases
2437 (modify-phases %standard-phases
2438 (add-before 'configure 'modify-Build.PL
2439 (lambda* (#:key outputs #:allow-other-keys)
2440 (substitute* "Build.PL"
2441 (("'/usr/sbin'") (string-append "'"
2442 (assoc-ref outputs "out")
2443 "/sbin'")))
2444 #t)))))
2445 (inputs
2446 `(("perl-error" ,perl-error)
2447 ("perl-net-dns" ,perl-net-dns)
2448 ("perl-netaddr-ip" ,perl-netaddr-ip)
2449 ("perl-uri" ,perl-uri)))
2450 (home-page "https://metacpan.org/release/Mail-SPF")
2451 (synopsis "Perl implementation of Sender Policy Framework")
2452 (description "Mail::SPF is the Sender Policy Framework implemented
2453 in Perl.")
2454 (license license:bsd-3)))
2455
2456 (define-public perl-mail-authenticationresults
2457 (package
2458 (name "perl-mail-authenticationresults")
2459 (version "1.20180923")
2460 (source (origin
2461 (method url-fetch)
2462 (uri (string-append
2463 "mirror://cpan/authors/id/M/MB/MBRADSHAW/"
2464 "Mail-AuthenticationResults-" version ".tar.gz"))
2465 (sha256
2466 (base32
2467 "1g1wym9vcbhldwvi4w5pl0fhd4jh2icj975awf4wr5xmkli9mxbz"))))
2468 (build-system perl-build-system)
2469 (native-inputs
2470 `(("perl-test-exception" ,perl-test-exception)))
2471 (home-page "https://metacpan.org/release/Mail-AuthenticationResults")
2472 (synopsis "Object Oriented Authentication-Results Headers")
2473 (description "Mail::AuthenticationResults parses the message header field
2474 that indicates the message authentication status as per RFC7601. This module
2475 is not fully compliant with the RFC but it tries to implement most styles of
2476 Authentication-Results header seen in the wild.")
2477 (license license:perl-license)))
2478
2479 (define-public perl-mail-dkim
2480 (package
2481 (name "perl-mail-dkim")
2482 (version "0.58")
2483 (source (origin
2484 (method url-fetch)
2485 (uri (string-append
2486 "mirror://cpan/authors/id/M/MB/MBRADSHAW/Mail-DKIM-"
2487 version
2488 ".tar.gz"))
2489 (sha256
2490 (base32
2491 "0cgkal65qqcy57b21lgij90ba36wl66byw9i76g5yhwaa8ms8hqa"))))
2492 (build-system perl-build-system)
2493 (propagated-inputs
2494 `(("perl-crypt-openssl-rsa" ,perl-crypt-openssl-rsa)
2495 ("perl-mail-authenticationresults" ,perl-mail-authenticationresults)
2496 ("perl-mailtools" ,perl-mailtools)
2497 ("perl-net-dns" ,perl-net-dns)))
2498 (native-inputs
2499 `(("perl-net-dns-resolver-mock" ,perl-net-dns-resolver-mock)
2500 ("perl-test-requiresinternet" ,perl-test-requiresinternet)
2501 ("perl-yaml-libyaml" ,perl-yaml-libyaml)))
2502 (home-page "https://metacpan.org/release/Mail-DKIM")
2503 (synopsis "Signs/verifies Internet mail with DKIM/DomainKey signatures")
2504 (description "Mail::DKIM is a Perl module that implements the new Domain
2505 Keys Identified Mail (DKIM) standard, and the older Yahoo! DomainKeys standard,
2506 both of which sign and verify emails using digital signatures and DNS records.
2507 Mail-DKIM can be used by any Perl program that wants to provide support for
2508 DKIM and/or DomainKeys.")
2509 (license license:gpl3+)))
2510
2511 (define-public dkimproxy
2512 (package
2513 (name "dkimproxy")
2514 (version "1.4.1")
2515 (source (origin
2516 (method url-fetch)
2517 (uri (string-append
2518 "mirror://sourceforge/dkimproxy/dkimproxy/"
2519 version "/dkimproxy-" version ".tar.gz"))
2520 (sha256
2521 (base32
2522 "1gc5c7lg2qrlck7b0lvjfqr824ch6jkrzkpsn0gjvlzg7hfmld75"))
2523 (patches
2524 (search-patches "dkimproxy-add-ipv6-support.patch"))))
2525 (build-system gnu-build-system)
2526 (arguments
2527 `(#:phases
2528 (modify-phases %standard-phases
2529 (add-after 'install 'make-wrapper
2530 (lambda* (#:key inputs outputs #:allow-other-keys)
2531 (let* ((out (assoc-ref outputs "out"))
2532 (wrap.pl (lambda (scripts keys)
2533 (for-each
2534 (lambda (script)
2535 (wrap-program (string-append out script)
2536 `("PERL5LIB" ":" prefix
2537 ,(map (λ (input)
2538 (string-append
2539 (assoc-ref inputs input)
2540 "/lib/perl5/site_perl"))
2541 keys))))
2542 scripts))))
2543 (wrap.pl (list "/bin/dkimproxy.in"
2544 "/bin/dkimproxy.out")
2545 (list "perl-crypt-openssl-rsa"
2546 "perl-io-socket-inet6"
2547 "perl-mailtools"
2548 "perl-mail-authenticationresults"
2549 "perl-mail-dkim"
2550 "perl-net-dns"
2551 "perl-net-server"
2552 "perl-socket6"))
2553 (wrap.pl (list "/bin/dkim_responder.pl")
2554 (list "perl-crypt-openssl-rsa"
2555 "perl-mail-dkim"
2556 "perl-mailtools"
2557 "perl-mime-tools"
2558 "perl-net-dns"
2559 "perl-timedate"))
2560 #t))))))
2561 (inputs
2562 `(("perl" ,perl)
2563 ("perl-crypt-openssl-rsa" ,perl-crypt-openssl-rsa)
2564 ("perl-io-socket-inet6" ,perl-io-socket-inet6)
2565 ("perl-mailtools" ,perl-mailtools)
2566 ("perl-mail-authenticationresults" ,perl-mail-authenticationresults)
2567 ("perl-mail-dkim" ,perl-mail-dkim)
2568 ("perl-mime-tools" ,perl-mime-tools)
2569 ("perl-net-dns" ,perl-net-dns)
2570 ("perl-net-server" ,perl-net-server)
2571 ("perl-socket6" ,perl-socket6)
2572 ("perl-timedate" ,perl-timedate)))
2573 (home-page "http://dkimproxy.sourceforge.net/")
2574 (synopsis "SMTP proxy to sign and verify Internet mail with DKIM headers")
2575 (description
2576 "DKIMproxy is an SMTP proxy that signs and verifies Internet mail using the
2577 @code{Mail::DKIM} Perl module. It comprises two separate proxies: an outbound
2578 proxy for signing outgoing email, and an inbound proxy for verifying signatures
2579 of incoming messages.
2580
2581 It was designed for Postfix, but can be used to add DKIM support to nearly any
2582 existing mail server. With Postfix, the proxies can operate as either
2583 @code{Before-Queue} or @code{After-Queue} content filters.")
2584 (license license:gpl2+)))
2585
2586 (define-public mb2md
2587 (package
2588 (name "mb2md")
2589 (version "3.20")
2590 (source (origin
2591 (method url-fetch)
2592 (uri (string-append
2593 "http://batleth.sapienti-sat.org/projects/mb2md/mb2md-"
2594 version ".pl.gz"))
2595 (sha256
2596 (base32
2597 "0bvkky3c90738h3skd2f1b2yy5xzhl25cbh9w2dy97rs86ssjidg"))))
2598 (build-system trivial-build-system)
2599 (arguments
2600 '(#:modules ((guix build utils))
2601 #:builder
2602 (begin
2603 (use-modules (guix build utils))
2604 (let* ((source (assoc-ref %build-inputs "source"))
2605 (out (assoc-ref %outputs "out"))
2606 (bin (string-append out "/bin"))
2607 (perl (assoc-ref %build-inputs "perl"))
2608 (gzip (assoc-ref %build-inputs "gzip"))
2609 (perl-timedate (assoc-ref %build-inputs "perl-timedate"))
2610 (perl5lib (string-append perl-timedate "/lib/perl5/site_perl")))
2611 (mkdir-p bin)
2612 (with-directory-excursion bin
2613 (copy-file source "mb2md.gz")
2614 (invoke (string-append gzip "/bin/gzip") "-d" "mb2md.gz")
2615 (substitute* "mb2md"
2616 (("#!/usr/bin/perl")
2617 (string-append "#!/usr/bin/perl -I " perl5lib)))
2618 (patch-shebang "mb2md" (list (string-append perl "/bin")))
2619 (chmod "mb2md" #o555))
2620 #t))))
2621 (native-inputs `(("gzip" ,gzip)))
2622 (inputs `(("perl" ,perl)
2623 ("perl-timedate" ,perl-timedate)))
2624 (home-page "http://batleth.sapienti-sat.org/projects/mb2md/")
2625 (synopsis "Mbox to maildir converter")
2626 (description
2627 "Mb2md is a Perl script that takes one or more mbox format files and
2628 converts them to maildir format directories.")
2629 (license license:public-domain)))
2630
2631 (define-public mblaze
2632 (package
2633 (name "mblaze")
2634 (version "1.0")
2635 (source
2636 (origin
2637 (method git-fetch)
2638 (uri (git-reference
2639 (url "https://github.com/leahneukirchen/mblaze")
2640 (commit (string-append "v" version))))
2641 (file-name (git-file-name name version))
2642 (sha256
2643 (base32 "0hxy3mjjv4hg856sl1r15fdmqaw4s9c26b3lidsd5x0kpqy601ai"))))
2644 (build-system gnu-build-system)
2645 (native-inputs
2646 `(("perl" ,perl)))
2647 (arguments
2648 `(#:tests? #f ; XXX: Upstream tests appear to be broken
2649 #:make-flags (list (string-append "CC=" ,(cc-for-target))
2650 "PREFIX="
2651 (string-append "DESTDIR=" %output))
2652 #:phases
2653 (modify-phases %standard-phases
2654 (delete 'configure))))
2655 (home-page "https://github.com/leahneukirchen/mblaze")
2656 (synopsis "Unix utilities to deal with Maildir")
2657 (description
2658 "The mblaze message system is a set of Unix utilities for processing and
2659 interacting with mail messages which are stored in maildir folders.
2660
2661 Its design is roughly inspired by MH, the RAND Message Handling System, but it
2662 is a complete implementation from scratch.
2663
2664 mblaze is a classic command line MUA and has no features for receiving or
2665 transferring messages; you can operate on messages in a local maildir spool,
2666 or fetch your messages using fdm(1), getmail(1), offlineimap(1), or similar
2667 utilities, and send it using dma(8), msmtp(1), sendmail(8), as provided by
2668 OpenSMTPD, Postfix, or similar.
2669
2670 mblaze operates directly on maildir folders and doesn't use its own caches or
2671 databases. There is no setup needed for many uses. All utilities have been
2672 written with performance in mind. Enumeration of all messages in a maildir is
2673 avoided unless necessary, and then optimized to limit syscalls. Parsing
2674 message metadata is optimized to limit I/O requests. Initial operations on a
2675 large maildir may feel slow, but as soon as they are in the file system cache,
2676 everything is blazingly fast. The utilities are written to be memory
2677 efficient (i.e. not wasteful), but whole messages are assumed to fit into RAM
2678 easily (one at a time).")
2679 (license (list license:public-domain
2680 license:expat)))) ; mystrverscmp.c and mymemmem
2681
2682 (define-public mpop
2683 (package
2684 (name "mpop")
2685 (version "1.4.12")
2686 (source
2687 (origin
2688 (method url-fetch)
2689 (uri (string-append "https://marlam.de/mpop/releases/"
2690 "mpop-" version ".tar.xz"))
2691 (sha256
2692 (base32 "02j8qfd44dfyq1sq7r9znj9y6wam39ncch1sc8chcdlw5nsmaqsz"))))
2693 (build-system gnu-build-system)
2694 (inputs
2695 `(("gnutls" ,gnutls)))
2696 (native-inputs
2697 `(("pkg-config" ,pkg-config)))
2698 (home-page "https://marlam.de/mpop/")
2699 (synopsis "POP3 mail client")
2700 (description "mpop is a small and fast POP3 client suitable as a
2701 fetchmail replacement.
2702
2703 mpop supports multiple accounts, header based mail filtering, delivery
2704 to mbox files, maildir folders or an @acronym{MDA, Mail Delivery Agent},
2705 TLS/SSL, several authentication methods, @acronym{IDN, Internationalized Domain
2706 Names} and SOCKS proxies.")
2707 (license license:gpl3+)))
2708
2709 (define-public mhonarc
2710 (package
2711 (name "mhonarc")
2712 (version "2.6.19")
2713 (source
2714 (origin
2715 (method url-fetch)
2716 (uri (string-append "mirror://cpan/authors/id/E/EH/EHOOD/MHonArc-"
2717 version ".tar.gz"))
2718 (sha256
2719 (base32
2720 "0ll3v93yji334zqp6xfzfxc0127pmjcznmai1l5q6dzawrs2igzq"))))
2721 (build-system perl-build-system)
2722 (home-page "https://www.mhonarc.org/")
2723 (synopsis "Create HTML archives of mail/news messages")
2724 (description
2725 "MHonArc is a Perl mail-to-HTML converter. MHonArc
2726 provides HTML mail archiving with index, mail thread linking,
2727 etc; plus other capabilities including support for MIME and
2728 powerful user customization features.")
2729 (license license:gpl2+)))
2730
2731 (define-public sendmail
2732 (package
2733 (name "sendmail")
2734 (version "8.15.2")
2735 (source
2736 (origin
2737 (method url-fetch)
2738 (uri (string-append
2739 "ftp://ftp.sendmail.org/pub/sendmail/sendmail."
2740 version ".tar.gz"))
2741 (sha256
2742 (base32
2743 "0fdl9ndmspqspdlmghzxlaqk56j3yajk52d7jxcg21b7sxglpy94"))))
2744 (build-system gnu-build-system)
2745 (arguments
2746 `(#:phases
2747 (modify-phases %standard-phases
2748 (add-before 'build 'replace-/bin/sh
2749 (lambda _
2750 (substitute*
2751 (append
2752 (list "smrsh/smrsh.c" "sendmail/conf.c" "contrib/mailprio"
2753 "contrib/mmuegel" "devtools/bin/configure.sh")
2754 (find-files "." ".*\\.m4")
2755 (find-files "." ".*\\.cf"))
2756 (("/bin/sh") (which "sh")))
2757
2758 (substitute* "devtools/bin/Build"
2759 (("SHELL=/bin/sh") (string-append "SHELL=" (which "sh"))))
2760 #t))
2761 (replace 'configure
2762 (lambda _
2763
2764 ;; Render harmless any attempts to chown or chgrp
2765 (substitute* "devtools/bin/install.sh"
2766 (("owner=\\$2") "owner=''")
2767 (("group=\\$2") "group=''"))
2768
2769 (with-output-to-file "devtools/Site/site.config.m4"
2770 (lambda ()
2771 (format #t "
2772 define(`confCC', `gcc')
2773 define(`confOPTIMIZE', `-g -O2')
2774 define(`confLIBS', `-lresolv')
2775 define(`confINSTALL', `~a/devtools/bin/install.sh')
2776 define(`confDEPEND_TYPE', `CC-M')
2777 define(`confINST_DEP', `')
2778 " (getcwd))))
2779 #t))
2780 (replace 'build
2781 (lambda _
2782 (invoke "sh" "Build")
2783 (with-directory-excursion "cf/cf"
2784 (copy-file "generic-linux.mc" "sendmail.mc")
2785 (invoke "sh" "Build" "sendmail.cf"))
2786 #t))
2787 (add-before 'install 'pre-install
2788 (lambda _
2789 (let ((out (assoc-ref %outputs "out")))
2790 (mkdir-p (string-append out "/usr/bin"))
2791 (mkdir-p (string-append out "/usr/sbin"))
2792 (mkdir-p (string-append out "/etc/mail"))
2793 (setenv "DESTDIR" out)
2794 (with-directory-excursion "cf/cf"
2795 (invoke "sh" "Build" "install-cf"))
2796 #t))))
2797 ;; There is no make check. There are some post installation tests, but those
2798 ;; require root privileges
2799 #:tests? #f))
2800 (inputs
2801 `(("m4" ,m4)
2802 ("perl" ,perl)))
2803 (home-page "http://sendmail.org")
2804 (synopsis
2805 "Highly configurable Mail Transfer Agent (MTA)")
2806 (description
2807 "Sendmail is a mail transfer agent (MTA) originally developed by Eric
2808 Allman. It is highly configurable and supports many delivery methods and many
2809 transfer protocols.")
2810 (license (license:non-copyleft "file://LICENSE"
2811 "See LICENSE in the distribution."))))
2812
2813 (define-public sieve-connect
2814 (package
2815 (name "sieve-connect")
2816 (version "0.90")
2817 (source
2818 (origin
2819 (method url-fetch)
2820 (uri (string-append "https://people.spodhuis.org/phil.pennock/software/"
2821 "sieve-connect-" version ".tar.bz2"))
2822 (sha256
2823 (base32 "00vnyzr67yr2ilnprbd388gfnwmrmbdx1jsig9d0n5q902jqn62a"))))
2824 (build-system gnu-build-system)
2825 (arguments
2826 `(#:make-flags
2827 (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
2828 #:tests? #f ; no test suite
2829 #:phases
2830 (modify-phases %standard-phases
2831 (delete 'configure) ; no configure script
2832 (add-before 'install 'create-output-directories
2833 (lambda* (#:key outputs #:allow-other-keys)
2834 (let ((out (assoc-ref outputs "out")))
2835 (for-each (lambda (subdirectory)
2836 (mkdir-p (string-append out "/" subdirectory)))
2837 (list "bin"
2838 "man/man1"))
2839 #t)))
2840 (add-after 'install 'wrap-program
2841 (lambda* (#:key inputs outputs #:allow-other-keys)
2842 (let ((out (assoc-ref outputs "out"))
2843 (path (getenv "PERL5LIB")))
2844 (wrap-script (string-append out "/bin/sieve-connect")
2845 `("PERL5LIB" ":" = (,path)))
2846 #t))))))
2847 (inputs
2848 `(("guile" ,guile-3.0) ; for wrap-script
2849 ("perl" ,perl)
2850 ("perl-authen-sasl" ,perl-authen-sasl)
2851 ("perl-io-socket-inet6" ,perl-io-socket-inet6)
2852 ("perl-io-socket-ssl" ,perl-io-socket-ssl)
2853 ("perl-net-dns" ,perl-net-dns)
2854 ("perl-socket6" ,perl-socket6)
2855 ("perl-term-readkey" ,perl-term-readkey)
2856 ("perl-term-readline" ,perl-term-readline-gnu)))
2857 (home-page
2858 "https://people.spodhuis.org/phil.pennock/software/#sieve-connect")
2859 (synopsis "ManageSieve client for managing Sieve e-mail filters")
2860 (description
2861 "Sieve-connect lets you view, upload, edit, delete, and otherwise manage
2862 Sieve scripts on any mail server that speaks the @dfn{ManageSieve} protocol,
2863 as specified in RFC 5804.
2864
2865 @dfn{Sieve} (RFC 5228) is a specialised language for e-mail filtering. Sieve
2866 scripts are stored on the server and run whenever mail arrives. They can
2867 automatically sort new messages into folders, silently reject them, send an
2868 automated response, and more.
2869
2870 @command{sieve-connect} is designed to be both a tool which can be invoked
2871 from scripts as well as a decent interactive client. It supports TLS for
2872 connection privacy, as well as authentication with SASL or GSSAPI client
2873 certificates. It should be a drop-in replacement for @command{sieveshell}
2874 from the Cyrus IMAP project.")
2875 (license license:bsd-3)))
2876
2877 (define-public opensmtpd
2878 (package
2879 (name "opensmtpd")
2880 (version "6.8.0p2")
2881 (source
2882 (origin
2883 (method url-fetch)
2884 (uri (string-append "https://www.opensmtpd.org/archives/"
2885 "opensmtpd-" version ".tar.gz"))
2886 (sha256
2887 (base32 "05sd7bmq29ibnqbl2z53hiyprfxzf0qydfdaixs68rz55wqhbgsi"))))
2888 (build-system gnu-build-system)
2889 (inputs
2890 `(("bdb" ,bdb)
2891 ("libasr" ,libasr)
2892 ("libevent" ,libevent)
2893 ("libressl" ,libressl) ; recommended, and supports e.g. ECDSA
2894 ("linux-pam" ,linux-pam)
2895 ("zlib" ,zlib)))
2896 (native-inputs
2897 `(("bison" ,bison)
2898 ("groff" ,groff))) ; for man pages
2899 (arguments
2900 `(#:configure-flags
2901 (list "--localstatedir=/var"
2902 ;; This is the default only if it exists at build time—it doesn't.
2903 "--with-path-socket=/var/run"
2904 "--with-path-CAfile=/etc/ssl/certs/ca-certificates.crt"
2905 "--with-user-smtpd=smtpd"
2906 "--with-user-queue=smtpq" "--with-group-queue=smtpq"
2907 "--with-auth-pam"
2908 "--with-table-db")
2909 #:phases
2910 (modify-phases %standard-phases
2911 ;; See: https://github.com/OpenSMTPD/OpenSMTPD/issues/1069.
2912 (add-after 'unpack 'fix-smtpctl-encrypt-bug
2913 (lambda _
2914 (substitute* "usr.sbin/smtpd/smtpctl.c"
2915 (("\"encrypt\", \"--\",")
2916 "\"encrypt\","))
2917 #t))
2918 ;; Fix some incorrectly hard-coded external tool file names.
2919 (add-after 'unpack 'patch-FHS-file-names
2920 (lambda _
2921 (substitute* "usr.sbin/smtpd/smtpctl.c"
2922 ;; ‘gzcat’ is auto-detected at compile time, but ‘cat’ isn't.
2923 (("/bin/cat") (which "cat")))
2924 (substitute* "usr.sbin/smtpd/mda_unpriv.c"
2925 (("/bin/sh") (which "sh")))
2926 #t))
2927 ;; OpenSMTPD provides a single smtpctl utility to control both the
2928 ;; daemon and the local submission subsystem. To accomodate systems
2929 ;; that require historical interfaces such as sendmail, newaliases or
2930 ;; makemap, smtpctl operates in compatibility mode if called with the
2931 ;; historical name.
2932 (add-after 'install 'install-compability-links
2933 (lambda* (#:key outputs #:allow-other-keys)
2934 (let* ((out (assoc-ref outputs "out"))
2935 (sbin (string-append out "/sbin/")))
2936 (for-each (lambda (command)
2937 (symlink "smtpctl" (string-append sbin command)))
2938 (list "mailq" "makemap" "newaliases"
2939 "send-mail" "sendmail")))
2940 #t)))))
2941 (synopsis "Lightweight SMTP daemon")
2942 (description
2943 "OpenSMTPD is an implementation of server-side @acronym{SMTP, Simple Mail
2944 Transfer Protocol}, with some additional standard extensions. It allows
2945 ordinary machines to exchange e-mails with other systems speaking the SMTP
2946 protocol, or to deliver them to local users.
2947
2948 In order to simplify the use of SMTP, OpenSMTPD implements a smaller set of
2949 functionality than those available in other SMTP daemons. The objective is to
2950 provide enough features to satisfy typical usage at the risk of unsuitability
2951 to esoteric or niche requirements.")
2952 (home-page "https://www.opensmtpd.org")
2953 (license (list license:bsd-2 license:bsd-3 license:bsd-4
2954 (license:non-copyleft "file://COPYING")
2955 license:public-domain license:isc license:openssl))))
2956
2957 (define-public opensmtpd-extras
2958 (package
2959 (name "opensmtpd-extras")
2960 (version "6.7.1")
2961 (source (origin
2962 (method url-fetch)
2963 (uri (string-append "https://www.opensmtpd.org/archives/"
2964 "opensmtpd-extras-" version ".tar.gz"))
2965 (sha256
2966 (base32
2967 "1b1mx71bvmv92lbm08wr2p60g3qhikvv3n15zsr6dcwbk9aqahzq"))))
2968 (build-system gnu-build-system)
2969 (native-inputs
2970 `(("pkg-config" ,pkg-config)))
2971 (inputs
2972 `(("libressl" ,libressl)
2973 ("libevent" ,libevent)
2974 ("mysql" ,mysql)
2975 ("opensmtpd" ,opensmtpd)
2976 ("postgresql" ,postgresql)
2977 ("python" ,python-2)
2978 ("sqlite" ,sqlite)))
2979 (arguments
2980 `(#:configure-flags
2981 (list "--sysconfdir=/etc"
2982 "--localstatedir=/var"
2983
2984 "--with-queue-null"
2985 "--with-queue-python"
2986 "--with-queue-ram"
2987 "--with-queue-stub"
2988
2989 "--with-table-ldap"
2990 "--with-table-mysql"
2991 "--with-table-postgres"
2992 ;; "--with-table-redis" ; TODO: package hiredis
2993 "--with-table-socketmap"
2994 "--with-table-passwd"
2995 "--with-table-python"
2996 "--with-table-sqlite"
2997 "--with-table-stub"
2998
2999 "--with-scheduler-ram"
3000 "--with-scheduler-stub"
3001 "--with-scheduler-python"
3002
3003 "--with-user-smtpd=smtpd"
3004
3005 ;; We have to configure it like this because the default checks for
3006 ;; for example Python in /usr/{,local/}bin and fails otherwise.
3007 (string-append "--with-python="
3008 (assoc-ref %build-inputs "python")))))
3009 (home-page "https://www.opensmtpd.org")
3010 (synopsis "Extra tables, filters, and various other addons for OpenSMTPD")
3011 (description
3012 "This package provides extra tables, filters, and various other addons
3013 for OpenSMTPD to extend its functionality.")
3014 (license (list license:bsd-2 license:bsd-3 ; openbsd-compat
3015 license:isc)))) ; everything else
3016
3017 (define libopensmtpd
3018 ;; Private source dependency of opensmtpd-filter-dkimsign (by the same
3019 ;; author), until any project actually uses it in its compiled form.
3020 (let ((revision 48))
3021 (package
3022 (name "libopensmtpd")
3023 (version (format #f "0.0.0-~a" revision))
3024 (source
3025 (origin
3026 (method svn-fetch)
3027 (uri (svn-reference
3028 (url "http://imperialat.at/dev/libopensmtpd/")
3029 (revision revision)))
3030 (sha256
3031 (base32 "04fgibpi6q0c3468ww3z7gsvraz0gyfps0c2dj8mdyri636c0x0s"))
3032 (file-name (git-file-name name version))))
3033 (build-system gnu-build-system)
3034 (arguments
3035 `(#:make-flags
3036 (list "-f" "Makefile.gnu"
3037 (string-append "CC=" ,(cc-for-target))
3038 (string-append "LOCALBASE=" (assoc-ref %outputs "out")))
3039 #:tests? #f ; no test suite
3040 #:phases
3041 (modify-phases %standard-phases
3042 (add-after 'unpack 'inherit-ownership
3043 (lambda _
3044 (substitute* "Makefile.gnu"
3045 (("-o \\$\\{BINOWN\\} -g \\$\\{BINGRP\\}") ""))
3046 #t))
3047 (delete 'configure) ; no configure script
3048 (add-before 'install 'create-output-directories
3049 (lambda* (#:key outputs #:allow-other-keys)
3050 (let ((out (assoc-ref outputs "out")))
3051 (mkdir-p (string-append out "/lib"))
3052 #t)))
3053 (add-after 'install 'install-header-file
3054 (lambda* (#:key make-flags outputs #:allow-other-keys)
3055 (let ((out (assoc-ref outputs "out")))
3056 (mkdir-p (string-append out "/include"))
3057 (apply invoke "make" "includes" make-flags))))
3058 (add-after 'install 'install-man-page
3059 (lambda* (#:key outputs #:allow-other-keys)
3060 (let* ((out (assoc-ref outputs "out"))
3061 (man3 (string-append out "/share/man/man3")))
3062 ;; There is no make target for this.
3063 (install-file "osmtpd_run.3" man3)
3064 #t))))))
3065 (inputs
3066 `(("libevent" ,libevent)))
3067 (home-page "http://imperialat.at/dev/libopensmtpd/")
3068 (synopsis "OpenSMTPd filter C API")
3069 (description
3070 "The @code{osmtpd} API is an event-based C programming interface for
3071 writing OpenSMTPd filters.")
3072 (license license:expat))))
3073
3074 (define-public opensmtpd-filter-dkimsign
3075 (package
3076 (name "opensmtpd-filter-dkimsign")
3077 ;; The .arch repackaging provides not only a usable Makefile, but patches
3078 ;; the source to actually build on GNU, e.g., by making pledge() optional.
3079 ;; It's effectively the portable branch that upstream lacks at this time.
3080 (version "0.2.arch2") ; also update both native-inputs
3081 (source
3082 (origin
3083 (method git-fetch)
3084 (uri (git-reference
3085 (url "https://github.com/de-vri-es/filter-dkimsign")
3086 (commit (string-append "v" version))))
3087 (sha256
3088 (base32 "1dv6184h0gq2safnc7ln4za3arbafzc1xwkgwmiihqcjvdyxig0c"))
3089 (file-name (git-file-name name version))))
3090 (build-system gnu-build-system)
3091 (arguments
3092 `(#:make-flags
3093 (list (string-append "CC=" ,(cc-for-target)))
3094 #:tests? #f ; no test suite
3095 #:phases
3096 (modify-phases %standard-phases
3097 (replace 'unpack
3098 (lambda* (#:key source inputs #:allow-other-keys)
3099 (copy-recursively source "filter-dkimsign")
3100 (copy-recursively (assoc-ref inputs "libopensmtpd-source")
3101 "libopensmtpd")
3102 (copy-file (assoc-ref inputs "Makefile") "Makefile")
3103 #t))
3104 (delete 'configure) ; no configure script
3105 (replace 'install
3106 (lambda* (#:key outputs #:allow-other-keys)
3107 (let* ((out (assoc-ref outputs "out"))
3108 (libexec (string-append out "/libexec/opensmtpd"))
3109 (man8 (string-append out "/share/man/man8")))
3110 (chdir "filter-dkimsign")
3111 (install-file "filter-dkimsign" libexec)
3112 (install-file "filter-dkimsign.8" man8)
3113 #t))))))
3114 (native-inputs
3115 `(("Makefile"
3116 ,(origin
3117 (method url-fetch)
3118 (uri (string-append
3119 "https://aur.archlinux.org/cgit/aur.git/plain/Makefile"
3120 "?h=opensmtpd-filter-dkimsign"
3121 "&id=58393470477a2ff2a58f9d72f5d851698067539f"))
3122 (sha256
3123 (base32 "0da5qr9hfjkf07ybvfva967njmf2x0b82z020r6v5f93jzsbqx92"))
3124 (file-name (string-append name "-" version "-Makefile"))))
3125 ("libopensmtpd-source" ,(package-source libopensmtpd))))
3126 (inputs
3127 `(("libevent" ,libevent)
3128 ("libressl" ,libressl))) ; openssl works too but follow opensmtpd
3129 (home-page "http://imperialat.at/dev/filter-dkimsign/")
3130 (synopsis "OpenSMTPd filter for signing mail with DKIM")
3131 (description
3132 "The @command{filter-dkimsign} OpenSMTPd filter signs outgoing e-mail
3133 messages with @acronym{DKIM, DomainKeys Identified Mail} (RFC 4871).")
3134 (license license:expat)))
3135
3136 (define-public mailman
3137 (package
3138 (name "mailman")
3139 (version "3.3.2")
3140 (source
3141 (origin
3142 (method url-fetch)
3143 (uri (pypi-uri "mailman" version))
3144 (sha256
3145 (base32 "0a5ckbf8hc3y28b7p5psp0d4bxk601jlr5pd3hhh545xd8d9f0dg"))))
3146 (build-system python-build-system)
3147 (propagated-inputs
3148 `(("gunicorn" ,gunicorn)
3149 ("python-aiosmtpd" ,python-aiosmtpd)
3150 ("python-alembic" ,python-alembic)
3151 ("python-atpublic" ,python-atpublic)
3152 ("python-authheaders" ,python-authheaders)
3153 ("python-authres" ,python-authres)
3154 ("python-click" ,python-click)
3155 ("python-dateutil" ,python-dateutil)
3156 ("python-dnspython" ,python-dnspython)
3157 ("python-falcon" ,python-falcon)
3158 ("python-flufl-bounce" ,python-flufl-bounce)
3159 ("python-flufl-i18n" ,python-flufl-i18n)
3160 ("python-flufl-lock" ,python-flufl-lock)
3161 ("python-importlib-resources" ,python-importlib-resources)
3162 ("python-lazr-config" ,python-lazr-config)
3163 ("python-passlib" ,python-passlib)
3164 ("python-requests" ,python-requests)
3165 ("python-sqlalchemy" ,python-sqlalchemy)
3166 ("python-zope-component" ,python-zope-component)
3167 ("python-zope-configuration" ,python-zope-configuration)
3168 ("python-zope-event" ,python-zope-event)
3169 ("python-zope-interface" ,python-zope-interface)))
3170 (native-inputs
3171 `(("python-nose" ,python-nose)))
3172 (home-page "https://www.list.org")
3173 (synopsis "Mailing list manager")
3174 (description
3175 "GNU Mailman is software for managing email discussion and mailing
3176 lists. Both users and administrators generally perform their actions in a
3177 web interface, although email and command-line interfaces are also provided.
3178 The system features built-in archiving, automatic bounce processing, content
3179 filtering, digest delivery, and more.")
3180 (license license:gpl3+)))
3181
3182 (define-public python-mailmanclient
3183 (package
3184 (name "python-mailmanclient")
3185 (version "3.3.1")
3186 (source
3187 (origin
3188 (method url-fetch)
3189 (uri (pypi-uri "mailmanclient" version))
3190 (sha256
3191 (base32
3192 "0pjgzpvhdb6ql8asb20xr8d01m646zpghmcp9fmscks0n1k4di4g"))))
3193 (build-system python-build-system)
3194 (arguments
3195 `(#:tests? #f)) ; Requires mailman running
3196 (propagated-inputs
3197 `(("python-requests" ,python-requests)))
3198 ;(native-inputs
3199 ; `(("mailman" ,mailman)
3200 ; ("python-falcon" ,python-falcon)
3201 ; ("python-pytest" ,python-pytest)
3202 ; ("python-pytest-services" ,python-pytest-services)))
3203 (home-page "https://www.list.org/")
3204 (synopsis "Python bindings for the Mailman 3 REST API")
3205 (description
3206 "The mailmanclient library provides official Python bindings for
3207 the GNU Mailman 3 REST API.")
3208 (properties `((python2-variant . ,(delay python2-mailmanclient))))
3209 (license license:lgpl3+)))
3210
3211 ;; This is the last version which supports Python-2.
3212 (define-public python2-mailmanclient
3213 (let ((base (package-with-python2
3214 (strip-python2-variant python-mailmanclient))))
3215 (package
3216 (inherit base)
3217 (version "3.1.1")
3218 (source
3219 (origin
3220 (method url-fetch)
3221 (uri (pypi-uri "mailmanclient" version))
3222 (sha256
3223 (base32
3224 "0fdfs5g3pf30v2i7w18pdkv9xnfxmfcv66mzv56dck0a1igq07m3"))))
3225 (propagated-inputs
3226 `(("python2-six" ,python2-six)
3227 ("python2-httplib2" ,python2-httplib2))))))
3228
3229 (define-public mlmmj
3230 (package
3231 (name "mlmmj")
3232 (version "1.3.0")
3233 (source
3234 (origin
3235 (method url-fetch)
3236 (uri (string-append "http://mlmmj.org/releases/mlmmj-"
3237 version ".tar.bz2"))
3238 (sha256
3239 (base32
3240 "0hpj10qad821ci11si8xc2qnmkzfn90y13s43fm4fca38f0qjp8w"))))
3241 (build-system gnu-build-system)
3242 (inputs
3243 `(("perl" ,perl))) ; For "contrib/web/"
3244 (native-inputs
3245 `(("pkg-config" ,pkg-config)))
3246 (arguments
3247 `(#:configure-flags
3248 ;; mlmmj-receive-strip is a replacement for mlmmj-receive
3249 ;; It opens the files control/mimedeny and control/mimestrip to get a list
3250 ;; of mimetypes for parts of multipart/mime messages that should be denied
3251 ;; or stripped. The parts then get stripped directly when the mail is
3252 ;; received. mlmmj-receive-strip also appends an extra header
3253 ;; X-ThisMailContainsUnwantedMimeParts: Y when the mail contains unwanted
3254 ;; mime parts
3255 (list "--enable-receive-strip")
3256 #:phases
3257 (modify-phases %standard-phases
3258 (add-before 'install 'install-contrib
3259 (lambda* (#:key outputs #:allow-other-keys)
3260 (let* ((out (assoc-ref outputs "out"))
3261 (share (string-append out "/share/mlmmj"))
3262 (contrib (string-append share "/contrib/web"))
3263 (texts (string-append share "/listtexts")))
3264 (copy-recursively "contrib/web/" contrib)
3265 (copy-recursively "listtexts" texts)
3266 (rename-file texts (string-append share "/texts"))
3267 #t))))))
3268 (home-page "http://mlmmj.org")
3269 (synopsis "Mailing list managing made joyful")
3270 (description
3271 "Mlmmj is a simple and slim mailing list manager (MLM) inspired by ezmlm.
3272 It works with many different Mail Transport Agents (MTAs) and is simple for a
3273 system administrator to install, configure and integrate with other software.
3274 As it uses very few resources, and requires no daemons, it is ideal for
3275 installation on systems where resources are limited. Its features include:
3276 @enumerate
3277 @item Archive, Custom headers / footer,
3278 @item Fully automated bounce handling (similar to ezmlm),
3279 @item Complete requeueing functionality, Moderation functionality, Subject prefix,
3280 @item Subscribers only posting, Regular expression access control,
3281 @item Functionality to retrieve old posts, Web interface, Digests,
3282 @item No-mail subscription, VERP support,
3283 @item Delivery Status Notification (RFC1891) support,
3284 @item Rich and customisable texts for automated operations.
3285 @end enumerate\n")
3286 (license license:expat)))
3287
3288 (define-public python-django-mailman3
3289 (package
3290 (name "python-django-mailman3")
3291 (version "1.3.4")
3292 (source
3293 (origin
3294 (method url-fetch)
3295 (uri (pypi-uri "django-mailman3" version))
3296 (sha256
3297 (base32
3298 "1yrm7wpjy34xai72vn2vkhc9131cdrbqy08rrabf36kynj5vcdvy"))))
3299 (build-system python-build-system)
3300 (arguments
3301 '(#:phases
3302 (modify-phases %standard-phases
3303 (replace 'check
3304 (lambda _
3305 (setenv "DJANGO_SETTINGS_MODULE"
3306 "django_mailman3.tests.settings_test")
3307 (invoke "django-admin" "test"
3308 "--pythonpath=."))))))
3309 (propagated-inputs
3310 `(("python-django" ,python-django)
3311 ("python-django-allauth" ,python-django-allauth)
3312 ("python-django-gravatar2" ,python-django-gravatar2)
3313 ("python-mailmanclient" ,python-mailmanclient)
3314 ("python-pytz" ,python-pytz)))
3315 (native-inputs
3316 `(("python-mock" ,python-mock)))
3317 (home-page "https://gitlab.com/mailman/django-mailman3")
3318 (synopsis "Django library to help interaction with Mailman")
3319 (description
3320 "This package contains libraries and templates for Django-based interfaces
3321 interacting with Mailman.")
3322 (license license:gpl3+)))
3323
3324 (define-public python-mailman-hyperkitty
3325 (package
3326 (name "python-mailman-hyperkitty")
3327 (version "1.1.0")
3328 (source
3329 (origin
3330 (method url-fetch)
3331 (uri (pypi-uri "mailman-hyperkitty" version))
3332 (sha256
3333 (base32
3334 "1lfqa9admhvdv71f528jmz2wl0i5cv77v6l64px2pm4zqr9ckkjx"))
3335 (patches
3336 (list
3337 (origin
3338 ;; see: https://gitlab.com/mailman/mailman-hyperkitty/issues/17
3339 ;; fixes test_archive_message_unserializable
3340 (method url-fetch)
3341 (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")
3342 (sha256
3343 (base32
3344 "0p1fwm46c4bl81lvsg3kjhn2r1lwgkpgxamb3xyqn7h9qdrw10hw")))))))
3345 (build-system python-build-system)
3346 (propagated-inputs
3347 `(("python-requests" ,python-requests)
3348 ("python-zope-interface" ,python-zope-interface)))
3349 (inputs
3350 `(("mailman" ,mailman)))
3351 (native-inputs
3352 `(("python-mock" ,python-mock)
3353 ("python-nose" ,python-nose)
3354 ("python-nose2" ,python-nose2)))
3355 (home-page "https://gitlab.com/mailman/mailman-hyperkitty/")
3356 (synopsis "Mailman archiver plugin for HyperKitty")
3357 (description
3358 "Mailman3 allows emails sent to its mailing lists to be archived by any
3359 software provided that there is a plugin (loadable by Mailman3) designed to
3360 communicate with it properly. This module contains a Mailman3 archiver plugin
3361 which sends emails to HyperKitty, the official Mailman3 web archiver.")
3362 (license license:gpl3+)))
3363
3364 (define-public python-hyperkitty
3365 (package
3366 (name "python-hyperkitty")
3367 (version "1.3.3")
3368 (source
3369 (origin
3370 (method url-fetch)
3371 (uri (pypi-uri "HyperKitty" version))
3372 (sha256
3373 (base32
3374 "0p85r9q6mn5as5b39xp9hkkipnk0156acx540n2ygk3qb3jd4a5n"))))
3375 (build-system python-build-system)
3376 (arguments
3377 '(#:phases
3378 (modify-phases %standard-phases
3379 (replace 'check
3380 (lambda _
3381 (setenv "PYTHONPATH" (string-append ".:" (getenv "PYTHONPATH")))
3382 (invoke "example_project/manage.py" "test"
3383 "--settings=hyperkitty.tests.settings_test"))))))
3384 (propagated-inputs
3385 `(("python-dateutil" ,python-dateutil)
3386 ("python-django" ,python-django-2.2)
3387 ("python-django-compressor" ,python-django-compressor)
3388 ("python-django-extensions" ,python-django-extensions)
3389 ("python-django-gravatar2" ,python-django-gravatar2)
3390 ("python-django-haystack" ,python-django-haystack)
3391 ("python-django-mailman3" ,python-django-mailman3)
3392 ("python-django-q" ,python-django-q)
3393 ("python-djangorestframework" ,python-djangorestframework)
3394 ("python-flufl-lock" ,python-flufl-lock)
3395 ("python-mailmanclient" ,python-mailmanclient)
3396 ("python-networkx" ,python-networkx)
3397 ("python-pytz" ,python-pytz)
3398 ("python-robot-detection" ,python-robot-detection)))
3399 (native-inputs
3400 `(("python-beautifulsoup4" ,python-beautifulsoup4)
3401 ("python-elasticsearch" ,python-elasticsearch)
3402 ("python-isort" ,python-isort)
3403 ("python-mock" ,python-mock)
3404 ("python-whoosh" ,python-whoosh)))
3405 (home-page "https://gitlab.com/mailman/hyperkitty")
3406 (synopsis "Web interface to access GNU Mailman v3 archives")
3407 (description
3408 "The hyperkitty Django app provides a web user interface to access GNU
3409 Mailman3 archives, and manage it. This interface uses django, and requires
3410 some configuration.")
3411 (license license:gpl3))) ; Some files are gpl2+
3412
3413 (define-public postorius
3414 (package
3415 (name "postorius")
3416 (version "1.3.3")
3417 (source
3418 (origin
3419 (method url-fetch)
3420 (uri (pypi-uri "postorius" version))
3421 (sha256
3422 (base32
3423 "08jn23gblbkfl09qlykbpsmp39mmach3sl69h1j5cd5kkx839rwa"))))
3424 (build-system python-build-system)
3425 (arguments
3426 '(#:phases
3427 (modify-phases %standard-phases
3428 (replace 'check
3429 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
3430 (add-installed-pythonpath inputs outputs)
3431 (if tests?
3432 (invoke "python" "example_project/manage.py" "test"
3433 "--settings=test_settings" "postorius")
3434 #t))))
3435 #:tests? #f)) ; Tests try to run a mailman instance to test against.
3436 (inputs
3437 `(("python-django" ,python-django)
3438 ("python-django-mailman3" ,python-django-mailman3)
3439 ("python-mailmanclient" ,python-mailmanclient)
3440 ("python-readme-renderer" ,python-readme-renderer)))
3441 (native-inputs
3442 `(("python-beautifulsoup4" ,python-beautifulsoup4)
3443 ("python-isort" ,python-isort)
3444 ("python-mock" ,python-mock)
3445 ("python-vcrpy" ,python-vcrpy)))
3446 (home-page "https://gitlab.com/mailman/postorius")
3447 (synopsis "Web user interface for GNU Mailman")
3448 (description
3449 "Postorius is a Django app which provides a web user interface
3450 to access GNU Mailman.")
3451 (license (list license:gpl3+ license:lgpl3+))))
3452
3453 (define-public blists
3454 (package
3455 (name "blists")
3456 (version "2.0")
3457 (source
3458 (origin
3459 (method url-fetch)
3460 (uri (string-append "http://download.openwall.net/pub/projects/"
3461 "blists/blists-" version ".tar.gz"))
3462 (sha256
3463 (base32
3464 "1xll5wn7py3bbncbwrj172f56nz75c9gwfsa80rwd96ss9gfmp3c"))))
3465 (build-system gnu-build-system)
3466 (arguments
3467 `(#:tests? #f ; No tests
3468 #:phases
3469 (modify-phases %standard-phases
3470 (delete 'configure)
3471 (replace 'install
3472 (lambda* (#:key outputs #:allow-other-keys)
3473 (let* ((out (assoc-ref outputs "out"))
3474 (bin (string-append out "/bin")))
3475 (install-file "bindex" bin)
3476 (install-file "bit" bin)
3477 #t))))))
3478 (home-page "http://www.openwall.com/blists/")
3479 (synopsis "Web interface to mailing list archives")
3480 (description
3481 "Blists is a web interface to mailing list archives that works off
3482 indexed mbox files. There are two programs: @code{bindex} and @code{bit}.
3483 @code{bindex} generates or updates the index file (incremental updates
3484 are supported). @code{bit} is a CGI/SSI program that generates web pages
3485 on the fly. Both programs are written in C and are very fast.")
3486 (license license:expat)))
3487
3488 (define-public swaks
3489 (package
3490 (name "swaks")
3491 (version "20201014.0")
3492 (source
3493 (origin
3494 (method git-fetch)
3495 (uri (git-reference
3496 (url "https://github.com/jetmore/swaks")
3497 (commit (string-append "v" version))))
3498 (file-name (git-file-name name version))
3499 (sha256
3500 (base32 "131i2b1yxhnbqkfk4kky40pfanqw2c5lcgbnjhfqp5cvpawpk2ai"))))
3501 (build-system perl-build-system)
3502 (inputs
3503 `(("perl-io-socket-inet6" ,perl-io-socket-inet6)
3504 ("perl-net-dns" ,perl-net-dns)
3505 ("perl-net-ssleay" ,perl-net-ssleay)
3506 ("perl-socket6" ,perl-socket6))) ; used by perl-io-socket-inet6
3507 (arguments
3508 `(#:tests? #f ; no tests
3509 #:phases
3510 (modify-phases %standard-phases
3511 (add-after 'unpack 'set-build_version
3512 (lambda _
3513 (substitute* "swaks"
3514 (("\"DEVRELEASE\"") (format #f "\"~a\"" ,version)))
3515 #true))
3516 (delete 'configure)
3517 (replace 'build
3518 (lambda _
3519 (invoke "pod2man" "doc/base.pod" "swaks.1")))
3520 (replace 'install
3521 (lambda* (#:key outputs #:allow-other-keys)
3522 (let ((out (assoc-ref outputs "out")))
3523 (install-file "swaks" (string-append out "/bin"))
3524 (install-file "swaks.1" (string-append out "/share/man/man1")))
3525 #t))
3526 (add-after 'install 'wrap-program
3527 (lambda* (#:key outputs #:allow-other-keys)
3528 (wrap-program (string-append (assoc-ref outputs "out")
3529 "/bin/swaks")
3530 `("PERL5LIB" ":" = (,(getenv "PERL5LIB"))))
3531 #t)))))
3532 (home-page "https://jetmore.org/john/code/swaks/")
3533 (synopsis "Featureful SMTP test tool")
3534 (description "Swaks is a flexible, scriptable, transaction-oriented SMTP
3535 test tool. It handles SMTP features and extensions such as TLS,
3536 authentication, and pipelining; multiple versions of the SMTP protocol
3537 including SMTP, ESMTP, and LMTP; and multiple transport methods including
3538 unix-domain sockets, internet-domain sockets, and pipes to spawned processes.
3539 Options can be specified in environment variables, configuration files, and
3540 the command line allowing maximum configurability and ease of use for
3541 operators and scripters.")
3542 (license license:gpl2+)))
3543
3544 (define-public alpine
3545 (package
3546 (name "alpine")
3547 (version "2.24")
3548 (source
3549 (origin
3550 (method git-fetch)
3551 ;; There are two versions: the plain continuation of Alpine without extra
3552 ;; patches and the version which adds extra fixes. Every distro uses
3553 ;; the patched version, and so do we to not break expectations.
3554 ;; http://alpine.freeiz.com/alpine/readme/README.patches
3555 (uri (git-reference
3556 (url "http://repo.or.cz/alpine.git")
3557 (commit (string-append "v" version))))
3558 (file-name (git-file-name name version))
3559 (sha256
3560 (base32 "0d5ybnsv29gs8krl66db56avmssq28jlg0qj5i1wka05ncc3740d"))
3561 (modules '((guix build utils)))
3562 (snippet
3563 '(begin
3564 ;; Remove pre-built binaries scattered across the source repository.
3565 (for-each delete-file (find-files "." "\\.(dll|exe)"))
3566 #t))))
3567 (build-system gnu-build-system)
3568 (arguments
3569 `(#:make-flags
3570 (list (string-append "CC=" ,(cc-for-target)))
3571 #:configure-flags (list (string-append "--with-ssl-include-dir="
3572 (assoc-ref %build-inputs "openssl")
3573 "/include/openssl")
3574 (string-append "--with-ssl-dir="
3575 (assoc-ref %build-inputs "openssl"))
3576 (string-append "--with-ssl-certs-dir="
3577 "/etc/ssl/certs/")
3578 (string-append "--with-ssl-lib-dir="
3579 (assoc-ref %build-inputs "openssl")
3580 "/lib")
3581 (string-append "--with-interactive-spellcheck="
3582 (assoc-ref %build-inputs "aspell")
3583 "/bin/aspell")
3584 "--with-date-stamp=Thu 1 Jan 01:00:01 CET 1970")
3585 #:phases
3586 (modify-phases %standard-phases
3587 (add-after 'unpack 'assume-shadow-passwords
3588 ;; Alpine's configure script confuses ‘shadow password support’ with
3589 ;; ‘/etc/shadow exists in the build environment’. It does not.
3590 (lambda _
3591 (substitute* "configure"
3592 (("test -f /etc/shadow") "true"))
3593 #t))
3594 (add-after 'unpack 'make-reproducible
3595 (lambda _
3596 ;; This removes time-dependent code to make alpine reproducible.
3597 (substitute* "pico/blddate.c"
3598 (("%02d-%s-%d") "1970-01-01"))
3599 #t)))))
3600 (inputs
3601 `(("ncurses" ,ncurses)
3602 ("openssl" ,openssl)
3603 ("gnutls" ,gnutls)
3604 ("openldap" ,openldap)
3605 ("cyrus-sasl" ,cyrus-sasl)
3606 ("mit-krb5" ,mit-krb5)
3607 ("aspell" ,aspell)
3608 ("tcl" ,tcl)
3609 ("linux-pam" ,linux-pam)))
3610 (home-page "https://repo.or.cz/alpine.git")
3611 (synopsis "Alternatively Licensed Program for Internet News and Email")
3612 (description
3613 "Alpine is a text-based mail and news client. Alpine includes several
3614 tools and applications:
3615 @enumerate
3616 @item alpine, the Alpine mailer
3617 @item pico, the standalone text editor, GNU nano's predecessor
3618 @item pilot, the standalone file system navigator
3619 @end enumerate\n")
3620 (license license:asl2.0)))
3621
3622 (define-public balsa
3623 (package
3624 (name "balsa")
3625 (version "2.6.1")
3626 (source
3627 (origin
3628 (method url-fetch)
3629 (uri (string-append "https://pawsa.fedorapeople.org/balsa/"
3630 "balsa-" version ".tar.bz2"))
3631 (sha256
3632 (base32 "1xkxx801p7sbfkn0bh3cz85wra4xf1z1zhjqqc80z1z1nln7fhb4"))))
3633 (build-system gnu-build-system)
3634 (arguments
3635 `(#:configure-flags
3636 '(;; Balsa tries to install additional MIME icons
3637 ;; under gtk+ directory.
3638 "--enable-extra-mimeicons=no"
3639 "--with-gtksourceview"
3640 "--with-canberra"
3641 "--with-spell-checker=gtkspell"
3642 "--with-gpgme"
3643 "--with-sqlite"
3644 "--with-compface"
3645 "--with-ldap")))
3646 (inputs
3647 `(("cyrus-sasl" ,cyrus-sasl)
3648 ("enchant" ,enchant)
3649 ("gdk-pixbuf" ,gdk-pixbuf)
3650 ("gmime" ,gmime)
3651 ("gnutls" ,gnutls)
3652 ("gpgme" ,gpgme)
3653 ("gtk+" ,gtk+)
3654 ("gtksourceview" ,gtksourceview-3)
3655 ("gtkspell3" ,gtkspell3)
3656 ("libcanberra" ,libcanberra)
3657 ("libesmtp" ,libesmtp)
3658 ("libical" ,libical)
3659 ("libnotify" ,libnotify)
3660 ("libsecret" ,libsecret)
3661 ("openldap" ,openldap)
3662 ("sqlite" ,sqlite)
3663 ("webkitgtk" ,webkitgtk)))
3664 (native-inputs
3665 `(("compface" ,compface)
3666 ("glib" ,glib "bin")
3667 ("intltool" ,intltool)
3668 ("pkg-config" ,pkg-config)
3669 ("yelp-tools" ,yelp-tools)))
3670 (home-page "https://pawsa.fedorapeople.org/balsa")
3671 (synopsis "E-mail client for GNOME")
3672 (description "Balsa is a highly configurable and robust mail client for
3673 the GNOME desktop. It supports both POP3 and IMAP servers as well as the
3674 mbox, maildir and mh local mailbox formats. Balsa also supports SMTP and/or
3675 the use of a local MTA such as Sendmail.")
3676 (license license:gpl3+)))
3677
3678 (define-public afew
3679 (package
3680 (name "afew")
3681 (version "3.0.1")
3682 (source
3683 (origin
3684 (method url-fetch)
3685 (uri (pypi-uri "afew" version))
3686 (sha256
3687 (base32
3688 "0wpfqbqjlfb9z0hafvdhkm7qw56cr9kfy6n8vb0q42dwlghpz1ff"))))
3689 (build-system python-build-system)
3690 (inputs
3691 `(("notmuch" ,notmuch)
3692 ("python-chardet" ,python-chardet)
3693 ("python-dkimpy" ,python-dkimpy)
3694 ("python-notmuch" ,python-notmuch)))
3695 (native-inputs
3696 `(("python-freezegun" ,python-freezegun)
3697 ("python-setuptools-scm" ,python-setuptools-scm)))
3698 (home-page "https://github.com/afewmail/afew")
3699 (synopsis "Initial tagging script for notmuch mail")
3700 (description "afew is an initial tagging script for notmuch mail. It
3701 provides automatic tagging each time new mail is registered with notmuch. It
3702 can add tags based on email headers or Maildir folders and can handle spam and
3703 killed threads.")
3704 (license license:isc)))
3705
3706 (define-public pan
3707 (package
3708 (name "pan")
3709 (version "0.146")
3710 (source
3711 (origin
3712 (method url-fetch)
3713 (uri (string-append "http://pan.rebelbase.com/download/releases/"
3714 version "/source/" name "-" version ".tar.bz2"))
3715 (sha256
3716 (base32 "17agd27sn4a7nahvkpg0w39kv74njgdrrygs74bbvpaj8rk2hb55"))))
3717 (arguments
3718 `(#:configure-flags '("--with-gtk3" "--with-gtkspell" "--with-gnutls"
3719 "--enable-libnotify" "--enable-manual"
3720 "--enable-gkr")
3721 #:phases
3722 (modify-phases %standard-phases
3723 (add-before 'configure 'patch-gpg2
3724 (lambda* (#:key inputs #:allow-other-keys)
3725 (substitute* "pan/usenet-utils/gpg.cc"
3726 (("\"gpg2\"") (string-append "\""
3727 (assoc-ref inputs "gnupg")
3728 "/bin/gpg\"")))
3729 #t)))))
3730 (inputs
3731 `(("gmime" ,gmime-2.6)
3732 ("gnupg" ,gnupg)
3733 ("gnutls" ,gnutls)
3734 ("gtk+" ,gtk+)
3735 ("gtkspell3" ,gtkspell3)
3736 ("libnotify" ,libnotify)
3737 ("libsecret" ,libsecret)
3738 ("libxml2" ,libxml2)
3739 ("zlib" ,zlib)))
3740 (native-inputs
3741 `(("gettext-minimal" ,gettext-minimal)
3742 ("itstool" ,itstool)
3743 ("pkg-config" ,pkg-config)))
3744 (build-system gnu-build-system)
3745 (home-page "http://pan.rebelbase.com/")
3746 (synopsis "Pan newsreader")
3747 (description "@code{pan} is a Usenet newsreader that's good at both text
3748 and binaries. It supports offline reading, scoring and killfiles, yEnc, NZB,
3749 PGP handling, multiple servers, and secure connections.")
3750 ;; License of the docs: fdl-1.1; Others: gpl2.
3751 (license (list license:fdl1.1+ license:gpl2))))
3752
3753 (define-public imapfilter
3754 (package
3755 (name "imapfilter")
3756 (version "2.7.5")
3757 (source
3758 (origin
3759 (method git-fetch)
3760 (uri (git-reference
3761 (url "https://github.com/lefcha/imapfilter")
3762 (commit (string-append "v" version))))
3763 (file-name (git-file-name name version))
3764 (sha256
3765 (base32 "0a7f85r3axwclzw1s79zl2l8222nj2gklvvq33w9qv0dz5n71dcx"))))
3766 (build-system gnu-build-system)
3767 (arguments
3768 `(#:tests? #f
3769 #:make-flags
3770 (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
3771 (string-append "CC=" ,(cc-for-target)))
3772 #:phases
3773 (modify-phases %standard-phases
3774 (delete 'configure)))) ; no configure script
3775 (inputs
3776 `(("lua" ,lua)
3777 ("pcre2" ,pcre2)
3778 ("openssl" ,openssl)))
3779 (home-page "https://github.com/lefcha/imapfilter")
3780 (synopsis "IMAP mail filtering utility")
3781 (description "IMAPFilter is a mail filtering utility. It connects
3782 to remote mail servers using IMAP, sends searching queries to the server and
3783 processes mailboxes based on the results. It can be used to delete, copy,
3784 move, flag, etc. messages residing in mailboxes at the same or different mail
3785 servers. The 4rev1 and 4 versions of IMAP are supported.")
3786 (license license:expat)))
3787
3788 (define-public urlscan
3789 (package
3790 (name "urlscan")
3791 (version "0.9.5")
3792 (source
3793 (origin
3794 (method url-fetch)
3795 (uri (pypi-uri "urlscan" version))
3796 (sha256
3797 (base32 "07vcwirap0p4dkqrqblfn1q017slgd8m6qyijvbi3gxnr09pbyx2"))))
3798 (build-system python-build-system)
3799 (propagated-inputs
3800 `(("python-urwid" ,python-urwid)))
3801 (home-page "https://github.com/firecat53/urlscan")
3802 (synopsis "View/select the URLs in an email message or file")
3803 (description
3804 "Urlscan is a small program that is designed to integrate with the
3805 Mutt mail reader to allow you to easily launch a Web browser for URLs
3806 contained in email messages. It parses an email message or file and scans it
3807 for URLs and email addresses. It then displays the URLs and their context
3808 within the message, and allows you to choose one or more URLs to send to your
3809 Web browser. Alternatively, it send a list of all URLs to standard output.
3810 It is a replacement for the @command{urlview} program.")
3811 (license license:gpl2)))
3812
3813 (define-public tnef
3814 (package
3815 (name "tnef")
3816 (version "1.4.18")
3817 (source
3818 (origin
3819 (method git-fetch)
3820 (uri (git-reference
3821 (url "https://github.com/verdammelt/tnef")
3822 (commit version)))
3823 (sha256
3824 (base32 "104g48mcm00bgiyzas2vf86331w7bnw7h3bc11ib4lp7rz6zqfck"))
3825 (file-name (git-file-name name version))))
3826 (build-system gnu-build-system)
3827 (native-inputs
3828 `(("autoconf" ,autoconf)
3829 ("automake" ,automake)))
3830 (arguments `(#:parallel-tests? #f)) ;tests are side-effect'y
3831 (home-page "https://github.com/verdammelt/tnef")
3832 (synopsis "Unpack @code{application/ms-tnef} attachments")
3833 (description
3834 "TNEF is a tar-like program that unpacks MIME attachments of type
3835 @code{application/ms-tnef}.")
3836 (license license:gpl2+)))
3837
3838 (define-public mumi
3839 (let ((commit "8c82c8f104ff0013e2bfb3d6b4277280f32446a6")
3840 (revision "3"))
3841 (package
3842 (name "mumi")
3843 (version (git-version "0.0.1" revision commit))
3844 (source (origin
3845 (method git-fetch)
3846 (uri (git-reference
3847 (url "https://git.elephly.net/software/mumi.git")
3848 (commit commit)))
3849 (file-name (git-file-name name version))
3850 (sha256
3851 (base32
3852 "1gkwagy7qplzq2x2zqsbrwhlilxviqb0dqhrvnnhxd7z8wvyzcsi"))))
3853 (build-system gnu-build-system)
3854 (arguments
3855 `(#:modules ((guix build gnu-build-system)
3856 ((guix build guile-build-system)
3857 #:select (target-guile-effective-version))
3858 (guix build utils))
3859 #:imported-modules ((guix build guile-build-system)
3860 ,@%gnu-build-system-modules)
3861
3862 #:configure-flags '("--localstatedir=/var")
3863
3864 #:phases
3865 (modify-phases %standard-phases
3866 (add-after 'install 'wrap-executable
3867 (lambda* (#:key outputs #:allow-other-keys)
3868 (let* ((out (assoc-ref outputs "out"))
3869 (bin (string-append out "/bin"))
3870 (version (target-guile-effective-version))
3871 (scm (string-append out "/share/guile/site/" version))
3872 (go (string-append out "/lib/guile/" version
3873 "/site-ccache")))
3874 (wrap-program (string-append bin "/mumi")
3875 `("GUILE_LOAD_PATH" ":" prefix
3876 (,scm ,(getenv "GUILE_LOAD_PATH")))
3877 `("GUILE_LOAD_COMPILED_PATH" ":" prefix
3878 (,go ,(getenv "GUILE_LOAD_COMPILED_PATH"))))
3879 #t))))))
3880 (inputs
3881 `(("guile-email" ,guile-email-latest)
3882 ("guile-fibers" ,guile-fibers)
3883 ("guile-gcrypt" ,guile-gcrypt)
3884 ("guile-json" ,guile-json-3)
3885 ("guile-redis" ,guile-redis)
3886 ("guile-syntax-highlight" ,guile-syntax-highlight)
3887 ("guile-webutils" ,guile-webutils)
3888 ("guile-xapian" ,guile-xapian)
3889 ("guile" ,guile-3.0)
3890 ("mailutils" ,mailutils)))
3891 (native-inputs
3892 `(("autoconf" ,autoconf)
3893 ("automake" ,automake)
3894 ("pkg-config" ,pkg-config)))
3895 (home-page "https://git.elephly.net/software/mumi.git")
3896 (synopsis "Debbugs web interface")
3897 (description "Mumi is a Debbugs web interface.")
3898 (license license:agpl3+))))
3899
3900 (define-public ytnef
3901 (package
3902 (name "ytnef")
3903 (version "1.9.3")
3904 (source (origin
3905 (method git-fetch)
3906 (uri (git-reference
3907 (url "https://github.com/Yeraze/ytnef")
3908 (commit (string-append "v" version))))
3909 (file-name (git-file-name name version))
3910 (sha256
3911 (base32
3912 "07h48s5qf08503pp9kafqbwipdqghiif22ghki7z8j67gyp04l6l"))))
3913 (build-system gnu-build-system)
3914 (native-inputs
3915 `(("autoconf" ,autoconf)
3916 ("automake" ,automake)
3917 ("libtool" ,libtool)))
3918 (home-page "https://github.com/Yeraze/ytnef/")
3919 (synopsis "TNEF stream reader for winmail.dat files")
3920 (description "This package provides a TNEF stream reader library and
3921 related tools to process winmail.dat files.")
3922 (license license:gpl2+)))
3923
3924 (define-public public-inbox
3925 (package
3926 (name "public-inbox")
3927 (version "1.5.0")
3928 (source
3929 (origin (method git-fetch)
3930 (uri (git-reference
3931 (url "https://public-inbox.org")
3932 (commit (string-append "v" version))))
3933 (sha256
3934 (base32
3935 "03zj7shdl3vibs7k5lr673bwcf8j1xx8is3mjz34ca4cdh6p5j2k"))
3936 (file-name (git-file-name name version))))
3937 (build-system perl-build-system)
3938 (arguments
3939 '(#:phases
3940 (modify-phases %standard-phases
3941 (add-before 'configure 'qualify-paths
3942 (lambda _
3943 ;; Use absolute paths for 'xapian-compact'.
3944 (let ((xapian-compact (which "xapian-compact")))
3945 (substitute* "script/public-inbox-compact"
3946 (("xapian-compact") xapian-compact)))
3947 #t))
3948 (add-before 'check 'pre-check
3949 (lambda _
3950 (substitute* "t/spawn.t"
3951 (("\\['env'\\]") (string-append "['" (which "env") "']")))
3952 (substitute* "t/ds-leak.t"
3953 (("/bin/sh") (which "sh")))
3954 (invoke "./certs/create-certs.perl")
3955 ;; XXX: This test fails due to zombie process is not reaped by
3956 ;; the builder.
3957 (substitute* "t/httpd-unix.t"
3958 (("^SKIP: \\{") "SKIP: { skip('Guix');"))
3959 #t))
3960 (add-after 'install 'wrap-programs
3961 (lambda* (#:key inputs outputs #:allow-other-keys)
3962 (let ((out (assoc-ref outputs "out")))
3963 (for-each
3964 (lambda (prog)
3965 (wrap-program prog
3966 ;; Let those scripts find their perl modules.
3967 `("PERL5LIB" ":" prefix
3968 (,(string-append out "/lib/perl5/site_perl")
3969 ,(getenv "PERL5LIB")))
3970 ;; 'git' is invoked in various files of the PublicInbox
3971 ;; perl module.
3972 `("PATH" ":" prefix
3973 (,(string-append (assoc-ref inputs "git") "/bin")))))
3974 (find-files (string-append out "/bin"))))
3975 #t)))))
3976 (native-inputs
3977 `(("xapian" ,xapian)
3978 ;; For testing.
3979 ("lsof" ,lsof)
3980 ("openssl" ,openssl)))
3981 (inputs
3982 `(("git" ,git)
3983 ("perl-dbd-sqlite" ,perl-dbd-sqlite)
3984 ("perl-dbi" ,perl-dbi)
3985 ("perl-email-address-xs" ,perl-email-address-xs)
3986 ("perl-email-mime-contenttype" ,perl-email-mime-contenttype)
3987 ("perl-email-mime" ,perl-email-mime)
3988 ("perl-email-simple" ,perl-email-simple)
3989 ("perl-net-server" ,perl-net-server)
3990 ("perl-filesys-notify-simple" ,perl-filesys-notify-simple)
3991 ("perl-plack-middleware-deflater" ,perl-plack-middleware-deflater)
3992 ("perl-plack-middleware-reverseproxy" ,perl-plack-middleware-reverseproxy)
3993 ("perl-plack" ,perl-plack)
3994 ("perl-search-xapian" ,perl-search-xapian)
3995 ("perl-timedate" ,perl-timedate)
3996 ("perl-uri-escape" ,perl-uri-escape)
3997 ;; For testing.
3998 ("perl-ipc-run" ,perl-ipc-run)
3999 ("perl-xml-feed" ,perl-xml-feed)))
4000 (home-page "https://public-inbox.org/README.html")
4001 (synopsis "Archive mailing lists in git repositories")
4002 (description
4003 "public-inbox implements the sharing of an email inbox via git to
4004 complement or replace traditional mailing lists. Readers may read via NNTP,
4005 Atom feeds or HTML archives.")
4006 (license license:agpl3+)))
4007
4008 (define-public sylpheed
4009 (package
4010 (name "sylpheed")
4011 (version "3.7.0")
4012 (source (origin
4013 (method url-fetch)
4014 (uri (string-append "https://sylpheed.sraoss.jp/sylpheed/v3.7/"
4015 name "-" version ".tar.xz"))
4016 (sha256
4017 (base32
4018 "0j9y5vdzch251s264diw9clrn88dn20bqqkwfmis9l7m8vmwasqd"))))
4019 (build-system gnu-build-system)
4020 (native-inputs
4021 `(("pkg-config" ,pkg-config)))
4022 (inputs
4023 `(("bogofilter" ,bogofilter)
4024 ("compface" ,compface)
4025 ("gnupg" ,gnupg-1)
4026 ("gpgme" ,gpgme)
4027 ("gtk+-2.0" ,gtk+-2)
4028 ("gtkspell" ,gtkspell3)
4029 ("libnsl" ,libnsl)
4030 ("openldap" ,openldap)
4031 ("openssl" ,openssl)))
4032 (home-page "https://sylpheed.sraoss.jp/en/")
4033 (synopsis "Lightweight GTK+ email client")
4034 (description
4035 "Sylpheed is a simple, lightweight but featureful, and easy-to-use e-mail
4036 client. Sylpheed provides intuitive user-interface. Sylpheed is also
4037 designed for keyboard-oriented operation.")
4038 (license license:gpl2+)))
4039
4040 (define-public python-authres
4041 (package
4042 (name "python-authres")
4043 (version "1.2.0")
4044 (source
4045 (origin
4046 (method url-fetch)
4047 (uri (pypi-uri "authres" version))
4048 (sha256
4049 (base32
4050 "1dr5zpqnb54h4f5ax8334l1dcp8j9083d7v4vdi1xqkwmnavklck"))))
4051 (build-system python-build-system)
4052 (arguments
4053 '(#:phases
4054 (modify-phases %standard-phases
4055 (replace 'check
4056 ;; Run doctests as described in the README.
4057 (lambda _
4058 (invoke "python" "-m" "authres" "-v"))))))
4059 (home-page "https://launchpad.net/authentication-results-python")
4060 (synopsis "Authentication-Results email header creator and parser")
4061 (description
4062 "This Python module can be used to generate and parse RFC 5451/7001/7601
4063 @code{Authentication-Results} email headers. It supports extensions such as:
4064 @itemize
4065 @item RFC 5617 DKIM/ADSP
4066 @item RFC 6008 DKIM signature identification (@code{header.b})
4067 @item RFC 6212 @acronym{VBR, Vouch By Reference}
4068 @item RFC 6577 @acronym{SPF, Sender Policy Framework}
4069 @item RFC 7281 @code{Authentication-Results} registration for S/MIME
4070 @item RFC 7293 The @code{Require-Recipient-Valid-Since} header field
4071 @item RFC 7489 @acronym{DMARC, Domain-based Message Authentication Reporting
4072 and Conformance}
4073 @item @acronym{ARC, Authenticated Received Chain}
4074 (draft-ietf-dmarc-arc-protocol-08)
4075 @end itemize\n")
4076 (license license:asl2.0)))
4077
4078 (define-public python-dkimpy
4079 (package
4080 (name "python-dkimpy")
4081 (version "1.0.5")
4082 (source
4083 (origin
4084 (method url-fetch)
4085 (uri (pypi-uri "dkimpy" version))
4086 (sha256
4087 (base32 "088iz5cqjqh4c7141d94pvn13bh25aizqlrifwv6fs5g16zj094s"))))
4088 (build-system python-build-system)
4089 (arguments
4090 '(#:phases
4091 (modify-phases %standard-phases
4092 (add-after 'patch-source-shebangs 'patch-more-source
4093 (lambda* (#:key inputs #:allow-other-keys)
4094 (let ((openssl (assoc-ref inputs "openssl")))
4095 (substitute* "dkim/dknewkey.py"
4096 (("/usr/bin/openssl") (string-append openssl "/bin/openssl"))))
4097 #t))
4098 (replace 'check
4099 (lambda _
4100 (invoke "python" "test.py"))))))
4101 (propagated-inputs
4102 `(("python-dnspython" ,python-dnspython)))
4103 (native-inputs
4104 `(("python-authres" ,python-authres)
4105 ("python-pynacl" ,python-pynacl)))
4106 (inputs
4107 `(("openssl" ,openssl)))
4108 (home-page "https://launchpad.net/dkimpy")
4109 (synopsis "DKIM (DomainKeys Identified Mail)")
4110 (description "Python module that implements @dfn{DKIM} (DomainKeys
4111 Identified Mail) email signing and verification (RFC6376). It also provides
4112 helper scripts for command line signing and verification. It supports DKIM
4113 signing/verifying of ed25519-sha256 signatures (RFC 8463). It also supports
4114 the RFC 8617 Authenticated Received Chain (ARC) protocol.")
4115 (license license:bsd-3)))
4116
4117 (define-public python-authheaders
4118 (package
4119 (name "python-authheaders")
4120 (version "0.13.0")
4121 (source
4122 (origin
4123 (method url-fetch)
4124 (uri (pypi-uri "authheaders" version))
4125 (sha256
4126 (base32
4127 "14k6i72k5f8dyvps8vc0aq0cczc8lvqpgjfjzsy6qqychjvjcmwk"))))
4128 (build-system python-build-system)
4129 (propagated-inputs
4130 `(("python-authres" ,python-authres)
4131 ("python-dkimpy" ,python-dkimpy)
4132 ("python-dnspython" ,python-dnspython)
4133 ("python-publicsuffix2" ,python-publicsuffix2)))
4134 (home-page "https://github.com/ValiMail/authentication-headers")
4135 (synopsis "Library wrapping email authentication header verification and generation")
4136 (description
4137 "This is a Python library for the generation of email authentication
4138 headers. The library can perform DKIM, SPF, and DMARC validation, and the
4139 results are packaged into the Authentication-Results header. The library can
4140 DKIM and ARC sign messages and output the corresponding signature headers.")
4141 ;; The package's metadata claims it were MIT licensed, but the source file
4142 ;; headers disagree. MPL-2 for the public suffix list.
4143 (license (list license:zpl2.1 license:zlib license:mpl2.0))))
4144
4145 (define-public python-aiosmtpd
4146 (package
4147 (name "python-aiosmtpd")
4148 (version "1.2.2")
4149 (source
4150 (origin
4151 (method git-fetch)
4152 (uri (git-reference
4153 (url "https://github.com/aio-libs/aiosmtpd")
4154 (commit version)))
4155 (sha256
4156 (base32 "0083d6nf75xv8nq1il6jabz36v6c452svy4p402csxwwih5pw6sk"))
4157 (file-name (git-file-name name version))))
4158 (build-system python-build-system)
4159 (arguments
4160 '(#:phases
4161 (modify-phases %standard-phases
4162 (add-after 'unpack 'delete-failing-tests
4163 (lambda _
4164 ;; This test uses an expired certificate.
4165 (delete-file "aiosmtpd/tests/test_smtps.py")
4166 #t))
4167 (replace 'check
4168 (lambda _
4169 (invoke "python" "-m" "nose2" "-v"))))))
4170 (native-inputs
4171 `(("python-flufl-testing" ,python-flufl-testing)
4172 ("python-nose2" ,python-nose2)))
4173 (propagated-inputs
4174 `(("python-atpublic" ,python-atpublic)))
4175 (home-page "https://aiosmtpd.readthedocs.io/")
4176 (synopsis "Asyncio based SMTP server")
4177 (description
4178 "This project is a reimplementation of the Python stdlib @code{smtpd.py}
4179 based on asyncio.")
4180 (license (list license:asl2.0
4181 license:lgpl3)))) ; only for setup_helpers.py
4182
4183 (define-public rspamd
4184 (package
4185 (name "rspamd")
4186 (version "2.7")
4187 (source
4188 (origin
4189 (method git-fetch)
4190 (uri (git-reference
4191 (url "https://github.com/rspamd/rspamd")
4192 (commit version)))
4193 (sha256
4194 (base32 "0fw6nbfc3xqapzq5nydakwgpw6cz6vb3qby2aqlr06lzf87d3hic"))
4195 (file-name (git-file-name name version))))
4196 (build-system cmake-build-system)
4197 (arguments
4198 '(#:configure-flags '("-DENABLE_LUAJIT=ON")))
4199 (inputs
4200 `(("openssl" ,openssl)
4201 ("glib" ,glib)
4202 ("ragel" ,ragel)
4203 ("luajit" ,luajit)
4204 ("sqlite" ,sqlite)
4205 ("file" ,file)
4206 ("icu4c" ,icu4c)
4207 ("pcre" ,pcre)
4208 ("zlib" ,zlib)
4209 ("perl" ,perl)
4210 ("libsodium" ,libsodium)))
4211 (native-inputs
4212 `(("pkg-config" ,pkg-config)))
4213 (synopsis "Spam filtering system")
4214 (description "Rspamd is an advanced spam filtering system that
4215 allows evaluation of messages by a number of rules including regular
4216 expressions, statistical analysis and custom services such as URL
4217 black lists. Each message is analysed by Rspamd and given a spam
4218 score.")
4219 (home-page "https://www.rspamd.com/")
4220 (license license:asl2.0)))