Назад | Перейти на главную страницу

Использовать другое реле в постфиксе

В нашем приложении мы отправляем разные типы писем. В широком смысле мы можем разделить его на две категории:

  1. Письма, отслеживающие работоспособность приложения.
  2. Письма, которые мы отправляем конечному пользователю.

Есть ли способ (установка некоторого заголовка / настройка некоторого параметра в постфиксе), чтобы для одного и того же адреса отправителя мы могли использовать другой хост-ретранслятор?

Транспортные карты (в ответе Халеда) могут изменять ретрансляцию почты в зависимости от домена.

Вы также можете использовать 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.