(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) (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))))))