summaryrefslogtreecommitdiffstats
path: root/roles/IMAP
diff options
context:
space:
mode:
Diffstat (limited to 'roles/IMAP')
-rw-r--r--roles/IMAP/files/etc/postfix/recipient_canonical.pcre4
-rw-r--r--roles/IMAP/tasks/mda.yml6
-rw-r--r--roles/IMAP/templates/etc/postfix/main.cf.j25
3 files changed, 15 insertions, 0 deletions
diff --git a/roles/IMAP/files/etc/postfix/recipient_canonical.pcre b/roles/IMAP/files/etc/postfix/recipient_canonical.pcre
new file mode 100644
index 0000000..07c5859
--- /dev/null
+++ b/roles/IMAP/files/etc/postfix/recipient_canonical.pcre
@@ -0,0 +1,4 @@
+# Restore the original envelope recipient (drop our internal domain).
+# Extensions are preserved as they are included in $2.
+
+/^([^\/]+)\/(.+)@[^@]+$/ $2@$1
diff --git a/roles/IMAP/tasks/mda.yml b/roles/IMAP/tasks/mda.yml
index 1aac519..0358f12 100644
--- a/roles/IMAP/tasks/mda.yml
+++ b/roles/IMAP/tasks/mda.yml
@@ -29,6 +29,12 @@
- mailbox.cf
- transport_content_filter.cf
+- name: Copy recipient canonical
+ copy: src=etc/postfix/recipient_canonical.pcre
+ dest=/etc/postfix-{{ postfix_instance[inst].name }}/recipient_canonical.pcre
+ owner=root group=root
+ mode=0644
+
- name: Start Postfix
service: name=postfix state=started
when: not r.changed
diff --git a/roles/IMAP/templates/etc/postfix/main.cf.j2 b/roles/IMAP/templates/etc/postfix/main.cf.j2
index e4c01bd..d0421ce 100644
--- a/roles/IMAP/templates/etc/postfix/main.cf.j2
+++ b/roles/IMAP/templates/etc/postfix/main.cf.j2
@@ -55,6 +55,11 @@ virtual_mailbox_domains = ldap:$config_directory/virtual/mailbox_domains.cf
virtual_mailbox_maps = ldap:$config_directory/virtual/mailbox.cf
transport_maps = ldap:$config_directory/virtual/transport_content_filter.cf
+# Restore the original envelope recipient
+relay_domains = $myhostname
+recipient_canonical_classes = envelope_recipient
+recipient_canonical_maps = pcre:$config_directory/recipient_canonical.pcre
+
# Don't rewrite remote headers
local_header_rewrite_clients =
# Tolerate occasional high latency