diff --git a/postfix/defaults/main.yml b/postfix/defaults/main.yml
index 4c309d75be761463dfc5b30c24a9e3fecd6f74ab..75039eaf70ffa628435b735033f40898b49f0ff9 100644
--- a/postfix/defaults/main.yml
+++ b/postfix/defaults/main.yml
@@ -33,3 +33,11 @@ postfix_aliases_rt: []
 #  - queue: IT
 #    url: https://rt.example.com
 #    address: it
+
+postfix_relay_host: ""
+postfix_transport_maps: []
+#  - domain: foo.example.com
+#    server: mail.bar.example.com
+#    port: 2025
+#    protocol: smtp
+#    use_mx: true
diff --git a/postfix/handlers/main.yml b/postfix/handlers/main.yml
index 5c07705da52914e739b688edfe443efd307f45b9..5421edf3c84b367b23a0a1262ee7765fe058a7bb 100644
--- a/postfix/handlers/main.yml
+++ b/postfix/handlers/main.yml
@@ -11,3 +11,6 @@
 
 - name: postmap virtual
   command: postmap cdb:/etc/postfix/virtual
+
+- name: postmap transport
+  command: postmap cdb:/etc/postfix/transport
diff --git a/postfix/tasks/main.yml b/postfix/tasks/main.yml
index 033b95734a76de117b896065c4bf058dc0e6b74f..e9a0386c171c27433e068fda509371258fcd1d43 100644
--- a/postfix/tasks/main.yml
+++ b/postfix/tasks/main.yml
@@ -116,3 +116,14 @@
   tags:
     - postfix
     - mail
+
+- name: ensure transport_maps are configured
+  template:
+    src: transport.j2
+    dest: /etc/postfix/transport
+  notify:
+    - postmap transport
+  when: postfix_transport_maps|bool
+  tags:
+    - postfix
+    - mail
diff --git a/postfix/templates/main.cf.j2 b/postfix/templates/main.cf.j2
index f78d4c7cb573f5e199432952cf3833655e561105..1ff0c4e86c46a08492c3712441e03637821fe9b5 100644
--- a/postfix/templates/main.cf.j2
+++ b/postfix/templates/main.cf.j2
@@ -6,7 +6,10 @@ myhostname = {{ ansible_fqdn }}
 myorigin = /etc/mailname
 mydestination = $myhostname localhost {{ postfix_domains | join(" ") }}
 mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
-relayhost =
+relayhost = {{ postfix_relay_host }}
+{% if postfix_transport_maps|bool %}
+transport_maps = cdb:/etc/postfix/transport
+{% endif %}
 {% if postfix_domains|count > 0 %}
 {% if postfix_prefer_lmtp %}
 mailbox_transport = lmtp:unix:private/dovecot-lmtp
diff --git a/postfix/templates/transport.j2 b/postfix/templates/transport.j2
new file mode 100644
index 0000000000000000000000000000000000000000..aeacedc3d7f5604e160b2411503ce51eeb6a6ca9
--- /dev/null
+++ b/postfix/templates/transport.j2
@@ -0,0 +1,7 @@
+{% for transport in postfix_transport_maps %}
+{% if transport.use_mx|default(true) %}
+{{ transport.domain }} {{ transport.protocol|default("") }}:{{ transport.server }}{{ ":"~transport.port if transport.port|default(false)|bool else "" }}
+{% else %}
+{{ transport.domain }} {{ transport.protocol|default("") }}:[{{ transport.server }}]{{ ":"~transport.port if transport.port|default(false)|bool else "" }}
+{% endif %}
+{% endfor %}