В нашем приложении мы отправляем разные типы писем. В широком смысле мы можем разделить его на две категории:
Есть ли способ (установка некоторого заголовка / настройка некоторого параметра в постфиксе), чтобы для одного и того же адреса отправителя мы могли использовать другой хост-ретранслятор?
Транспортные карты (в ответе Халеда) могут изменять ретрансляцию почты в зависимости от домена.
Вы также можете использовать header_checks и body_checks для изменения транспорта (и выполнения других действий) на основе совпадающих заголовков и содержимого в теле письма. Это может быть регулярное выражение или хэш. Мой пример ниже основан на регулярном выражении.
В /etc/postfix/main.cf
:
header_checks = regexp:/etc/postfix/header_checks
В /etc/postfix/header_checks
:
/^Subject: Host [a-z0-9]* is down!/ FILTER relay:192.168.1.1
/^Subject: [^ ]* has posted a new blog entry./ FILTER relay:192.168.1.2
/^Message-ID: <[0-9a-z]*@dbserver.local>/ FILTER relay:192.168.1.1
/^Message-ID: <[0-9a-z]*@mydomain.com>/ FILTER relay:192.168.1.2
В body_checks
работать так же, как header_checks
.
Вы можете установить произвольные заголовки в своем приложении, если хотите фильтровать что-то уникальное.
В постфиксе вы можете использовать transport_maps чтобы указать разные хосты ретрансляции для разных доменов. В файле /etc/postfix/main.cf
, вам нужно включить строку:
transport_maps = hash:/etc/postfix/transport
Файл транспортных карт имеет следующий синтаксис:
# Syntax: .domain transport:relay_host
# Specifies specific domains for local delivery
mydomain1.com :
mydomain2.com :
# Specify domains that need to be relayed through 192.168.1.1
anotherdomain1.com relay:192.168.1.1
anotherdomain2.com relay:192.168.1.1
Не забывай бежать postmap transport
для создания .db
файл, а затем перезагрузите / перезапустите процесс postfix.