From 27f1e8299b076f87119b3cbc92980773429aa17c Mon Sep 17 00:00:00 2001 From: Timotej Lazar Date: Sat, 1 Oct 2022 22:35:05 +0200 Subject: [PATCH] Add mail service config --- config/mail.scm | 54 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 config/mail.scm diff --git a/config/mail.scm b/config/mail.scm new file mode 100644 index 0000000..48a6f28 --- /dev/null +++ b/config/mail.scm @@ -0,0 +1,54 @@ +(define-module (config mail) + #:use-module (gnu packages mail) + #:use-module (gnu services mail) + #:use-module (guix gexp) + #:use-module (gnu services) + #:use-module (services dkim-key) + #:export (mail-services)) + +(define* (opensmtpd-config #:key interface domain aliases dkim-selector) + (define (format-aliases aliases) + (string-append (format #f "~:{~a: ~a\n~}\n" + (cons* '("MAILER-DAEMON" "postmaster") + '("postmaster" "root") + '("hostmaster" "root") + '("webmaster" "root") + '("abuse" "root") + '("security" "root") + aliases)))) + + (mixed-text-file "smtpd.conf" "\ +smtp max-message-size \"1G\" +table aliases file:" (mixed-text-file "aliases" (format-aliases aliases)) " + +pki " domain " cert \"/etc/letsencrypt/live/" domain "/fullchain.pem\" +pki " domain " key \"/etc/letsencrypt/live/" domain "/privkey.pem\" + +filter \"dkimsign\" proc-exec \"" + (file-append opensmtpd-filter-dkimsign "/libexec/opensmtpd/filter-dkimsign") + " -d " domain " -s " dkim-selector " -k /etc/dkim/" domain ".key\" + +listen on lo port submission mask-src filter \"dkimsign\" +listen on " interface " tls pki " domain " +listen on " interface " port submission tls-require pki " domain " auth mask-src filter \"dkimsign\" + +action \"deliver\" maildir \"%{user.directory}/mail\" alias +action \"relay\" relay + +match from any for domain \"" domain "\" action \"deliver\" +match from any auth for any action \"relay\" +")) + +(define* (mail-services #:key interface domain aliases dkim-selector) + (list (service dkim-key-service-type + (dkim-key-configuration + (domain domain) + (selector dkim-selector))) + + (service opensmtpd-service-type + (opensmtpd-configuration + (config-file + (opensmtpd-config #:interface interface + #:domain domain + #:aliases aliases + #:dkim-selector dkim-selector))))))