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