1let
2 certs = import ./common/acme/server/snakeoil-certs.nix;
3 domain = certs.domain;
4in
5import ./make-test-python.nix {
6 name = "postfix";
7
8 nodes.machine = { pkgs, ... }: {
9 imports = [ common/user-account.nix ];
10 services.postfix = {
11 enable = true;
12 enableSubmission = true;
13 enableSubmissions = true;
14 tlsTrustedAuthorities = "${certs.ca.cert}";
15 sslCert = "${certs.${domain}.cert}";
16 sslKey = "${certs.${domain}.key}";
17 submissionsOptions = {
18 smtpd_sasl_auth_enable = "yes";
19 smtpd_client_restrictions = "permit";
20 milter_macro_daemon_name = "ORIGINATING";
21 };
22 };
23
24 security.pki.certificateFiles = [
25 certs.ca.cert
26 ];
27
28 networking.extraHosts = ''
29 127.0.0.1 ${domain}
30 '';
31
32 environment.systemPackages = let
33 sendTestMail = pkgs.writeScriptBin "send-testmail" ''
34 #!${pkgs.python3.interpreter}
35 import smtplib
36
37 with smtplib.SMTP('${domain}') as smtp:
38 smtp.sendmail('root@localhost', 'alice@localhost', 'Subject: Test\n\nTest data.')
39 smtp.quit()
40 '';
41
42 sendTestMailStarttls = pkgs.writeScriptBin "send-testmail-starttls" ''
43 #!${pkgs.python3.interpreter}
44 import smtplib
45 import ssl
46
47 ctx = ssl.create_default_context()
48
49 with smtplib.SMTP('${domain}') as smtp:
50 smtp.ehlo()
51 smtp.starttls(context=ctx)
52 smtp.ehlo()
53 smtp.sendmail('root@localhost', 'alice@localhost', 'Subject: Test STARTTLS\n\nTest data.')
54 smtp.quit()
55 '';
56
57 sendTestMailSmtps = pkgs.writeScriptBin "send-testmail-smtps" ''
58 #!${pkgs.python3.interpreter}
59 import smtplib
60 import ssl
61
62 ctx = ssl.create_default_context()
63
64 with smtplib.SMTP_SSL(host='${domain}', context=ctx) as smtp:
65 smtp.sendmail('root@localhost', 'alice@localhost', 'Subject: Test SMTPS\n\nTest data.')
66 smtp.quit()
67 '';
68 in [ sendTestMail sendTestMailStarttls sendTestMailSmtps ];
69 };
70
71 testScript = ''
72 machine.wait_for_unit("postfix.service")
73 machine.succeed("send-testmail")
74 machine.succeed("send-testmail-starttls")
75 machine.succeed("send-testmail-smtps")
76 '';
77}