My Nix Configuration
at main 2.1 kB view raw
1{ 2 d, 3 ifThen, 4 otherwise, 5}: 6# Queue Management 7# https://stalw.art/docs/mta/outbound/overview 8{ 9 # Virtual Queues 10 # https://stalw.art/docs/mta/outbound/queue 11 virtual.default.threads-per-node = 100; 12 virtual.admin.threads-per-node = 10; 13 virtual.local.threads-per-node = 100; 14 # Schedules 15 # https://stalw.art/docs/mta/outbound/schedule 16 schedule = 17 let 18 queue = { 19 retry = [ 20 "1m" 21 "2m" 22 "5m" 23 "10m" 24 "15m" 25 "30m" 26 "1h" 27 "2h" 28 ]; 29 notify = [ 30 "1d" 31 "3d" 32 ]; 33 max-attempts = 15; 34 }; 35 in 36 { 37 default = queue // { 38 queue-name = "default"; 39 }; 40 admin = queue // { 41 queue-name = "admin"; 42 }; 43 local = queue // { 44 queue-name = "local"; 45 }; 46 }; 47 # Routes 48 # https://stalw.art/docs/mta/outbound/routing 49 route = { 50 local.type = "local"; 51 remote = { 52 type = "mx"; 53 ip-lookup = "ipv6_then_ipv4"; 54 tls.implicit = false; 55 tls.allow-invalid-certs = false; 56 }; 57 }; 58 # Strategies 59 # https://stalw.art/docs/mta/outbound/strategy 60 strategy = { 61 schedule = [ 62 (ifThen "is_local_domain('', rcpt_domain)" "'local'") 63 (ifThen "source = 'dsn'" "'admin'") 64 (ifThen "source = 'report'" "'admin'") 65 (ifThen "source = 'autogenerated'" "'admin'") 66 (otherwise "'default'") 67 ]; 68 route = [ 69 (ifThen "is_local_domain('', rcpt_domain)" "'local'") 70 (otherwise "'remote'") 71 ]; 72 connection = "'default'"; 73 tls = "'default'"; 74 }; 75 # Remote Connection 76 # https://stalw.art/docs/mta/outbound/connection 77 connection.default = { 78 ehlo-hostname = d.extUrl; 79 source-ips = d.extIPs; 80 timeout = { 81 connect = "3m"; 82 greeting = "3m"; 83 ehlo = "3m"; 84 mail-from = "3m"; 85 rcpt-to = "3m"; 86 data = "10m"; 87 }; 88 }; 89 tls.default = { 90 dane = "optional"; 91 mta-sts = "optional"; 92 starttls = "optional"; 93 allow-invalid-certs = false; 94 timeout.tls = "3m"; 95 timeout.mta-sts = "3m"; 96 }; 97}