У нас есть настройка, в которой postfix отправляет почту через Amazon SES relay. Все работает нормально, кроме пересылки электронной почты.
Хотя эта тема уже обсуждалась как минимум Вот и Вот, есть еще некоторые моменты, которые я не могу понять.
Проблема в том, что Amazon SES не отправляет электронные письма, где From:
не проверено. Поэтому, когда внутренний адрес хочет пересылать на внешний, а отправитель также является внешним, почта не будет отправлена.
Чтобы решить эту проблему, в настоящее время мы используем следующую конфигурацию в main.cf
header_checks = regexp:/etc/postfix/first_header_checks
smtp_header_checks = regexp:/etc/postfix/second_header_checks
sender_canonical_maps = regexp:/etc/postfix/sender_canonical
sender_canonical_classes = envelope_sender
smtpd_data_restrictions = check_sender_access pcre:/etc/postfix/sender_access
С first_header_checks
/^From:(\s)?(.*)/i PREPEND X-Original-From: $2
/^To:(\s)?(.*)$/i PREPEND X-Original-To: $2
second_header_checks
/^From:(.*)/i REPLACE From: <no-reply@verified-domain.com>
sender_canonical
/.*/ user@verified-domain.com
sender_access
/(.*)/ prepend Reply-To: <$1>
Это отлично подходит для входящей почты. user@external.com отправляет письмо на адрес me@verified-domain.com и пересылает его на адрес new@another-external.com
Reply-To: <user@external.com>
X-Original-To: <me@verified-domain.com>
To: new@another-external.com
From: <no-reply@verified-domain.com>
X-Original-From: <user@external.com>
Проблема, так же бывает и с исходящей почтой с сервера. Скажем, me@verified-domain.com отправляет письмо, from будет переписан на no-reply и будет установлен Reply-To. Я хочу это исправить. Заголовки писем следует переписывать только для входящей почты, которая будет пересылаться.
Я пробовал использовать регулярные выражения вроде !/^From:(\s)?(.*@verified-domain\.com)/
но пока безуспешно.
Postfix 2.1 и выше поддерживает условные операторы внутри regex
и pcre
таблицы. В твоем случае second_header_checks
использование этих условных выражений должно выглядеть так:
if !/^From:(.*)@verified-domain.com/i
/^From:(.*)/i REPLACE From: <no-reply@verified-domain.com>
endif
Вы можете протестировать свои таблицы поиска, не отправляя ничего подобного:
peter@mail:~peter $ cat msgheaders
From: <peter@external.com>
To: new@another-external.com
peter@mail:~peter $ postmap -hmq - regexp:/etc/postfix/second_header_checks < msgheaders
From: <peter@external.com> REPLACE From: <no-reply@verified-domain.com>
peter@mail:~peter $ cat msgheaders-1
From: <peter@verified-domain.com>
To: new@another-external.com
peter@mail:~peter $ postmap -hmq - regexp:/etc/postfix/second_header_checks < msgheaders-1
peter@mail:~peter $
Я пытался сделать что-то очень похожее на эту с другой почтовой службой, вот как я это решил (после того, как получил большую помощь из этой темы):
somebody@external.com smtp:localhost:9999
-o content_filter=smtp:[mx.somedomain.com]:25
-o smtpd_recipient_restrictions=permit_mynetworks,defer
(Это может быть не идеально, проверьте политику безопасности перед запуском)Удачи тебе, если тебе нужна дополнительная информация, я могу попробовать и помочь.