gnu: dovecot: Update to 2.3.14.
[jackhill/guix/guix.git] / gnu / packages / mail.scm
CommitLineData
a661e420 1;;; GNU Guix --- Functional package management for GNU
98dd9ff8 2;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
c05d2cfc 3;;; Copyright © 2014, 2015, 2017, 2020 Mark H Weaver <mhw@netris.org>
29a7c98a 4;;; Copyright © 2014 Ian Denhardt <ian@zenhack.net>
98e9e22f 5;;; Copyright © 2014 Sou Bunnbu <iyzsong@gmail.com>
f115d817 6;;; Copyright © 2014, 2019 Julien Lepiller <julien@lepiller.eu>
66cc3ab2 7;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
17dd4329 8;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
829785c1 9;;; Copyright © 2015, 2016, 2018 Eric Bavier <bavier@member.fsf.org>
2e88d113 10;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
b93b7b25 11;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
34dd26af 12;;; Copyright © 2016 Christopher Allan Webber <cwebber@dustycloud.org>
8a75c589 13;;; Copyright © 2016 Al McElrath <hello@yrns.org>
21cdb35b 14;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Leo Famulari <leo@famulari.name>
e90819c4 15;;; Copyright © 2016 Lukas Gradl <lgradl@openmailbox.org>
99404fff 16;;; Copyright © 2016 Alex Kost <alezost@gmail.com>
3f81ca32 17;;; Copyright © 2016, 2017 Troy Sankey <sankeytms@gmail.com>
3c986a7d 18;;; Copyright © 2016, 2017, 2018 Nikita <nikita@n0.is>
24262239 19;;; Copyright © 2016 Clément Lassieur <clement@lassieur.org>
f8072794 20;;; Copyright © 2016, 2017, 2018, 2019, 2020 Arun Isaac <arunisaac@systemreboot.net>
5d87088c 21;;; Copyright © 2016 John Darrington <jmd@gnu.org>
8e020519 22;;; Copyright © 2016, 2018 Marius Bakke <mbakke@fastmail.com>
3e9750c3 23;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
6800c797 24;;; Copyright © 2017 Kyle Meyer <kyle@kyleam.com>
2836936b 25;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
7ff2159b 26;;; Copyright © 2017, 2018, 2020 Rene Saavedra <pacoon@protonmail.com>
5296548a 27;;; Copyright © 2018, 2019, 2020, 2021 Pierre Langlois <pierre.langlois@gmx.com>
c115a1c8 28;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
c315d370 29;;; Copyright © 2018 Gábor Boskovits <boskovits@gmail.com>
c107e50a 30;;; Copyright © 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
30a1476b 31;;; Copyright © 2019, 2020 Tanguy Le Carrour <tanguy@bioneland.org>
24a3eb90 32;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
9ec27360 33;;; Copyright © 2020 Justus Winter <justus@sequoia-pgp.org>
660611e5 34;;; Copyright © 2020 Eric Brown <ecbrown@ericcbrown.com>
19ca9828 35;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
3866a9ae 36;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
3fc0f877 37;;; Copyright © 2020 Alexey Abramov <levenson@mmer.org>
d763e3c7 38;;; Copyright © 2020 Tim Gesthuizen <tim.gesthuizen@yahoo.de>
7fb5084d 39;;; Copyright © 2020 Alexandru-Sergiu Marton <brown121407@posteo.ro>
c103010a 40;;; Copyright © 2020 Oleg Pykhalov <go.wigust@gmail.com>
df661fb9 41;;; Copyright © 2020 B. Wilson <elaexuotee@wilsonb.com>
793713dc 42;;; Copyright © 2020 divoplade <d@divoplade.fr>
a661e420
LC
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
1fdd3ee2 59(define-module (gnu packages mail)
59a43334 60 #:use-module (gnu packages)
1e1142d8 61 #:use-module (gnu packages admin)
b0eb2af2 62 #:use-module (gnu packages aspell)
d983a14f 63 #:use-module (gnu packages autotools)
e8435c4d 64 #:use-module (gnu packages backup)
938078a3 65 #:use-module (gnu packages base)
ee886454 66 #:use-module (gnu packages bash)
f8ae32a2 67 #:use-module (gnu packages bison)
82ffc79f 68 #:use-module (gnu packages boost)
fc9a93cb 69 #:use-module (gnu packages calendar)
ac257f12 70 #:use-module (gnu packages check)
938078a3 71 #:use-module (gnu packages compression)
944a5cdd 72 #:use-module (gnu packages crypto)
f58f767b 73 #:use-module (gnu packages curl)
4fd6bf53 74 #:use-module (gnu packages cyrus-sasl)
81ce19f4 75 #:use-module (gnu packages databases)
255d1bbe 76 #:use-module (gnu packages dbm)
d983a14f 77 #:use-module (gnu packages dejagnu)
8a3741e6 78 #:use-module (gnu packages django)
8b53366c 79 #:use-module (gnu packages dns)
938078a3 80 #:use-module (gnu packages docbook)
7a6213cb 81 #:use-module (gnu packages documentation)
d2938d59 82 #:use-module (gnu packages emacs)
e8435c4d 83 #:use-module (gnu packages enchant)
7fb5084d 84 #:use-module (gnu packages file)
938078a3 85 #:use-module (gnu packages gdb)
aa20b004 86 #:use-module (gnu packages gettext)
938078a3 87 #:use-module (gnu packages ghostscript)
d2938d59 88 #:use-module (gnu packages glib)
e8435c4d 89 #:use-module (gnu packages gnome)
524e1df6 90 #:use-module (gnu packages gnupg)
152ffe7c 91 #:use-module (gnu packages groff)
d6e941bc 92 #:use-module (gnu packages gsasl)
e8435c4d 93 #:use-module (gnu packages gtk)
1ffa7090 94 #:use-module (gnu packages guile)
0791437f 95 #:use-module (gnu packages guile-xyz)
f8ae32a2 96 #:use-module (gnu packages flex)
9ec27360 97 #:use-module (gnu packages haskell-xyz)
9e2a49db 98 #:use-module (gnu packages icu4c)
b0eb2af2 99 #:use-module (gnu packages kerberos)
c6872990 100 #:use-module (gnu packages language)
e8435c4d 101 #:use-module (gnu packages libcanberra)
8b53366c 102 #:use-module (gnu packages libevent)
d6e941bc 103 #:use-module (gnu packages libidn)
aef4c482 104 #:use-module (gnu packages libunistring)
84ce7c5a 105 #:use-module (gnu packages libunwind)
d983a14f 106 #:use-module (gnu packages linux)
99b23fee 107 #:use-module (gnu packages lsof)
152ffe7c 108 #:use-module (gnu packages lua)
d983a14f 109 #:use-module (gnu packages m4)
938078a3 110 #:use-module (gnu packages man)
1ffa7090 111 #:use-module (gnu packages ncurses)
938078a3 112 #:use-module (gnu packages networking)
82ffc79f 113 #:use-module (gnu packages ninja)
b0eb2af2 114 #:use-module (gnu packages openldap)
c315d370 115 #:use-module (gnu packages onc-rpc)
66cc3ab2 116 #:use-module (gnu packages pcre)
13f04f48 117 #:use-module (gnu packages perl)
f115d817 118 #:use-module (gnu packages perl-check)
eff3a9b2 119 #:use-module (gnu packages perl-web)
938078a3 120 #:use-module (gnu packages pkg-config)
82ffc79f 121 #:use-module (gnu packages protobuf)
3919a31a 122 #:use-module (gnu packages python)
3a98604f 123 #:use-module (gnu packages python-check)
5c4332e5 124 #:use-module (gnu packages python-crypto)
1b2f753d 125 #:use-module (gnu packages python-web)
44d10b1f 126 #:use-module (gnu packages python-xyz)
7fb5084d 127 #:use-module (gnu packages ragel)
9e2a49db 128 #:use-module (gnu packages rdf)
1ffa7090 129 #:use-module (gnu packages readline)
938078a3 130 #:use-module (gnu packages ruby)
d2938d59 131 #:use-module (gnu packages search)
224b1c83 132 #:use-module (gnu packages serialization)
1bd3f849 133 #:use-module (gnu packages samba)
6cf27c89 134 #:use-module (gnu packages screen)
9d0c291e 135 #:use-module (gnu packages sphinx)
cd0322a3 136 #:use-module (gnu packages sqlite)
b0eb2af2 137 #:use-module (gnu packages tcl)
938078a3 138 #:use-module (gnu packages texinfo)
33dc54b0 139 #:use-module (gnu packages time)
a7fd7b68 140 #:use-module (gnu packages tls)
eff3a9b2 141 #:use-module (gnu packages version-control)
938078a3 142 #:use-module (gnu packages w3m)
be0c5733 143 #:use-module (gnu packages web)
7c16151a 144 #:use-module (gnu packages webkit)
3d88855d 145 #:use-module (gnu packages xdisorg)
e8435c4d 146 #:use-module (gnu packages xorg)
938078a3 147 #:use-module (gnu packages xml)
7e3b537c 148 #:use-module ((guix licenses) #:prefix license:)
a661e420
LC
149 #:use-module (guix packages)
150 #:use-module (guix download)
f8ae32a2 151 #:use-module (guix git-download)
62035656 152 #:use-module (guix svn-download)
29a7c98a 153 #:use-module (guix utils)
7fb5084d 154 #:use-module (guix build-system cmake)
7269a591 155 #:use-module (guix build-system glib-or-gtk)
681a6588 156 #:use-module (guix build-system gnu)
e3a47031 157 #:use-module (guix build-system guile)
ebda902f 158 #:use-module (guix build-system perl)
24262239 159 #:use-module (guix build-system python)
98dd9ff8
LC
160 #:use-module (guix build-system trivial)
161 #:use-module (srfi srfi-1)
162 #:use-module (ice-9 match))
a661e420 163
19ca9828
MC
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
195Agent (MUA) and the Mail Transfer Agent (MTA). When a mail is sent by a user
196in the MUA, it is first passed to Anubis, which performs additional processing
197to the message before passing it on for delivery by the MTA. Anubis may, for
198example, modify the message headers or body, or encrypt or sign the message.")
199 (home-page "https://www.gnu.org/software/anubis/manual/")
7e3b537c 200 (license license:gpl3+)))
19ca9828 201
a661e420
LC
202(define-public mailutils
203 (package
204 (name "mailutils")
c28f242b 205 (version "3.10")
a661e420
LC
206 (source (origin
207 (method url-fetch)
208 (uri (string-append "mirror://gnu/mailutils/mailutils-"
20a3df0f 209 version ".tar.xz"))
a661e420
LC
210 (sha256
211 (base32
891b045f
PL
212 "17smrxjdgbbzbzakik30vj46q4iib85ksqhb82jr4vjp57akszh9"))
213 (patches
214 ;; Fixes https://issues.guix.gnu.org/43088.
215 (search-patches "mailutils-fix-uninitialized-variable.patch"))))
a661e420
LC
216 (build-system gnu-build-system)
217 (arguments
98dd9ff8 218 `(#:phases
de75f0b1 219 (modify-phases %standard-phases
baa6790b 220 (add-before 'check 'prepare-test-suite
de75f0b1
EF
221 (lambda _
222 ;; Use the right file name for `cat'.
223 (substitute* "testsuite/lib/mailutils.exp"
224 (("/bin/cat")
225 (which "cat")))
14253017 226
43987c97 227 ;; Tests try to invoke 'mda' such that it looks up the
de75f0b1
EF
228 ;; 'root' user, which does not exist in the build
229 ;; environment.
7cb77b78
LC
230 (substitute* '("mda/mda/tests/testsuite"
231 "mda/lmtpd/tests/testsuite")
de75f0b1
EF
232 (("root <") "nobody <")
233 (("spool/root") "spool/nobody")
234 (("root@localhost") "nobody@localhost"))
14253017 235
de75f0b1
EF
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"))))
14253017 242
de75f0b1
EF
243 (substitute* "mh/tests/testsuite"
244 (("moreproc: /bin/cat")
245 (string-append "moreproc: " (which "cat"))))
14253017 246
de75f0b1
EF
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)))
14253017 253
c28f242b
TGR
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
baa6790b
LC
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
de75f0b1
EF
272 #t)))
273 ;; TODO: Add `--with-sql'.
98dd9ff8
LC
274 #:configure-flags
275 (list "--sysconfdir=/etc"
ac3b4b12 276
98dd9ff8
LC
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))))))
ac3b4b12 286
a661e420 287 #:parallel-tests? #f))
3f3c0ab4 288 (native-inputs
24a3eb90 289 `(("perl" ,perl) ;for 'gylwrap'
a661e420 290 ("texinfo" ,texinfo)
24a3eb90
VL
291 ("dejagnu" ,dejagnu)))
292 (inputs
293 `(("m4" ,m4)
b6bee63b 294 ("guile" ,guile-3.0)
1f889cac 295 ("gsasl" ,gsasl)
a661e420
LC
296 ("gnutls" ,gnutls)
297 ("ncurses" ,ncurses)
abe5d2dc 298 ("readline" ,readline)
a661e420 299 ("linux-pam" ,linux-pam)
3246cc91 300 ("libltdl" ,libltdl)
aef4c482
TGR
301 ("gdbm" ,gdbm)
302
303 ;; Required for SEARCH CHARSET.
304 ("libiconv" ,libiconv)
305 ("libunistring" ,libunistring)))
6fd52309 306 (home-page "https://mailutils.org")
f50d2669 307 (synopsis "Utilities and library for reading and serving mail")
a661e420 308 (description
79c311b8
LC
309 "GNU Mailutils is a collection of programs for managing, viewing and
310processing electronic mail. It contains both utilities and server daemons
311and all operate in a protocol-agnostic way. The underlying libraries are
312also available, simplifying the addition of mail capabilities to new
313software.")
a661e420
LC
314 (license
315 ;; Libraries are under LGPLv3+, and programs under GPLv3+.
7e3b537c 316 (list license:gpl3+ license:lgpl3+))))
d983a14f 317
b6bee63b 318(define-public guile2.2-mailutils
98dd9ff8
LC
319 (package
320 (inherit mailutils)
b6bee63b 321 (name "guile2.2-mailutils")
98dd9ff8 322 (inputs
b6bee63b 323 `(("guile" ,guile-2.2)
98dd9ff8
LC
324 ,@(alist-delete "guile" (package-inputs mailutils))))))
325
b6bee63b
LC
326(define-public guile3.0-mailutils
327 (deprecated-package "guile3.0-mailutils" mailutils))
328
1e1142d8
TGR
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
398hosts that receive no local mail and only relay mail to a fixed set of smart
399relays. It's useful for systems such as Web servers that must be able to send
400email notifications, without having to run a full-blown MTA such as sendmail
401or qmail.
402
403Nullmailer is designed to be simple to configure, easy to extend, and secure.
404It requires little ongoing administration. The included @command{sendmail}
405emulator front-end should allow most (if not all) sendmail-compatible programs
406to run without any changes.")
7e3b537c
TGR
407 (license (list license:lgpl2.1+ ; lib/cli++/ (but some files lack headers)
408 license:gpl2+)))) ; everything else
1e1142d8 409
d983a14f
AE
410(define-public fetchmail
411 (package
412 (name "fetchmail")
2b8779cb 413 (version "6.4.16")
271b3c9d
TGR
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
2b8779cb 421 (base32 "1fagi10fv8pdil6gss6a3ca3jbp3wbiyz7cp8ivsxyrsq059ljq4"))))
d983a14f
AE
422 (build-system gnu-build-system)
423 (inputs
424 `(("openssl" ,openssl)))
425 (arguments
271b3c9d
TGR
426 `(#:configure-flags
427 (list (string-append "--with-ssl="
a9ef5425 428 (assoc-ref %build-inputs "openssl")))))
447b61d4 429 (home-page "https://www.fetchmail.info/")
ae2189a9 430 (synopsis "Remote-mail retrieval and forwarding utility")
d983a14f
AE
431 (description
432 "Fetchmail is a full-featured, robust, well-documented remote-mail
433retrieval and forwarding utility intended to be used over on-demand
434TCP/IP links (such as SLIP or PPP connections). It supports every
435remote-mail protocol now in use on the Internet: POP2, POP3, RPOP, APOP,
436KPOP, all flavors of IMAP, ETRN, and ODMR. It can even support IPv6
437and IPSEC.
438
439Fetchmail retrieves mail from remote mail servers and forwards it via SMTP,
440so it can then be read by normal mail user agents such as mutt, elm
441or BSD Mail. It allows all your system MTA's filtering, forwarding, and
442aliasing facilities to work just as they would on normal mail.")
7e3b537c 443 (license license:gpl2+))) ; most files are actually public domain or x11
13f04f48
AE
444
445(define-public mutt
446 (package
447 (name "mutt")
59c03bd4 448 (version "2.0.5")
13f04f48
AE
449 (source (origin
450 (method url-fetch)
a101b15b 451 (uri (list
a101b15b 452 (string-append "https://bitbucket.org/mutt/mutt/downloads/"
a11237e4
LF
453 "mutt-" version ".tar.gz")
454 (string-append "http://ftp.mutt.org/pub/mutt/mutt-"
455 version ".tar.gz")))
13f04f48
AE
456 (sha256
457 (base32
59c03bd4
LF
458 "0k80s27sf7djb7zxj81ihksr8jkr71mfaa8976fzh41i1pn5l7g2"))
459 (patches (search-patches "mutt-store-references.patch"))))
13f04f48
AE
460 (build-system gnu-build-system)
461 (inputs
4fd6bf53 462 `(("cyrus-sasl" ,cyrus-sasl)
b0bb0136 463 ("gdbm" ,gdbm)
524e1df6 464 ("gpgme" ,gpgme)
892be267 465 ("libidn2" ,libidn2)
4fd6bf53 466 ("ncurses" ,ncurses)
13f04f48 467 ("openssl" ,openssl)
892be267
IVB
468 ("perl" ,perl)
469 ("sqlite" ,sqlite)))
13f04f48
AE
470 (arguments
471 `(#:configure-flags '("--enable-smtp"
472 "--enable-imap"
473 "--enable-pop"
524e1df6 474 "--enable-gpgme"
b0bb0136 475 "--enable-hcache" ; for header caching
0323fe80 476 "--enable-sidebar"
892be267 477 "--enable-autocrypt"
13f04f48 478 "--with-ssl"
4fd6bf53 479 "--with-sasl"
892be267
IVB
480 "--with-sqlite3" ; required for Autocrypt
481 "--with-idn2" ; recommended for Autocrypt
02d32b19
TGR
482 ;; So that mutt does not check whether the path
483 ;; exists, which it does not in the chroot.
13f04f48
AE
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
489operating systems.")
7e3b537c 490 (license license:gpl2+)))
681a6588 491
7596ddf3 492(define-public neomutt
d54a759d
TGR
493 (package
494 (name "neomutt")
04d5fbab 495 (version "20201127")
d54a759d
TGR
496 (source
497 (origin
498 (method git-fetch)
499 (uri (git-reference
b0e7b699 500 (url "https://github.com/neomutt/neomutt")
d54a759d
TGR
501 (commit version)))
502 (file-name (git-file-name name version))
503 (sha256
04d5fbab 504 (base32 "1yhpz591jhcjpwllgppwf7vl7z2rnaqfphsvqd1sihd9k4lwch06"))))
d54a759d
TGR
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)
ab17fb60
TGR
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")))))))
d54a759d
TGR
540 (arguments
541 `(#:test-target "test"
542 #:configure-flags
543 (list "--gpgme"
7596ddf3 544
d54a759d
TGR
545 ;; Database, implies header caching.
546 "--disable-tokyocabinet"
547 "--disable-qdbm"
548 "--disable-bdb"
549 "--lmdb"
550 "--kyotocabinet"
54a402dd 551
d54a759d 552 "--gdbm"
54a402dd 553
d54a759d
TGR
554 "--gnutls"
555 "--disable-ssl"
556 "--sasl"
557 (string-append "--with-sasl="
558 (assoc-ref %build-inputs "cyrus-sasl"))
7596ddf3 559
7596ddf3 560
d54a759d
TGR
561 "--smime"
562 "--notmuch"
563 "--disable-idn"
564 "--idn2"
7596ddf3 565
d54a759d
TGR
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"
7596ddf3 570
d54a759d
TGR
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")
ab17fb60
TGR
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))))))
c3c56a4e 598 (home-page "https://neomutt.org/")
d54a759d
TGR
599 (synopsis "Command-line mail reader based on Mutt")
600 (description
601 "NeoMutt is a command-line mail reader which is based on mutt.
32fc1ec3 602It adds a large amount of new and improved features to mutt.")
7e3b537c 603 (license license:gpl2+)))
7596ddf3 604
681a6588
MW
605(define-public gmime
606 (package
607 (name "gmime")
4e839a83 608 (version "3.2.7")
681a6588
MW
609 (source (origin
610 (method url-fetch)
75630043 611 (uri (string-append "mirror://gnome/sources/gmime/"
29a7c98a 612 (version-major+minor version)
681a6588
MW
613 "/gmime-" version ".tar.xz"))
614 (sha256
615 (base32
4e839a83 616 "0i3xfc84qn1z99i70q68kbnp9rmgqrnprqb418ba52s6g9j9dsia"))))
681a6588
MW
617 (build-system gnu-build-system)
618 (native-inputs
619 `(("pkg-config" ,pkg-config)
e9654ef1
TLC
620 ("gnupg" ,gnupg) ; for tests only
621 ("gobject-introspection" ,gobject-introspection)))
681a6588
MW
622 (inputs `(("glib" ,glib)
623 ("gpgme" ,gpgme)
624 ("zlib" ,zlib)))
625 (arguments
e9654ef1
TLC
626 `(#:configure-flags
627 (list "--enable-introspection=yes")
628 #:phases
cc955356
EF
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
ae83dcf6 634 ;; hard-coded paths. Here we patch them all.
635 ;; We use ISO-8859-1 here because test-iconv.c contains
cc955356
EF
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))
ae83dcf6 641 (prog (which base)))
cc955356 642 (string-append pre
8e020519
MB
643 (or prog (error "not found: " base)))))))
644 #t)))))
681a6588
MW
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
649the creation and parsing of messages using the Multipurpose Internet Mail
650Extension (MIME).")
7e3b537c 651 (license (list license:lgpl2.1+ license:gpl2+ license:gpl3+))))
681a6588 652
8e020519
MB
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
f6807498
RW
667(define-public altermime
668 (package
669 (name "altermime")
8daad379 670 (version "0.3.11")
f6807498
RW
671 (source (origin
672 (method url-fetch)
673 (uri (string-append "http://pldaniels.com/altermime/altermime-"
674 version ".tar.gz"))
675 (sha256
676 (base32
8daad379 677 "15zxg6spcmd35r6xbidq2fgcg2nzyv1sbbqds08lzll70mqx4pj7"))))
f6807498
RW
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
715mailpack. What can alterMIME do?
716
717@enumerate
718@item Insert disclaimers,
a4920a22 719@item insert arbitrary X-headers,
f6807498
RW
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
82ffc79f
TLC
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
4c9eed9c
TLC
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")
82ffc79f
TLC
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 _
4c9eed9c
TLC
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)))))
82ffc79f
TLC
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)))
4c9eed9c
TLC
829 (propagated-inputs
830 `(("adwaita-icon-theme" ,adwaita-icon-theme))) ; Required for the thread view
82ffc79f
TLC
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
835graphical interface to searching, display and composing email, organized in
836thread and tags. Astroid uses the notmuch backend for searches through tons of
837email. Astroid searches, displays and compose emails — and relies on other
838programs for fetching, syncing and sending email.")
839 (license (list license:gpl3+ ; 'this program'
840 license:lgpl2.1+)))) ; code from geary, gmime
841
0d63abeb
SL
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
886MIME-encoded email package.")
887 (home-page "https://github.com/inflex/ripMIME")
888 (license license:bsd-3))))
889
85ad1551
ASM
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
a7e59c50
LC
928(define-public bogofilter
929 (package
930 (name "bogofilter")
2665ff41
TGR
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"))))
a7e59c50
LC
939 (build-system gnu-build-system)
940 (arguments
c55fa42b
EF
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)))))
a7e59c50
LC
949 (native-inputs `(("flex" ,flex)))
950 (inputs `(("bdb" ,bdb)))
0ba57558 951 (home-page "https://bogofilter.sourceforge.io/")
a7e59c50
LC
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
956content (body). The program is able to learn from the user's classifications
957and corrections. It is based on a Bayesian filter.")
7e3b537c 958 (license license:gpl3+)))
a7e59c50 959
3919a31a
EB
960(define-public offlineimap
961 (package
962 (name "offlineimap")
d763e3c7 963 (version "7.3.3")
3919a31a 964 (source (origin
bc7c9f77
MB
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))
3919a31a
EB
970 (sha256
971 (base32
d763e3c7 972 "1gg8ry67i20qapj4z20am9bm67m2q28kixcj7ja75m897vhzarnq"))))
3919a31a 973 (build-system python-build-system)
7a6213cb 974 (native-inputs
4b0e6367 975 `(("asciidoc" ,asciidoc)))
d763e3c7
TG
976 (inputs
977 `(("python2-pysqlite" ,python2-pysqlite)
978 ("python2-rfc6555" ,python2-rfc6555)
979 ("python2-six" ,python2-six)))
3919a31a
EB
980 (arguments
981 ;; The setup.py script expects python-2.
982 `(#:python ,python-2
983 ;; Tests require a modifiable IMAP account.
42aa73b3
EF
984 #:tests? #f
985 #:phases
986 (modify-phases %standard-phases
7a6213cb
MB
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"))
7232c3f5 992 (invoke "make" "-C" "docs" "man")))
7a6213cb
MB
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"))
42aa73b3 999 #t))))))
684633e2 1000 (home-page "https://www.offlineimap.org")
31e98ca6 1001 (synopsis "Sync emails between two repositories")
3919a31a
EB
1002 (description
1003 "OfflineImap synchronizes emails between two repositories, so that you
1004can read the same mailbox from multiple computers. It supports IMAP as REMOTE
1005repository and Maildir/IMAP as LOCAL repository.")
7e3b537c 1006 (license license:gpl2+)))
3919a31a 1007
3e9750c3
TD
1008(define-public emacs-mew
1009 (package
1010 (name "emacs-mew")
611a6980 1011 (version "6.8")
3e9750c3
TD
1012 (source (origin
1013 (method url-fetch)
8502ff7a 1014 (uri (string-append "https://mew.org/Release/mew-"
3e9750c3
TD
1015 version ".tar.gz"))
1016 (sha256
1017 (base32
611a6980 1018 "0ixzyq33l6j34410kqav3lwn2wx171zvqd3irvns2jvhrbww8i6g"))))
3e9750c3
TD
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
d5195020 1026 (let ((elisp-dir "/share/emacs/site-lisp")
3e9750c3
TD
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)))
8502ff7a 1052 (home-page "https://mew.org")
3e9750c3
TD
1053 (synopsis "Emacs e-mail client")
1054 (description "Mew (Messaging in the Emacs World) is a user interface
1055for text messages, multimedia messages (MIME), news articles and
1056security functionality including PGP, S/MIME, SSH, and SSL.")
7e3b537c 1057 (license license:bsd-3)))
3e9750c3 1058
d2938d59
EB
1059(define-public mu
1060 (package
1061 (name "mu")
9a45b335 1062 (version "1.4.15")
d2938d59
EB
1063 (source (origin
1064 (method url-fetch)
e7b9da24 1065 (uri (string-append "https://github.com/djcb/mu/releases/"
b40ba288 1066 "download/" version "/"
857fabcd 1067 "mu-" version ".tar.xz"))
d2938d59
EB
1068 (sha256
1069 (base32
9a45b335 1070 "0ailz0k5fdgq6gdl5m7jxy315b7qn5ckj6xwd49hsiq9vqblwlpp"))))
d2938d59
EB
1071 (build-system gnu-build-system)
1072 (native-inputs
1073 `(("pkg-config" ,pkg-config)
9fd571a2 1074 ("glib" ,glib "bin") ; for gtester
63298f14 1075 ("emacs" ,emacs-minimal)
857fabcd 1076 ("tzdata" ,tzdata-for-tests))) ; for mu/test/test-mu-query.c
d2938d59
EB
1077 (inputs
1078 `(("xapian" ,xapian)
d59ec129 1079 ("guile" ,guile-2.2)
d2938d59 1080 ("glib" ,glib)
857fabcd 1081 ("gmime" ,gmime)))
d2938d59 1082 (arguments
704f2196
AK
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
99404fff 1089 (modify-phases %standard-phases
e62e975b 1090 (add-after 'unpack 'patch-configure
789bda83
AK
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 _
e62e975b 1096 (substitute* "configure"
d59ec129
RW
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/"))
789bda83 1103 #t))
096a0527 1104 (add-after 'unpack 'patch-bin-sh-in-tests
3481c714 1105 (lambda _
096a0527
PL
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")))
3481c714 1112 #t))
c9dc4577
RW
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))
99404fff
AK
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"))
704f2196
AK
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"))
99404fff 1133 #t)))))
754c1204 1134 (home-page "https://www.djcbsoftware.nl/code/mu/")
d2938d59
EB
1135 (synopsis "Quickly find emails")
1136 (description
1137 "Mu is a tool for dealing with e-mail messages stored in the
1138Maildir-format. Mu's purpose in life is to help you to quickly find the
1139messages you need; in addition, it allows you to view messages, extract
1140attachments, create new maildirs, and so on.")
7e3b537c 1141 (license license:gpl3+)))
d2938d59 1142
a2cb16b0
TS
1143(define-public alot
1144 (package
1145 (name "alot")
5f72da5f 1146 (version "0.9.1")
a2cb16b0 1147 (source (origin
05be4e06 1148 (method git-fetch)
1b94f182
TS
1149 ;; package author intends on distributing via github rather
1150 ;; than pypi:
1151 ;; https://github.com/pazz/alot/issues/877#issuecomment-230173331
05be4e06
EF
1152 (uri (git-reference
1153 (url "https://github.com/pazz/alot")
1154 (commit version)))
1155 (file-name (git-file-name name version))
a2cb16b0
TS
1156 (sha256
1157 (base32
05be4e06 1158 "0s94m17yph1gq9f2svipb3bbwbw1s4j3zf2xkg5h91006v8286r6"))))
a2cb16b0
TS
1159 (build-system python-build-system)
1160 (arguments
5f72da5f
TLC
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)))))
3f81ca32 1178 (native-inputs
5f72da5f
TLC
1179 `(("procps" ,procps)
1180 ("python-mock" ,python-mock)))
a2cb16b0 1181 (inputs
5f72da5f
TLC
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)))
a2cb16b0 1191 (home-page "https://github.com/pazz/alot")
5f72da5f 1192 (synopsis "Command-line MUA using Notmuch")
a2cb16b0 1193 (description
5f72da5f
TLC
1194 "Alot is a terminal-based mail user agent based on the Notmuch mail
1195indexer. It is written in Python using the @code{urwid} toolkit and features
1196a modular and command prompt driven interface to provide a full mail user
1197agent (@dfn{MUA}) experience as an alternative to the Emacs mode shipped with
1198Notmuch.")
7e3b537c 1199 (license license:gpl3+)))
a2cb16b0 1200
0350a8bb
HG
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
b0e7b699 1212 (url "https://github.com/kspi/notifymuch")
0350a8bb
HG
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
1241the notmuch database. The notifications are sent using libnotify to a
1242notification daemon. The query to find messages to send a notification about
1243is configurable, and a notification for the same message will not be send
1244within a configurable period (defaults to 48 hours). To use notifymuch, run
1245@command{notifymuch} after new mail is indexed, this can be automated by
1246invoking @command{notifymuch} from the post-new hook.")
7e3b537c 1247 (license license:gpl3))))
0350a8bb 1248
1bd3f849
DT
1249(define-public notmuch
1250 (package
1251 (name "notmuch")
7cb188f8 1252 (version "0.31.4")
1bd3f849
DT
1253 (source (origin
1254 (method url-fetch)
866fade9 1255 (uri (string-append "https://notmuchmail.org/releases/notmuch-"
edc55ce9 1256 version ".tar.xz"))
1bd3f849
DT
1257 (sha256
1258 (base32
7cb188f8 1259 "0magnyjjhhv11nwcm2596hdxszrj61y69i0hmwqdc3v6cxjvcqc6"))))
1bd3f849
DT
1260 (build-system gnu-build-system)
1261 (arguments
d738f134
AI
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))
e82cf6c6
TGR
1268 #:make-flags
1269 (list "V=1" ; verbose test output
1270 "NOTMUCH_TEST_TIMEOUT=1h") ; don't fail on slow machines
eb537f57 1271 #:phases (modify-phases %standard-phases
6cf27c89
MB
1272 (add-after 'unpack 'patch-notmuch-lib.el
1273 (lambda _
1274 (substitute* "emacs/notmuch-lib.el"
1275 (("/bin/sh") (which "sh")))
1276 #t))
eb537f57
DT
1277 (replace 'configure
1278 (lambda* (#:key outputs #:allow-other-keys)
1279 (setenv "CC" "gcc")
1280 (setenv "CONFIG_SHELL" (which "sh"))
ee886454 1281
d738f134
AI
1282 (let* ((out (assoc-ref outputs "out"))
1283 (elisp
1cd91499 1284 (string-append out "/share/emacs/site-lisp/")))
82d2dfa0
TGR
1285 (invoke "./configure"
1286 (string-append "--prefix=" out)
1287 (string-append "--emacslispdir=" elisp)
1288 (string-append "--emacsetcdir=" elisp)))))
c05d2cfc
MW
1289 (add-before 'check 'disable-failing-tests
1290 ;; FIXME: Investigate why these tests are failing,
edc55ce9 1291 ;; and try removing this for notmuch versions > 0.31.
c05d2cfc
MW
1292 (lambda _
1293 (substitute* "test/T356-protected-headers.sh"
1294 (("\\$NOTMUCH_GMIME_X509_CERT_VALIDITY") "0"))
1295 #t))
6cf27c89
MB
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")))
d738f134
AI
1302 #t))
1303 (add-after 'install 'make-autoloads
1304 (assoc-ref emacs:%standard-phases 'make-autoloads)))))
1bd3f849 1305 (native-inputs
2c5b91dc 1306 `(("bash-completion" ,bash-completion)
76472ed9 1307 ("emacs" ,emacs-no-x) ; -minimal lacks libxml, needed for some tests
2c5b91dc 1308 ("pkg-config" ,pkg-config)
3d3c07f3
MB
1309 ("python" ,python)
1310 ("python-docutils" ,python-docutils)
556530c9 1311 ("sphinx" ,python-sphinx)
6cf27c89
MB
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)))
1bd3f849 1319 (inputs
2c5b91dc 1320 `(("glib" ,glib)
1bd3f849
DT
1321 ("gmime" ,gmime)
1322 ("talloc" ,talloc)
1323 ("xapian" ,xapian)
1324 ("zlib" ,zlib)))
540d6cc7 1325 (home-page "https://notmuchmail.org/")
1bd3f849
DT
1326 (synopsis "Thread-based email index, search, and tagging")
1327 (description
1328 "Notmuch is a command-line based program for indexing, searching, read-
1329ing, and tagging large collections of email messages.")
7e3b537c 1330 (license license:gpl3+)))
1bd3f849 1331
8a75c589 1332(define-public notmuch-addrlookup-c
9694b44e
AI
1333 (package
1334 (name "notmuch-addrlookup-c")
1335 (version (string-append "9"))
1336 (source (origin
1337 (method git-fetch)
1338 (uri (git-reference
b0e7b699 1339 (url "https://github.com/aperezdc/notmuch-addrlookup-c")
9694b44e
AI
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,
8a75c589 1368useful for email address completion.")
9694b44e 1369 (license license:expat)))
8a75c589 1370
4b6909bc
TS
1371(define-public python-notmuch
1372 (package
1373 (name "python-notmuch")
540d6cc7 1374 (version (package-version notmuch))
4b6909bc
TS
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))))))
540d6cc7 1396 (home-page (package-home-page notmuch))
4b6909bc
TS
1397 (synopsis "Python bindings of the Notmuch mail indexing library")
1398 (description
1399 "This package provides Python bindings to use the Notmuch mail indexing
1400and search library.")
7e3b537c 1401 (license license:gpl3+)))
4b6909bc 1402
1c74da21 1403(define-public python2-notmuch
caa6fc89 1404 (package-with-python2 python-notmuch))
1c74da21 1405
9ec27360
JW
1406(define-public muchsync
1407 (package
1408 (name "muchsync")
72ee78a6 1409 (version "6")
9ec27360
JW
1410 (source
1411 (origin
1412 (method url-fetch)
1413 (uri (string-append "http://www.muchsync.org/src/"
1414 "muchsync-" version ".tar.gz"))
1415 (sha256
72ee78a6 1416 (base32 "1s799kx16nm5ry1fcqcc0grgxrwnnp4cnzd0hzwbkvc5v2sf6g8b"))))
9ec27360
JW
1417 (build-system gnu-build-system)
1418 (native-inputs
8514dfde 1419 `(("pandoc" ,pandoc)
9ec27360
JW
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
1430mail messages and Notmuch tags across machines. The protocol is heavily
1431pipelined to work efficiently over high-latency networks such as mobile
1432broadband. Muchsync supports arbitrary pairwise synchronization among
1433replicas. A version-vector-based algorithm allows it to exchange only the
1434minimum information necessary to bring replicas up to date regardless of which
1435pairs have previously synchronized.")
72ee78a6 1436 (license license:gpl2+))) ; with OpenSSL libcrypto exception
9ec27360 1437
98e9e22f
SB
1438(define-public getmail
1439 (package
1440 (name "getmail")
88e903a5 1441 (version "5.14")
98e9e22f
SB
1442 (source
1443 (origin
1444 (method url-fetch)
1445 (uri (string-append "http://pyropus.ca/software/getmail/old-versions/"
7e14ed93 1446 "getmail-" version ".tar.gz"))
98e9e22f 1447 (sha256
88e903a5 1448 (base32 "1hcrd9h4g12f5gvl1djsbchcjry02ghq4icdr897s8v48pkrzagk"))))
98e9e22f
SB
1449 (build-system python-build-system)
1450 (arguments
88e903a5 1451 `(#:tests? #f ; no tests
98e9e22f
SB
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
1457POP3, IMAP4, SSL variants of both, maildirs, mboxrd files, external MDAs,
1458arbitrary message filtering, single-user and domain-mailboxes, and many other
1459useful features.")
1460
1461 ;; License is specified in file '__init__.py'.
7e3b537c 1462 (license license:gpl2)))
98e9e22f 1463
f58f767b
JL
1464(define-public libetpan
1465 (package
1466 (name "libetpan")
a43fcc72 1467 (version "1.9.4")
f58f767b 1468 (source (origin
aae96f8f
TGR
1469 (method git-fetch)
1470 (uri (git-reference
8ed4c468 1471 (url "https://github.com/dinhviethoa/libetpan")
aae96f8f
TGR
1472 (commit version)))
1473 (file-name (git-file-name name version))
f58f767b 1474 (sha256
a43fcc72 1475 (base32 "0g7an003simfdn7ihg9yjv7hl2czsmjsndjrp39i7cad8icixscn"))))
f58f767b 1476 (build-system gnu-build-system)
464f5447 1477 (native-inputs `(("autoconf" ,autoconf-wrapper)
f58f767b 1478 ("automake" ,automake)
3246cc91 1479 ("libtool" ,libtool)
f58f767b
JL
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)
c1748912
EF
1488 ("expat" ,expat)
1489 ("zlib" ,zlib)))
f58f767b 1490 (arguments
778d6b52 1491 '(#:configure-flags
f58f767b 1492 '("--disable-static" "--disable-db")))
81fb037f 1493 (home-page "https://www.etpan.org/libetpan.html")
f58f767b
JL
1494 (synopsis "Portable middleware for email access")
1495 (description
1496 "The purpose of this mail library is to provide a portable, efficient
1497framework for different kinds of mail access: IMAP, SMTP, POP and NNTP. It
1498provides an API for C language. It's the low-level API used by MailCore and
1499MailCore 2.")
7e3b537c 1500 (license license:bsd-3)))
f58f767b 1501
ee6e780b
DM
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/"
f30444b9 1510 "compface-" version ".tar.gz"))
ee6e780b
DM
1511 (sha256
1512 (base32
1513 "09b89wg63hg502hsz592cd2h87wdprb1dq1k1y07n89hym2q56d6"))))
1514 (build-system gnu-build-system)
1515 (arguments
1516 `(#:tests? #f))
1517 (synopsis "Portrait image compressor")
586ddde5 1518 (description "This package takes your 48x48x1 portrait image and
ee6e780b 1519compresses it.")
0622403d 1520 (home-page "https://legacy.cs.indiana.edu/ftp/faces/")
7e3b537c 1521 (license (license:x11-style "file://README"))))
ee6e780b 1522
e8435c4d
JL
1523(define-public claws-mail
1524 (package
1525 (name "claws-mail")
fc316a58 1526 (version "3.17.8")
b168f2ba
RG
1527 (source
1528 (origin
1529 (method url-fetch)
1530 (uri
fc316a58
TGR
1531 (string-append "https://www.claws-mail.org/releases/claws-mail-"
1532 version ".tar.xz"))
b168f2ba 1533 (sha256
fc316a58 1534 (base32 "1byxmz68lnm2m8q1gnp0lpr3qp7dcwabrw5iqflz9mlm960v5dyd"))))
7269a591 1535 (build-system glib-or-gtk-build-system)
e8435c4d 1536 (arguments
b168f2ba
RG
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)))
e8435c4d 1582 (synopsis "GTK-based Email client")
b168f2ba
RG
1583 (description "Claws-Mail is an email client (and news reader) based on GTK+.
1584The appearance and interface are designed to be familiar to new users coming
1585from other popular email clients, as well as experienced users. Almost all
1586commands are accessible with the keyboard. Plus, Claws-Mail is extensible via
1587addons which can add many functionalities to the base client.")
ba5c926c 1588 (home-page "https://www.claws-mail.org/")
7e3b537c 1589 (license license:gpl3+))) ; most files are actually public domain or x11
e8435c4d 1590
d6e941bc
1591(define-public msmtp
1592 (package
1593 (name "msmtp")
fbbee36d 1594 (version "1.8.14")
d6e941bc
1595 (source
1596 (origin
1597 (method url-fetch)
1a80f1a9 1598 (uri (string-append "https://marlam.de/msmtp/releases/"
d23d1ddf
LF
1599 "/msmtp-" version ".tar.xz"))
1600 (sha256
fbbee36d 1601 (base32 "1d3knxpwpglg20z4zcsi82mqv9285ah1b1b16k1fk1hlf5fhcvym"))))
d6e941bc
1602 (build-system gnu-build-system)
1603 (inputs
91b3a6d4 1604 `(("libsecret" ,libsecret)
d6e941bc
1605 ("gnutls" ,gnutls)
1606 ("zlib" ,zlib)
1607 ("gsasl" ,gsasl)))
1608 (native-inputs
1609 `(("pkg-config" ,pkg-config)))
1a80f1a9 1610 (home-page "https://marlam.de/msmtp/")
d6e941bc
1611 (arguments
1612 `(#:configure-flags (list "--with-libgsasl"
1613 "--with-libidn"
823e2ed4
LF
1614 "--with-tls=gnutls")
1615 #:phases
1616 (modify-phases %standard-phases
34e549d8 1617 (add-after 'install 'install-additional-files
823e2ed4
LF
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"))
34e549d8
EF
1622 (msmtpq "scripts/msmtpq")
1623 (vimfiles (string-append out "/share/vim/vimfiles/plugin")))
823e2ed4
LF
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)
34e549d8 1627 (install-file "scripts/vim/msmtp.vim" vimfiles)
b93b7b25
EF
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"))
823e2ed4 1632 #t))))))
d6e941bc
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
1637an SMTP server (for example at a free mail provider) which takes care of further
1638delivery.")
7e3b537c 1639 (license license:gpl3+)))
d6e941bc 1640
66cc3ab2
TUBK
1641(define-public exim
1642 (package
1643 (name "exim")
125aacaa 1644 (version "4.94")
66cc3ab2
TUBK
1645 (source
1646 (origin
1647 (method url-fetch)
c9b99e88
TGR
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))))
66cc3ab2 1657 (sha256
125aacaa 1658 (base32 "1nsb2i5mqxfz1sl1bmbxmpb2qiaf3wffhfiw4j9vfpagy3xfhzpp"))))
66cc3ab2
TUBK
1659 (build-system gnu-build-system)
1660 (inputs
15871b52 1661 `(("bdb" ,bdb-5.3) ; ‘#error Version 6 and later BDB API is not supported’
cda8250b 1662 ("gnutls" ,gnutls/dane)
66cc3ab2
TUBK
1663 ("gzip" ,gzip)
1664 ("bzip2" ,bzip2)
1665 ("xz" ,xz)
66cc3ab2 1666 ("perl" ,perl)
c315d370 1667 ("libnsl" ,libnsl)
66cc3ab2
TUBK
1668 ("libxt" ,libxt)
1669 ("libxaw" ,libxaw)))
1670 (native-inputs
42773138 1671 `(("pcre" ,pcre "bin")
cda8250b
TGR
1672 ("perl" ,perl)
1673 ("pkg-config" ,pkg-config)))
66cc3ab2
TUBK
1674 (arguments
1675 '(#:phases
dc1d3cde
KK
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)
15871b52 1698 (string-append var "\n")) ; XXX no root in build environment
dc1d3cde
KK
1699 (("(COMPRESS_COMMAND=).*" all var)
1700 (string-append var gzip "/bin/gzip\n"))
1701 (("(ZCAT_COMMAND=).*" all var)
cda8250b
TGR
1702 (string-append var gzip "/bin/zcat\n"))
1703 (("# (USE_GNUTLS(|_PC)=.*)" all line)
793713dc 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))
cda8250b
TGR
1711 ;; This file has hard-coded relative file names for tools despite
1712 ;; the zcat configuration above.
dc1d3cde
KK
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"))))
bb335e84
TGR
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")))))
cda8250b
TGR
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’.
66cc3ab2 1741 #:tests? #f))
85a9ffcb 1742 (home-page "https://www.exim.org/")
66cc3ab2
TUBK
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
1747Cambridge for use on Unix systems connected to the Internet. In style it is
1748similar to Smail 3, but its facilities are more general. There is a great
1749deal of flexibility in the way mail can be routed, and there are extensive
1750facilities for checking incoming mail.")
7e3b537c 1751 (license license:gpl2+)))
66cc3ab2 1752
7d2b784b
MW
1753(define-public dovecot
1754 (package
1755 (name "dovecot")
3fc0f877 1756 ;; Also update dovecot-pigeonhole when updating to a new minor version.
1c8a3283 1757 (version "2.3.14")
7d2b784b
MW
1758 (source
1759 (origin
1760 (method url-fetch)
c8608faf 1761 (uri (string-append "https://www.dovecot.org/releases/"
7d2b784b 1762 (version-major+minor version) "/"
2fa1a3a8 1763 "dovecot-" version ".tar.gz"))
c03b355f 1764 (sha256
1c8a3283 1765 (base32 "0jm3p52z619v7ajh533g2g7d790k82fk0w7ry0zqlm8ymzrxgcy8"))))
7d2b784b
MW
1766 (build-system gnu-build-system)
1767 (native-inputs
1768 `(("pkg-config" ,pkg-config)))
1769 (inputs
2bc3ec3b 1770 `(("bzip2" ,bzip2)
9e2a49db
AA
1771 ("clucene" ,clucene)
1772 ("icu4c" ,icu4c)
8826b792 1773 ("libsodium" ,libsodium) ; extra password algorithms
c6872990 1774 ("libstemmer" ,libstemmer)
84ce7c5a
PL
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 '())
2bc3ec3b
TGR
1780 ("linux-pam" ,linux-pam)
1781 ("lz4" ,lz4)
1782 ("openssl" ,openssl)
fd5c70f8 1783 ("sqlite" ,sqlite)
cc16c576
TGR
1784 ("zlib" ,zlib)
1785 ("zstd" ,zstd "lib")))
7d2b784b
MW
1786 (arguments
1787 `(#:configure-flags '("--sysconfdir=/etc"
d6894b95 1788 "--localstatedir=/var"
9e2a49db 1789 "--with-sqlite" ; not auto-detected
c6872990 1790 "--with-lucene") ; not auto-detected
f762e49f
TGR
1791 #:phases
1792 (modify-phases %standard-phases
f762e49f
TGR
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")))
37fc44ea
TGR
1805 #t))
1806 (replace 'install
54151d1a 1807 (lambda* (#:key make-flags #:allow-other-keys)
37fc44ea
TGR
1808 ;; Simple hack to avoid installing a trivial README in /etc.
1809 (apply invoke "make" "install" "sysconfdir=/tmp/bogus"
1810 make-flags))))))
c8608faf 1811 (home-page "https://www.dovecot.org")
7d2b784b
MW
1812 (synopsis "Secure POP3/IMAP server")
1813 (description
1814 "Dovecot is a mail server whose major goals are security and reliability.
1815It 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.
7e3b537c
TGR
1819 (license (list license:lgpl2.1 license:expat
1820 (license:non-copyleft "file://COPYING")))))
7d2b784b 1821
3fc0f877
AA
1822(define-public dovecot-pigeonhole
1823 (let ((dovecot-version (version-major+minor (package-version dovecot))))
1824 (package
1825 (name "dovecot-pigeonhole")
95e7542e 1826 (version "0.5.13")
3fc0f877
AA
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
95e7542e 1834 (base32 "05xz2d82ck6lmv94nbc3qff09j8b60a5640i3fmqwqsvv9kfa7wi"))
3fc0f877
AA
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
1882ManageSieve protocol (RFC 5804) to the Dovecot e-mail server.
1883
1884@dfn{Sieve} is a language for filtering incoming mail. Messages can be
1885forwarded or sorted into separate folders. Unwanted messages can be rejected
1886or discarded, and, when the user is not available, the Sieve interpreter can
1887send an automated reply.
1888
1889Sieve is meant to be simple, extensible, and system-independent. The
1890intention is to make it impossible to write anything more complex (and
1891dangerous) than simple mail filters. Unlike most other mail filtering script
1892languages, Sieve does not allow users to execute arbitrary programmes.
1893
1894Through the @dfn{ManageSieve} protocol, users can remotely manage their Sieve
1895scripts without needing file system access. The server accepts only valid
1896scripts to prevent embarrassing errors later on.")
1897 (license license:lgpl2.1))))
1898
944a5cdd 1899(define-public dovecot-trees
cf47a8a5 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
0e66f4a1
TGR
1911 "0rkk10b1bsjz979sc864vpgcdchy7yxwmyv4ik50lar1h6awdnrf"))
1912 (patches
1913 (search-patches "dovecot-trees-support-dovecot-2.3.patch"))))
cf47a8a5 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")
7b0efd4c 1927 "/lib/dovecot"))))
cf47a8a5 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
944a5cdd 1932Dovecot encryption plugin. This plugin adds individually encrypted mail
1933storage to the Dovecot IMAP server. It is inspired by Posteo's scrambler
7230f6d5 1934which uses OpenSSL and RSA key pairs. TREES works in a similar way, but uses
944a5cdd 1935the Sodium crypto library (based on NaCL).
1936
1937How 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,
b3a47662 1944using libsodium sealed boxes.
944a5cdd 1945@item New mail is encrypted as it arrives using the Curve25519 public key.
1946@end enumerate\n")
7e3b537c 1947 (license license:agpl3)))
944a5cdd 1948
a4651f64 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")
1f53fdae 1978 "/lib/dovecot"))))
a4651f64 1979 (home-page "https://github.com/LuckyFellow/dovecot-libsodium-plugin")
1980 (synopsis "Libsodium password hashing schemes plugin for Dovecot")
1981 (description
8826b792
TGR
1982 "@code{dovecot-libsodium-plugin} provides a libsodium password
1983hashing scheme (such as scrypt) plug-in for @code{Dovecot}.")
7e3b537c 1984 (license license:gpl3+))))
a4651f64 1985
81ce19f4
1986(define-public isync
1987 (package
1988 (name "isync")
ba9e29f1 1989 (version "1.4.1")
81ce19f4
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
ba9e29f1 1996 "0l01880fcyqn6xq9n8236ha5n2a3wl5g8rmv22z8nv5hgfsxndhd"))))
81ce19f4 1997 (build-system gnu-build-system)
49490231
LF
1998 (native-inputs
1999 `(("perl" ,perl)))
81ce19f4
2000 (inputs
2001 `(("bdb" ,bdb)
a052d5ab 2002 ("cyrus-sasl" ,cyrus-sasl)
e1d3b07f 2003 ("openssl" ,openssl)
a66fb3a1 2004 ("zlib" ,zlib)))
0eea5596 2005 (home-page "https://isync.sourceforge.io/")
81ce19f4
2006 (synopsis "Mailbox synchronization program")
2007 (description
f6cd8586 2008 "isync/mbsync is a command-line tool for two-way synchronization of
81ce19f4 2009mailboxes. Currently Maildir and IMAP are supported types.")
7e3b537c 2010 (license license:gpl2+)))
81ce19f4 2011
26b8de19
EB
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)
a2190ccc 2027 ("perl-module-pluggable" ,perl-module-pluggable)
26b8de19 2028 ("perl-mro-compat" ,perl-mro-compat)))
9aba9b12 2029 (home-page "https://metacpan.org/release/Email-Abstract")
26b8de19
EB
2030 (synopsis "Interface to mail representations")
2031 (description "Email::Abstract provides module writers with the ability to
2032write simple, representation-independent mail handling code.")
7e3b537c 2033 (license license:perl-license)))
26b8de19 2034
ebda902f
EB
2035(define-public perl-email-address
2036 (package
2037 (name "perl-email-address")
b6c7df92 2038 (version "1.912")
ebda902f
EB
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
b6c7df92 2045 (base32 "1vzr0vx4zsw4zbc9xdffc31wnkc1raqmyfiyws06fbyck197i8qg"))))
ebda902f 2046 (build-system perl-build-system)
9aba9b12 2047 (home-page "https://metacpan.org/release/Email-Address")
ebda902f
EB
2048 (synopsis "Email address parsing and creation")
2049 (description "Email::Address implements a regex-based RFC 2822 parser that
2050locates email addresses in strings and returns a list of Email::Address
2051objects found. Alternatively you may construct objects manually.")
7e3b537c 2052 (license license:perl-license)))
ebda902f 2053
944d3b4b
SB
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
2071addresses and groups. Unlike Email::Address, this module does not use regular
2072expressions for parsing but instead is implemented in XS and uses shared code
2073from Dovecot IMAP server.")
7e3b537c 2074 (license license:perl-license)))
944d3b4b 2075
aa86a3be
EB
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)
9aba9b12 2089 (home-page "https://metacpan.org/release/Email-Date-Format")
aa86a3be
EB
2090 (synopsis "Produce RFC 2822 date strings")
2091 (description "Email::Date::Format provides a means for generating an RFC
20922822 compliant datetime string.")
7e3b537c 2093 (license license:perl-license)))
aa86a3be 2094
08bf7095
EB
2095(define-public perl-email-messageid
2096 (package
2097 (name "perl-email-messageid")
1fb37ef0 2098 (version "1.406")
08bf7095
EB
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
1fb37ef0 2106 "1f22sdnfq169qw1l0lg7y74pmiam7j9v95bggjnf3q4mygdmshpc"))))
08bf7095 2107 (build-system perl-build-system)
9aba9b12 2108 (home-page "https://metacpan.org/release/Email-MessageID")
08bf7095
EB
2109 (synopsis "Generate world unique message-ids")
2110 (description "Email::MessageID generates recommended message-ids to
2111identify a message uniquely.")
7e3b537c 2112 (license license:perl-license)))
08bf7095 2113
0a4c49f6
EB
2114(define-public perl-email-mime
2115 (package
2116 (name "perl-email-mime")
4f50fd75 2117 (version "1.946")
0a4c49f6
EB
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
4f50fd75 2125 "0z1k3i0lzp2k421gc8f3wq0jbqflkbw2xqd2k7n7pmv56417kvk8"))))
0a4c49f6
EB
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)
4f50fd75
TGR
2133 ("perl-mime-types" ,perl-mime-types)
2134 ("perl-module-runtime" ,perl-module-runtime)))
9aba9b12 2135 (home-page "https://metacpan.org/release/Email-MIME")
0a4c49f6
EB
2136 (synopsis "MIME message handling")
2137 (description "Email::MIME is an extension of the Email::Simple module, to
2138handle MIME encoded messages. It takes a message as a string, splits it up
2139into its constituent parts, and allows you access to various parts of the
2140message. Headers are decoded from MIME encoding.")
7e3b537c 2141 (license license:perl-license)))
0a4c49f6 2142
55025bb5
EB
2143(define-public perl-email-mime-contenttype
2144 (package
2145 (name "perl-email-mime-contenttype")
9b5fc20c 2146 (version "1.022")
55025bb5
EB
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
9b5fc20c 2154 "042kxhs3bp1ab9z0mbr1wy21ld4lxd6v2a2mmrashqnsn2075fws"))))
55025bb5
EB
2155 (build-system perl-build-system)
2156 (native-inputs
2157 `(("perl-capture-tiny" ,perl-capture-tiny)))
9aba9b12 2158 (home-page "https://metacpan.org/release/Email-MIME-ContentType")
55025bb5
EB
2159 (synopsis "Parse MIME Content-Type headers")
2160 (description "Email::MIME::ContentType parses a MIME Content-Type
2161header.")
7e3b537c 2162 (license license:perl-license)))
55025bb5 2163
02e29936
EB
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)))
9aba9b12 2179 (home-page "https://metacpan.org/release/Email-MIME-Encodings")
02e29936
EB
2180 (synopsis "Unified interface to MIME encoding and decoding")
2181 (description "This module wraps MIME::Base64 and MIME::QuotedPrint.")
7e3b537c 2182 (license license:perl-license)))
02e29936 2183
a24c5420
EB
2184(define-public perl-email-sender
2185 (package
2186 (name "perl-email-sender")
532db12e 2187 (version "1.300035")
a24c5420
EB
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
532db12e 2194 (base32 "0yfssp3rqdx1dmgvnygarzgkpkhqm28r5sd0gh87ksk8yxndhjql"))))
a24c5420
EB
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)))
9aba9b12 2209 (home-page "https://metacpan.org/release/Email-Sender")
a24c5420
EB
2210 (synopsis "Perl library for sending email")
2211 (description "Email::Sender replaces the old and sometimes problematic
2212Email::Send library.")
7e3b537c 2213 (license license:perl-license)))
a24c5420 2214
151ef3ed
EB
2215(define-public perl-email-simple
2216 (package
2217 (name "perl-email-simple")
3a2f1d93 2218 (version "2.216")
151ef3ed
EB
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
3a2f1d93 2226 "1m4brbjvalyp5kjqslqv4155dzwg977shxin208i7lc8236n6pyq"))))
151ef3ed
EB
2227 (build-system perl-build-system)
2228 (propagated-inputs
2229 `(("perl-email-date-format" ,perl-email-date-format)))
9aba9b12 2230 (home-page "https://metacpan.org/release/Email-Simple")
151ef3ed
EB
2231 (synopsis "Parsing of RFC 2822 messages")
2232 (description "Email::Simple provides simple parsing of RFC 2822 message
2233format and headers.")
7e3b537c 2234 (license license:perl-license)))
151ef3ed 2235
f5dceecb
AW
2236(define-public libesmtp
2237 (package
2238 (name "libesmtp")
2239 (version "1.0.6")
2240 (source
2241 (origin
2242 (method url-fetch)
049e02ea
LF
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")))
f5dceecb
AW
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
2260submission of) electronic mail via a preconfigured Mail Transport Agent (MTA).
2261It may be used as part of a Mail User Agent (MUA) or other program that must
2262be able to post electronic mail where mail functionality may not be that
2263program's primary purpose.")
7e3b537c 2264 (license (list license:lgpl2.1+ license:gpl2+))))
f5dceecb 2265
f8ae32a2
AW
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
b0e7b699 2274 (url "https://github.com/andywingo/esmtp")
f8ae32a2
AW
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
73c0e477
EF
2282 (replace 'bootstrap
2283 (lambda _ (invoke "autoreconf" "-vfi"))))))
f8ae32a2
AW
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
718c5dd6 2292 `(("libesmtp" ,libesmtp)))
3b3b60d0 2293 (home-page "https://sourceforge.net/projects/esmtp/")
f8ae32a2
AW
2294 (synopsis "Relay-only mail transfer agent (MTA)")
2295 (description "Esmtp is a simple relay-only mail transfer agent built using
2296libESMTP. It sends e-mail via a remote SMTP server using credentials from the
2297user's @file{$HOME/.esmtprc} configuration file; see the @command{esmtprc} man
2298page for more on configuration. This package also provides minimal
2299compatibility shims for the @command{sendmail}, @command{mailq}, and
2300@command{newaliases} commands.")
7e3b537c 2301 (license license:gpl2+)))
f8ae32a2 2302
34dd26af
CAW
2303(define-public fdm
2304 (package
2305 (name "fdm")
9a0681d1 2306 (version "2.0")
34dd26af
CAW
2307 (source (origin
2308 (method url-fetch)
2309 (uri (string-append "https://github.com/nicm/fdm/releases/download/"
9a0681d1 2310 version "/fdm-" version ".tar.gz"))
34dd26af 2311 (sha256
9a0681d1 2312 (base32 "196fs1z8y7p12wmqn1bylzz94szl58yv2aby3p30nmwjnyv8rch6"))))
34dd26af
CAW
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
2321or IMAP servers, or receive local mail from stdin, and
2322deliver 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.
7e3b537c
TGR
2327 (license:non-copyleft
2328 "https://github.com/nicm/fdm/blob/master/command.c"))))
34dd26af 2329
e90819c4
LG
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.
1d982d78 2348 (patches (search-patches "procmail-ambiguous-getline-debian.patch"
c297e965
LF
2349 "procmail-CVE-2014-3618.patch"
2350 "procmail-CVE-2017-16844.patch"))))
e90819c4
LG
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
8f65585b 2365 ;; file system are performed during 'make install'. However, these
e90819c4
LG
2366 ;; are performed before the actual build process.
2367 (build-system gnu-build-system)
05aa576b 2368 (inputs `(("exim" ,exim)))
e90819c4
LG
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
2372for a variety of mailbox formats such as mbox, mh and maildir. Incoming mail
2373can be sorted into separate files/directories and arbitrary commands can be
2374executed on mail arrival. Procmail is considered stable, but is no longer
2375maintained.")
7e3b537c
TGR
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.
e90819c4 2380
61c30e9d
LF
2381(define-public khard
2382 (package
2383 (name "khard")
9a95985f 2384 (version "0.17.0")
61c30e9d
LF
2385 (source (origin
2386 (method url-fetch)
2387 (uri (pypi-uri name version))
2388 (sha256
2389 (base32
9a95985f 2390 "062nv4xkfsjc11k9m52dh6xjn9z68a4a6x1s8z05wwv4jbp1lkhn"))))
61c30e9d
LF
2391 (build-system python-build-system)
2392 (arguments
2385012b
EF
2393 `(#:phases
2394 (modify-phases %standard-phases
70333ee6 2395 (add-after 'install 'install-completions
2385012b
EF
2396 (lambda* (#:key outputs #:allow-other-keys)
2397 (let* ((out (assoc-ref outputs "out"))
70333ee6
EF
2398 (zsh (string-append out "/share/zsh/site-functions")))
2399 (copy-recursively "misc/zsh" zsh)
2385012b 2400 #t))))))
82680f80
TLC
2401 (native-inputs
2402 `(("python-setuptools-scm" ,python-setuptools-scm)))
d312bbfa 2403 (inputs
224b1c83
EF
2404 `(("python-atomicwrites" ,python-atomicwrites)
2405 ("python-configobj" ,python-configobj)
224b1c83
EF
2406 ("python-ruamel.yaml" ,python-ruamel.yaml)
2407 ("python-unidecode" ,python-unidecode)
2408 ("python-vobject" ,python-vobject)))
61c30e9d
LF
2409 (synopsis "Console address book using CardDAV")
2410 (description "Khard is an address book for the console. It creates, reads,
2411modifies and removes CardDAV address book entries at your local machine. For
2412synchronizing with a remote address book, @command{vdirsyncer} is recommended.
2413Khard can also be used from within the email client @command{mutt}.")
2414 (home-page "https://github.com/scheibler/khard")
7e3b537c 2415 (license license:gpl3+)))
be0c5733
DM
2416
2417(define-public perl-mail-spf
27f172a9
TGR
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"
be0c5733
DM
2426 version
2427 ".tar.gz"))
27f172a9
TGR
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'")))
be0c5733 2444 #t)))))
27f172a9
TGR
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
be0c5733 2453in Perl.")
7e3b537c 2454 (license license:bsd-3)))
24262239 2455
f115d817
JL
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
2474that indicates the message authentication status as per RFC7601. This module
2475is not fully compliant with the RFC but it tries to implement most styles of
2476Authentication-Results header seen in the wild.")
7e3b537c 2477 (license license:perl-license)))
f115d817 2478
930c52ae
JL
2479(define-public perl-mail-dkim
2480 (package
2481 (name "perl-mail-dkim")
3b27ffec 2482 (version "0.58")
930c52ae
JL
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
3b27ffec 2491 "0cgkal65qqcy57b21lgij90ba36wl66byw9i76g5yhwaa8ms8hqa"))))
930c52ae
JL
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
2505Keys Identified Mail (DKIM) standard, and the older Yahoo! DomainKeys standard,
2506both of which sign and verify emails using digital signatures and DNS records.
2507Mail-DKIM can be used by any Perl program that wants to provide support for
2508DKIM and/or DomainKeys.")
7e3b537c 2509 (license license:gpl3+)))
930c52ae 2510
8582202c
JL
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
66e39000
TGR
2522 "1gc5c7lg2qrlck7b0lvjfqr824ch6jkrzkpsn0gjvlzg7hfmld75"))
2523 (patches
2524 (search-patches "dkimproxy-add-ipv6-support.patch"))))
8582202c
JL
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)
8c07824c
TGR
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"))
28e4c3bb
TGR
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"))
8c07824c 2560 #t))))))
8582202c
JL
2561 (inputs
2562 `(("perl" ,perl)
2563 ("perl-crypt-openssl-rsa" ,perl-crypt-openssl-rsa)
66e39000 2564 ("perl-io-socket-inet6" ,perl-io-socket-inet6)
8582202c
JL
2565 ("perl-mailtools" ,perl-mailtools)
2566 ("perl-mail-authenticationresults" ,perl-mail-authenticationresults)
2567 ("perl-mail-dkim" ,perl-mail-dkim)
28e4c3bb 2568 ("perl-mime-tools" ,perl-mime-tools)
8582202c 2569 ("perl-net-dns" ,perl-net-dns)
66e39000 2570 ("perl-net-server" ,perl-net-server)
28e4c3bb
TGR
2571 ("perl-socket6" ,perl-socket6)
2572 ("perl-timedate" ,perl-timedate)))
8582202c 2573 (home-page "http://dkimproxy.sourceforge.net/")
d045dce1
TGR
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
8582202c 2578proxy for signing outgoing email, and an inbound proxy for verifying signatures
d045dce1
TGR
2579of incoming messages.
2580
2581It was designed for Postfix, but can be used to add DKIM support to nearly any
2582existing mail server. With Postfix, the proxies can operate as either
8582202c 2583@code{Before-Queue} or @code{After-Queue} content filters.")
7e3b537c 2584 (license license:gpl2+)))
8582202c 2585
24262239
CL
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")
e3cfef22 2614 (invoke (string-append gzip "/bin/gzip") "-d" "mb2md.gz")
24262239
CL
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))))
c695fb76 2621 (native-inputs `(("gzip" ,gzip)))
24262239
CL
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
2628converts them to maildir format directories.")
7e3b537c 2629 (license license:public-domain)))
e0d7b421 2630
df661fb9
W
2631(define-public mblaze
2632 (package
2633 (name "mblaze")
976d072a 2634 (version "1.1")
df661fb9
W
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
976d072a 2643 (base32 "1bir977vnqs76g8jgv1yivqw0wk2kn56l3l5r4w2ipix3fir138y"))))
df661fb9
W
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
2659interacting with mail messages which are stored in maildir folders.
2660
2661Its design is roughly inspired by MH, the RAND Message Handling System, but it
2662is a complete implementation from scratch.
2663
2664mblaze is a classic command line MUA and has no features for receiving or
2665transferring messages; you can operate on messages in a local maildir spool,
2666or fetch your messages using fdm(1), getmail(1), offlineimap(1), or similar
2667utilities, and send it using dma(8), msmtp(1), sendmail(8), as provided by
2668OpenSMTPD, Postfix, or similar.
2669
2670mblaze operates directly on maildir folders and doesn't use its own caches or
2671databases. There is no setup needed for many uses. All utilities have been
2672written with performance in mind. Enumeration of all messages in a maildir is
2673avoided unless necessary, and then optimized to limit syscalls. Parsing
2674message metadata is optimized to limit I/O requests. Initial operations on a
2675large maildir may feel slow, but as soon as they are in the file system cache,
2676everything is blazingly fast. The utilities are written to be memory
2677efficient (i.e. not wasteful), but whole messages are assumed to fit into RAM
2678easily (one at a time).")
2679 (license (list license:public-domain
2680 license:expat)))) ; mystrverscmp.c and mymemmem
2681
e0d7b421
AI
2682(define-public mpop
2683 (package
2684 (name "mpop")
b7e8863d 2685 (version "1.4.12")
e0d7b421
AI
2686 (source
2687 (origin
2688 (method url-fetch)
1497b95c 2689 (uri (string-append "https://marlam.de/mpop/releases/"
822c8501 2690 "mpop-" version ".tar.xz"))
e0d7b421 2691 (sha256
b7e8863d 2692 (base32 "02j8qfd44dfyq1sq7r9znj9y6wam39ncch1sc8chcdlw5nsmaqsz"))))
e0d7b421
AI
2693 (build-system gnu-build-system)
2694 (inputs
fb5ecdec 2695 `(("gnutls" ,gnutls)))
e0d7b421
AI
2696 (native-inputs
2697 `(("pkg-config" ,pkg-config)))
1497b95c 2698 (home-page "https://marlam.de/mpop/")
e0d7b421
AI
2699 (synopsis "POP3 mail client")
2700 (description "mpop is a small and fast POP3 client suitable as a
2701fetchmail replacement.
2702
2703mpop supports multiple accounts, header based mail filtering, delivery
40b1cee6
TGR
2704to mbox files, maildir folders or an @acronym{MDA, Mail Delivery Agent},
2705TLS/SSL, several authentication methods, @acronym{IDN, Internationalized Domain
2706Names} and SOCKS proxies.")
7e3b537c 2707 (license license:gpl3+)))
74c0282c 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
2726provides HTML mail archiving with index, mail thread linking,
2727etc; plus other capabilities including support for MIME and
2728powerful user customization features.")
7e3b537c 2729 (license license:gpl2+)))
5d87088c 2730
5d87088c
JD
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"))
19527952 2756 (("/bin/sh") (which "sh")))
5d87088c
JD
2757
2758 (substitute* "devtools/bin/Build"
19527952 2759 (("SHELL=/bin/sh") (string-append "SHELL=" (which "sh"))))
5d87088c
JD
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 "
2772define(`confCC', `gcc')
2773define(`confOPTIMIZE', `-g -O2')
2774define(`confLIBS', `-lresolv')
2775define(`confINSTALL', `~a/devtools/bin/install.sh')
2776define(`confDEPEND_TYPE', `CC-M')
2777define(`confINST_DEP', `')
55492129
TGR
2778" (getcwd))))
2779 #t))
5d87088c
JD
2780 (replace 'build
2781 (lambda _
55492129
TGR
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))
5d87088c
JD
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"
55492129
TGR
2795 (invoke "sh" "Build" "install-cf"))
2796 #t))))
5d87088c
JD
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
2808Allman. It is highly configurable and supports many delivery methods and many
2809transfer protocols.")
7e3b537c
TGR
2810 (license (license:non-copyleft "file://LICENSE"
2811 "See LICENSE in the distribution."))))
5d87088c 2812
8cced06f
TGR
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
2862Sieve scripts on any mail server that speaks the @dfn{ManageSieve} protocol,
7230f6d5 2863as specified in RFC 5804.
8cced06f
TGR
2864
2865@dfn{Sieve} (RFC 5228) is a specialised language for e-mail filtering. Sieve
2866scripts are stored on the server and run whenever mail arrives. They can
2867automatically sort new messages into folders, silently reject them, send an
2868automated response, and more.
2869
2870@command{sieve-connect} is designed to be both a tool which can be invoked
2871from scripts as well as a decent interactive client. It supports TLS for
2872connection privacy, as well as authentication with SASL or GSSAPI client
2873certificates. It should be a drop-in replacement for @command{sieveshell}
2874from the Cyrus IMAP project.")
2875 (license license:bsd-3)))
2876
8b53366c 2877(define-public opensmtpd
2878 (package
2879 (name "opensmtpd")
c9120aa1 2880 (version "6.8.0p2")
4eb57ca8
TGR
2881 (source
2882 (origin
2883 (method url-fetch)
2884 (uri (string-append "https://www.opensmtpd.org/archives/"
2885 "opensmtpd-" version ".tar.gz"))
2886 (sha256
c9120aa1 2887 (base32 "05sd7bmq29ibnqbl2z53hiyprfxzf0qydfdaixs68rz55wqhbgsi"))))
4eb57ca8
TGR
2888 (build-system gnu-build-system)
2889 (inputs
2890 `(("bdb" ,bdb)
2891 ("libasr" ,libasr)
2892 ("libevent" ,libevent)
ba6b48b8 2893 ("libressl" ,libressl) ; recommended, and supports e.g. ECDSA
4eb57ca8
TGR
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
838c4b10
MC
2911 ;; See: https://github.com/OpenSMTPD/OpenSMTPD/issues/1069.
2912 (add-after 'unpack 'fix-smtpctl-encrypt-bug
2913 (lambda _
f6e06e8b 2914 (substitute* "usr.sbin/smtpd/smtpctl.c"
838c4b10
MC
2915 (("\"encrypt\", \"--\",")
2916 "\"encrypt\","))
2917 #t))
4eb57ca8
TGR
2918 ;; Fix some incorrectly hard-coded external tool file names.
2919 (add-after 'unpack 'patch-FHS-file-names
2920 (lambda _
f6e06e8b 2921 (substitute* "usr.sbin/smtpd/smtpctl.c"
4eb57ca8
TGR
2922 ;; ‘gzcat’ is auto-detected at compile time, but ‘cat’ isn't.
2923 (("/bin/cat") (which "cat")))
f6e06e8b 2924 (substitute* "usr.sbin/smtpd/mda_unpriv.c"
4eb57ca8
TGR
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
2944Transfer Protocol}, with some additional standard extensions. It allows
2945ordinary machines to exchange e-mails with other systems speaking the SMTP
2946protocol, or to deliver them to local users.
2947
2948In order to simplify the use of SMTP, OpenSMTPD implements a smaller set of
2949functionality than those available in other SMTP daemons. The objective is to
2950provide enough features to satisfy typical usage at the risk of unsuitability
2951to esoteric or niche requirements.")
2952 (home-page "https://www.opensmtpd.org")
7e3b537c
TGR
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))))
4eb57ca8 2956
152ffe7c 2957(define-public opensmtpd-extras
2958 (package
2959 (name "opensmtpd-extras")
4fdf4b6c 2960 (version "6.7.1")
152ffe7c 2961 (source (origin
2962 (method url-fetch)
2963 (uri (string-append "https://www.opensmtpd.org/archives/"
6422615f 2964 "opensmtpd-extras-" version ".tar.gz"))
152ffe7c 2965 (sha256
2966 (base32
4fdf4b6c 2967 "1b1mx71bvmv92lbm08wr2p60g3qhikvv3n15zsr6dcwbk9aqahzq"))))
152ffe7c 2968 (build-system gnu-build-system)
4fdf4b6c
TGR
2969 (native-inputs
2970 `(("pkg-config" ,pkg-config)))
152ffe7c 2971 (inputs
2972 `(("libressl" ,libressl)
2973 ("libevent" ,libevent)
4fdf4b6c 2974 ("mysql" ,mysql)
152ffe7c 2975 ("opensmtpd" ,opensmtpd)
152ffe7c 2976 ("postgresql" ,postgresql)
4fdf4b6c
TGR
2977 ("python" ,python-2)
2978 ("sqlite" ,sqlite)))
152ffe7c 2979 (arguments
4fdf4b6c
TGR
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")
152ffe7c 3010 (synopsis "Extra tables, filters, and various other addons for OpenSMTPD")
3011 (description
3012 "This package provides extra tables, filters, and various other addons
3013for OpenSMTPD to extend its functionality.")
7e3b537c
TGR
3014 (license (list license:bsd-2 license:bsd-3 ; openbsd-compat
3015 license:isc)))) ; everything else
6d3dda4f 3016
62035656
TGR
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
3071writing 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
3133messages with @acronym{DKIM, DomainKeys Identified Mail} (RFC 4871).")
3134 (license license:expat)))
3135
b0c8358f
EF
3136(define-public mailman
3137 (package
3138 (name "mailman")
c26a016e 3139 (version "3.3.2")
b0c8358f
EF
3140 (source
3141 (origin
3142 (method url-fetch)
3143 (uri (pypi-uri "mailman" version))
3144 (sha256
c26a016e 3145 (base32 "0a5ckbf8hc3y28b7p5psp0d4bxk601jlr5pd3hhh545xd8d9f0dg"))))
b0c8358f
EF
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
3176lists. Both users and administrators generally perform their actions in a
3177web interface, although email and command-line interfaces are also provided.
3178The system features built-in archiving, automatic bounce processing, content
3179filtering, digest delivery, and more.")
3180 (license license:gpl3+)))
3181
6d3dda4f 3182(define-public python-mailmanclient
3183 (package
3184 (name "python-mailmanclient")
f1742465 3185 (version "3.3.1")
6d3dda4f 3186 (source
3187 (origin
3188 (method url-fetch)
3189 (uri (pypi-uri "mailmanclient" version))
3190 (sha256
3191 (base32
f1742465 3192 "0pjgzpvhdb6ql8asb20xr8d01m646zpghmcp9fmscks0n1k4di4g"))))
6d3dda4f 3193 (build-system python-build-system)
3194 (arguments
3195 `(#:tests? #f)) ; Requires mailman running
f22efa01 3196 (propagated-inputs
f1742465
EF
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/")
6d3dda4f 3204 (synopsis "Python bindings for the Mailman 3 REST API")
3205 (description
3206 "The mailmanclient library provides official Python bindings for
3207the GNU Mailman 3 REST API.")
f1742465 3208 (properties `((python2-variant . ,(delay python2-mailmanclient))))
7e3b537c 3209 (license license:lgpl3+)))
6d3dda4f 3210
f1742465 3211;; This is the last version which supports Python-2.
6d3dda4f 3212(define-public python2-mailmanclient
f1742465
EF
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))))))
3163a289 3228
3229(define-public mlmmj
3230 (package
3231 (name "mlmmj")
28b48c87 3232 (version "1.3.0")
3163a289 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
28b48c87 3240 "0hpj10qad821ci11si8xc2qnmkzfn90y13s43fm4fca38f0qjp8w"))))
3163a289 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.
3272It works with many different Mail Transport Agents (MTAs) and is simple for a
d1e4ad1b 3273system administrator to install, configure and integrate with other software.
3163a289 3274As it uses very few resources, and requires no daemons, it is ideal for
3275installation 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)))
3a263368 3287
ba7816a2
EF
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
8a3741e6 3321interacting with Mailman.")
7e3b537c 3322 (license license:gpl3+)))
8a3741e6 3323
a3bdebef
EF
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
3359software provided that there is a plugin (loadable by Mailman3) designed to
3360communicate with it properly. This module contains a Mailman3 archiver plugin
3361which sends emails to HyperKitty, the official Mailman3 web archiver.")
3362 (license license:gpl3+)))
3363
6fe7d216
EF
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 _
6fe7d216
EF
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)
ac3103e8 3386 ("python-django" ,python-django-2.2)
6fe7d216
EF
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
3409Mailman3 archives, and manage it. This interface uses django, and requires
3410some configuration.")
3411 (license license:gpl3))) ; Some files are gpl2+
3412
d99a2add 3413(define-public postorius
3414 (package
3415 (name "postorius")
faec049c 3416 (version "1.3.3")
d99a2add 3417 (source
3418 (origin
3419 (method url-fetch)
faec049c 3420 (uri (pypi-uri "postorius" version))
d99a2add 3421 (sha256
3422 (base32
faec049c 3423 "08jn23gblbkfl09qlykbpsmp39mmach3sl69h1j5cd5kkx839rwa"))))
d99a2add 3424 (build-system python-build-system)
3425 (arguments
faec049c
EF
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.
d99a2add 3436 (inputs
faec049c
EF
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)))
d99a2add 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
3450to access GNU Mailman.")
7e3b537c 3451 (license (list license:gpl3+ license:lgpl3+))))
d99a2add 3452
3a263368 3453(define-public blists
3454 (package
3455 (name "blists")
18b1589b 3456 (version "2.0")
3a263368 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
18b1589b 3464 "1xll5wn7py3bbncbwrj172f56nz75c9gwfsa80rwd96ss9gfmp3c"))))
3a263368 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
3482indexed mbox files. There are two programs: @code{bindex} and @code{bit}.
3483@code{bindex} generates or updates the index file (incremental updates
3484are supported). @code{bit} is a CGI/SSI program that generates web pages
3485on the fly. Both programs are written in C and are very fast.")
3486 (license license:expat)))
ed428a58
AI
3487
3488(define-public swaks
3489 (package
3490 (name "swaks")
f04a7ef5 3491 (version "20201014.0")
ed428a58
AI
3492 (source
3493 (origin
ad8cdc7b
TGR
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))
ed428a58 3499 (sha256
f04a7ef5 3500 (base32 "131i2b1yxhnbqkfk4kky40pfanqw2c5lcgbnjhfqp5cvpawpk2ai"))))
ed428a58
AI
3501 (build-system perl-build-system)
3502 (inputs
d6a0dbd6
TGR
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
ed428a58 3507 (arguments
d6a0dbd6 3508 `(#:tests? #f ; no tests
ed428a58
AI
3509 #:phases
3510 (modify-phases %standard-phases
ad8cdc7b
TGR
3511 (add-after 'unpack 'set-build_version
3512 (lambda _
3513 (substitute* "swaks"
3514 (("\"DEVRELEASE\"") (format #f "\"~a\"" ,version)))
3515 #true))
ed428a58
AI
3516 (delete 'configure)
3517 (replace 'build
3518 (lambda _
ad8cdc7b 3519 (invoke "pod2man" "doc/base.pod" "swaks.1")))
ed428a58
AI
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)))))
d72f59a4 3532 (home-page "https://jetmore.org/john/code/swaks/")
ed428a58
AI
3533 (synopsis "Featureful SMTP test tool")
3534 (description "Swaks is a flexible, scriptable, transaction-oriented SMTP
3535test tool. It handles SMTP features and extensions such as TLS,
3536authentication, and pipelining; multiple versions of the SMTP protocol
3537including SMTP, ESMTP, and LMTP; and multiple transport methods including
3538unix-domain sockets, internet-domain sockets, and pipes to spawned processes.
3539Options can be specified in environment variables, configuration files, and
3540the command line allowing maximum configurability and ease of use for
3541operators and scripters.")
7e3b537c 3542 (license license:gpl2+)))
b0eb2af2 3543
3544(define-public alpine
3545 (package
3546 (name "alpine")
d395f422 3547 (version "2.24")
b0eb2af2 3548 (source
3549 (origin
0ca25073 3550 (method git-fetch)
b0eb2af2 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.
32f9cc33 3554 ;; http://alpine.freeiz.com/alpine/readme/README.patches
0ca25073
TGR
3555 (uri (git-reference
3556 (url "http://repo.or.cz/alpine.git")
0acbcaa9 3557 (commit (string-append "v" version))))
0ca25073 3558 (file-name (git-file-name name version))
b0eb2af2 3559 (sha256
d395f422 3560 (base32 "0d5ybnsv29gs8krl66db56avmssq28jlg0qj5i1wka05ncc3740d"))
bc0eb347
TGR
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))))
b0eb2af2 3567 (build-system gnu-build-system)
3568 (arguments
aa784dc8 3569 `(#:make-flags
1ca44ae3 3570 (list (string-append "CC=" ,(cc-for-target)))
b0eb2af2 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")
03b6c474
TGR
3583 "/bin/aspell")
3584 "--with-date-stamp=Thu 1 Jan 01:00:01 CET 1970")
b0eb2af2 3585 #:phases
3586 (modify-phases %standard-phases
d28692a7
TGR
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))
b0eb2af2 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"))
b0eb2af2 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)))
da83224d 3610 (home-page "https://repo.or.cz/alpine.git")
b0eb2af2 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
3614tools 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")
7e3b537c 3620 (license license:asl2.0)))
7c16151a
RS
3621
3622(define-public balsa
3623 (package
3624 (name "balsa")
e8c1e27f 3625 (version "2.6.1")
7c16151a
RS
3626 (source
3627 (origin
3628 (method url-fetch)
e9201659 3629 (uri (string-append "https://pawsa.fedorapeople.org/balsa/"
8f3f2c9b 3630 "balsa-" version ".tar.bz2"))
7c16151a 3631 (sha256
e8c1e27f 3632 (base32 "1xkxx801p7sbfkn0bh3cz85wra4xf1z1zhjqqc80z1z1nln7fhb4"))))
7c16151a
RS
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)
7ff2159b 3650 ("gmime" ,gmime)
7c16151a
RS
3651 ("gnutls" ,gnutls)
3652 ("gpgme" ,gpgme)
3653 ("gtk+" ,gtk+)
f58b10cb 3654 ("gtksourceview" ,gtksourceview-3)
7c16151a
RS
3655 ("gtkspell3" ,gtkspell3)
3656 ("libcanberra" ,libcanberra)
3657 ("libesmtp" ,libesmtp)
7ff2159b 3658 ("libical" ,libical)
7c16151a 3659 ("libnotify" ,libnotify)
7ff2159b 3660 ("libsecret" ,libsecret)
7c16151a
RS
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
3673the GNOME desktop. It supports both POP3 and IMAP servers as well as the
3674mbox, maildir and mh local mailbox formats. Balsa also supports SMTP and/or
b95d5f62 3675the use of a local MTA such as Sendmail.")
7e3b537c 3676 (license license:gpl3+)))
1e52fd83
AI
3677
3678(define-public afew
3679 (package
3680 (name "afew")
30a1476b 3681 (version "3.0.1")
1e52fd83
AI
3682 (source
3683 (origin
3684 (method url-fetch)
3685 (uri (pypi-uri "afew" version))
3686 (sha256
3687 (base32
30a1476b 3688 "0wpfqbqjlfb9z0hafvdhkm7qw56cr9kfy6n8vb0q42dwlghpz1ff"))))
1e52fd83
AI
3689 (build-system python-build-system)
3690 (inputs
30a1476b
TLC
3691 `(("notmuch" ,notmuch)
3692 ("python-chardet" ,python-chardet)
3693 ("python-dkimpy" ,python-dkimpy)
1e52fd83
AI
3694 ("python-notmuch" ,python-notmuch)))
3695 (native-inputs
30a1476b
TLC
3696 `(("python-freezegun" ,python-freezegun)
3697 ("python-setuptools-scm" ,python-setuptools-scm)))
1e52fd83
AI
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
3701provides automatic tagging each time new mail is registered with notmuch. It
3702can add tags based on email headers or Maildir folders and can handle spam and
3703killed threads.")
7e3b537c 3704 (license license:isc)))
1679923a
DM
3705
3706(define-public pan
3707 (package
3708 (name "pan")
de227459 3709 (version "0.146")
1679923a
DM
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
de227459 3716 (base32 "17agd27sn4a7nahvkpg0w39kv74njgdrrygs74bbvpaj8rk2hb55"))))
1679923a
DM
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
8e020519 3731 `(("gmime" ,gmime-2.6)
1679923a
DM
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
3748and binaries. It supports offline reading, scoring and killfiles, yEnc, NZB,
3749PGP handling, multiple servers, and secure connections.")
3750 ;; License of the docs: fdl-1.1; Others: gpl2.
7e3b537c 3751 (license (list license:fdl1.1+ license:gpl2))))
ae7c1c37
JL
3752
3753(define-public imapfilter
3754 (package
3755 (name "imapfilter")
ac3af8f7 3756 (version "2.7.5")
ae7c1c37
JL
3757 (source
3758 (origin
b1d30f46
TGR
3759 (method git-fetch)
3760 (uri (git-reference
b0e7b699 3761 (url "https://github.com/lefcha/imapfilter")
b1d30f46
TGR
3762 (commit (string-append "v" version))))
3763 (file-name (git-file-name name version))
ae7c1c37 3764 (sha256
ac3af8f7 3765 (base32 "0a7f85r3axwclzw1s79zl2l8222nj2gklvvq33w9qv0dz5n71dcx"))))
ae7c1c37
JL
3766 (build-system gnu-build-system)
3767 (arguments
3768 `(#:tests? #f
3769 #:make-flags
3770 (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
15586697 3771 (string-append "CC=" ,(cc-for-target)))
ae7c1c37
JL
3772 #:phases
3773 (modify-phases %standard-phases
29a87ed1 3774 (delete 'configure)))) ; no configure script
363aa80a 3775 (inputs
ae7c1c37 3776 `(("lua" ,lua)
6b23d48f 3777 ("pcre2" ,pcre2)
ae7c1c37
JL
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
3782to remote mail servers using IMAP, sends searching queries to the server and
3783processes mailboxes based on the results. It can be used to delete, copy,
3784move, flag, etc. messages residing in mailboxes at the same or different mail
3785servers. The 4rev1 and 4 versions of IMAP are supported.")
3786 (license license:expat)))
dc8675af
EF
3787
3788(define-public urlscan
3789 (package
3790 (name "urlscan")
0ea04bad 3791 (version "0.9.5")
dc8675af
EF
3792 (source
3793 (origin
3794 (method url-fetch)
3795 (uri (pypi-uri "urlscan" version))
3796 (sha256
0ea04bad 3797 (base32 "07vcwirap0p4dkqrqblfn1q017slgd8m6qyijvbi3gxnr09pbyx2"))))
dc8675af
EF
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
0ac65c8b 3805Mutt mail reader to allow you to easily launch a Web browser for URLs
dc8675af
EF
3806contained in email messages. It parses an email message or file and scans it
3807for URLs and email addresses. It then displays the URLs and their context
3808within the message, and allows you to choose one or more URLs to send to your
0ac65c8b
TGR
3809Web browser. Alternatively, it send a list of all URLs to standard output.
3810It is a replacement for the @command{urlview} program.")
7e3b537c 3811 (license license:gpl2)))
829785c1
EB
3812
3813(define-public tnef
3814 (package
3815 (name "tnef")
fe147c97 3816 (version "1.4.18")
829785c1
EB
3817 (source
3818 (origin
3819 (method git-fetch)
3820 (uri (git-reference
b0e7b699 3821 (url "https://github.com/verdammelt/tnef")
829785c1
EB
3822 (commit version)))
3823 (sha256
fe147c97 3824 (base32 "104g48mcm00bgiyzas2vf86331w7bnw7h3bc11ib4lp7rz6zqfck"))
829785c1
EB
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}.")
7e3b537c 3836 (license license:gpl2+)))
e3a47031
RW
3837
3838(define-public mumi
d378d0c2 3839 (let ((commit "8c82c8f104ff0013e2bfb3d6b4277280f32446a6")
a6805ad0 3840 (revision "3"))
e3a47031
RW
3841 (package
3842 (name "mumi")
bc950c2f 3843 (version (git-version "0.0.1" revision commit))
e3a47031
RW
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
d378d0c2 3852 "1gkwagy7qplzq2x2zqsbrwhlilxviqb0dqhrvnnhxd7z8wvyzcsi"))))
e3a47031
RW
3853 (build-system gnu-build-system)
3854 (arguments
1214684b
LC
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
8ff573d3
LC
3862 #:configure-flags '("--localstatedir=/var")
3863
1214684b 3864 #:phases
e3a47031
RW
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"))
1214684b
LC
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")))
e3a47031
RW
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
8bc7015e 3881 `(("guile-email" ,guile-email-latest)
3fa02b2d 3882 ("guile-fibers" ,guile-fibers)
f00f52a1 3883 ("guile-gcrypt" ,guile-gcrypt)
170c6b03 3884 ("guile-json" ,guile-json-3)
f00f52a1 3885 ("guile-redis" ,guile-redis)
e3a47031 3886 ("guile-syntax-highlight" ,guile-syntax-highlight)
f00f52a1 3887 ("guile-webutils" ,guile-webutils)
decf7f6c 3888 ("guile-xapian" ,guile-xapian)
bc950c2f 3889 ("guile" ,guile-3.0)
decf7f6c 3890 ("mailutils" ,mailutils)))
e3a47031
RW
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.")
7e3b537c 3898 (license license:agpl3+))))
e1c58440
RW
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
b0e7b699 3907 (url "https://github.com/Yeraze/ytnef")
e1c58440
RW
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
3921related tools to process winmail.dat files.")
7e3b537c 3922 (license license:gpl2+)))
eff3a9b2
SB
3923
3924(define-public public-inbox
c87d737d
AI
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
eff3a9b2
SB
4004complement or replace traditional mailing lists. Readers may read via NNTP,
4005Atom feeds or HTML archives.")
c87d737d 4006 (license license:agpl3+)))
660611e5
EB
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
4036client. Sylpheed provides intuitive user-interface. Sylpheed is also
4037designed for keyboard-oriented operation.")
7e3b537c 4038 (license license:gpl2+)))
99d48f7a
EF
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")
70134af9 4060 (synopsis "Authentication-Results email header creator and parser")
99d48f7a 4061 (description
70134af9
TGR
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:
99d48f7a
EF
4064@itemize
4065@item RFC 5617 DKIM/ADSP
70134af9
TGR
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
4072and Conformance}
4073@item @acronym{ARC, Authenticated Received Chain}
4074(draft-ietf-dmarc-arc-protocol-08)
4075@end itemize\n")
99d48f7a 4076 (license license:asl2.0)))
5c4332e5
EF
4077
4078(define-public python-dkimpy
4079 (package
4080 (name "python-dkimpy")
bf2727c1 4081 (version "1.0.5")
5c4332e5
EF
4082 (source
4083 (origin
4084 (method url-fetch)
4085 (uri (pypi-uri "dkimpy" version))
4086 (sha256
bf2727c1 4087 (base32 "088iz5cqjqh4c7141d94pvn13bh25aizqlrifwv6fs5g16zj094s"))))
5c4332e5
EF
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
4111Identified Mail) email signing and verification (RFC6376). It also provides
4112helper scripts for command line signing and verification. It supports DKIM
4113signing/verifying of ed25519-sha256 signatures (RFC 8463). It also supports
4114the RFC 8617 Authenticated Received Chain (ARC) protocol.")
4115 (license license:bsd-3)))
83dd7825
EF
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
4138headers. The library can perform DKIM, SPF, and DMARC validation, and the
4139results are packaged into the Authentication-Results header. The library can
4140DKIM 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))))
3a98604f
EF
4144
4145(define-public python-aiosmtpd
4146 (package
4147 (name "python-aiosmtpd")
b9772f62 4148 (version "1.2.2")
3a98604f 4149 (source
525304e1
TGR
4150 (origin
4151 (method git-fetch)
4152 (uri (git-reference
4153 (url "https://github.com/aio-libs/aiosmtpd")
4154 (commit version)))
4155 (sha256
b9772f62 4156 (base32 "0083d6nf75xv8nq1il6jabz36v6c452svy4p402csxwwih5pw6sk"))
525304e1 4157 (file-name (git-file-name name version))))
3a98604f
EF
4158 (build-system python-build-system)
4159 (arguments
4160 '(#:phases
4161 (modify-phases %standard-phases
525304e1 4162 (add-after 'unpack 'delete-failing-tests
3a98604f 4163 (lambda _
525304e1 4164 ;; This test uses an expired certificate.
3a98604f
EF
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}
4179based on asyncio.")
4180 (license (list license:asl2.0
4181 license:lgpl3)))) ; only for setup_helpers.py
7fb5084d
ASM
4182
4183(define-public rspamd
4184 (package
4185 (name "rspamd")
48632af5 4186 (version "2.7")
7fb5084d
ASM
4187 (source
4188 (origin
4189 (method git-fetch)
4190 (uri (git-reference
4191 (url "https://github.com/rspamd/rspamd")
4192 (commit version)))
4193 (sha256
48632af5 4194 (base32 "0fw6nbfc3xqapzq5nydakwgpw6cz6vb3qby2aqlr06lzf87d3hic"))
7fb5084d
ASM
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
4215allows evaluation of messages by a number of rules including regular
4216expressions, statistical analysis and custom services such as URL
4217black lists. Each message is analysed by Rspamd and given a spam
4218score.")
4219 (home-page "https://www.rspamd.com/")
4220 (license license:asl2.0)))