Мне нужно перенаправить электронную почту в рамках нашего MTA, если выполняются два следующих критерия:
Когда электронное письмо:
Результат: перенаправить электронную почту на user2@ourcompany.com.
Я не хочу перехватывать *@isp.com и перенаправлять, и я не хочу перенаправлять всю электронную почту, адресованную на user@ourcompany.com, а только перенаправлять, когда user@isp.com отправляет user@ourcompany.com Эл. адрес.
Как мне добиться этого в конфигурации Postfix. И если в Postfix это невозможно, какое решение может быть лучшим?
Если вы не хотите использовать procmail, возможно, вам нужно что-то вроде следующего:
/etc/postfix/main.cf:
smtpd_restriction_classes = redirect
redirect = check_recipient_access hash:/etc/postfix/maps/redirections
smtpd_recipient_restrictions = [...some checks...],
check_sender_access hash:/etc/postfix/maps/user_to_redirect,
[...some more checks...]
/ etc / postfix / maps / user_to_redirect:
user@isp.com redirect
/ etc / postfix / maps / redirections:
user@ourcompany.com user2@ourcompany.com
Для получения дополнительной информации см .: http://www.postfix.org/RESTRICTION_CLASS_README.html
Ты можешь использовать PCRE В /etc/postfix/main.cf:
header_checks = pcre:/etc/postfix/headers_check
/ etc / postfix / headers_check:
/To:.*@(?!mail.domain.com) && From:.*@?!extdomain.com/ REDIRECT mailbox@mail.other.domain.com
PCRE работает с обычными расширениями Perl, и вы можете указать любые условия.
Вы рассматривали возможность использования .forward с помощью procmail? Проверьте Вот и дайте нам знать, если это отвечает вашим потребностям.
В частности, сочетание инструкций «Пересылка» для отправки почты обратно на другой адрес с разделом «Спам» для определения правильных писем, похоже, сделает именно то, что вы ищете.
В моем постфиксе не установлен pcre:
fatal: dict_open: unsupported dictionary type: pcre: Is the postfix-pcre package installed?
Но основные регулярные выражения работали, как указано здесь:
main.cf
header_checks = regexp:/etc/postfix/header_checks
The syntax in the header_checks file is:
/regex_pattern/ ACTION
http://mattshaw.org/news/how-to-filter-mail-with-postfix-header_checks/
Помните также, что имя пользователя стоит перед адресом электронной почты в строке заголовка, начинающейся с От, например:
From: Mr Smith <smith@server.com>
Таким образом, ваше регулярное выражение должно будет это учитывать.
Но я нашел более простое решение, которое не требует регулярных выражений, если вы не возражаете против того, чтобы не иметь возможности контролировать правило на основе получателя.
В современных версиях postfix вы можете добавить команду перенаправления в sender_access
Предполагая, что в вашем main.cf есть такая строка:
smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/sender_access
Вы можете добавить строку в sender_access, чтобы перенаправить электронное письмо на другой адрес, например:
sender@otherdomain.com REDIRECT you@yourdomain.com
Просто не забудьте сделать хеш postmap: sender_access после сохранения sender_access
Это рабочий конфиг для пересылки всей почты с extdomain1.ltd в специальный ящик specialuser@domain.ltd:
#cat main.cf
..
header_checks = pcre:/etc/postfix/header_checks
..
#cat /etc/postfix/header_checks
/From:.*@extdomain1.ltd/ REDIRECT specialuser@domain.ltd
Не забудьте отправить команду update postfix, чтобы перечитать конфиги.
Проблема со всем этим в том, что он может перенаправить только на один единственный адрес электронной почты любым из методов.
sender@otherdomain.com REDIRECT you@yourdomain.com
например, следующее уже не будет работать, поскольку в Postfix оно в значительной степени ограничено:
sender@otherdomain.com REDIRECT you@yourdomain.com | your2@secondomain.com
Если вы хотите сделать что-то более интересное, я настоятельно рекомендую вам установить и узнать, как использовать procmail.