Мне нужно настроить конфигурацию почтового сервера для тестовой среды, которая будет принимать всю почту (то есть для всех пользователей и всех доменов, даже нелокальных) и помещать ее в один локальный почтовый ящик общего доступа.
У меня SLES 11 с Sendmail (8.14), где я попытался изменить / etc / mail / virtusertable, чтобы он выглядел как
@ catchall
или как
@* catchall
но безрезультатно - адреса электронной почты получателя (например, "santa@northpole.org") не переписываются на catchall @, поэтому доставка осуществляется в соответствующий MX:
# sendmail -bt
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> 3,0 santa@northpole.org
canonify input: santa @ northpole . org
Canonify2 input: santa < @ northpole . org >
Canonify2 returns: santa < @ northpole . org . >
canonify returns: santa < @ northpole . org . >
parse input: santa < @ northpole . org . >
Parse0 input: santa < @ northpole . org . >
Parse0 returns: santa < @ northpole . org . >
ParseLocal input: santa < @ northpole . org . >
ParseLocal returns: santa < @ northpole . org . >
Parse1 input: santa < @ northpole . org . >
MailerToTriple input: < > santa < @ northpole . org . >
MailerToTriple returns: santa < @ northpole . org . >
Parse1 returns: $# esmtp $@ northpole . org . $: santa < @ northpole . org . >
parse returns: $# esmtp $@ northpole . org . $: santa < @ northpole . org . >
Похоже, что подстановочные знаки не поддерживаются в исходной области таблицы поиска.
Как мне реализовать это с помощью Sendmail?
Редактировать: Согласно Комментарии Анджея Я пробовал ввести в почтовую таблицу
. local:catch-all-outgoing
так же как
.. local:catch-all-outgoing
и получил идентичный результат для sendmail -bv
в обоих случаях:
# sendmail -d60.5 -bv jd@example.net
map_lookup(dequote, root, %0=root) => NOT FOUND (0)
map_lookup(host, example.net, %0=example.net) => example.net. (0)
jd@example.net... deliverable: mailer esmtp, host example.net., user jd@example.net
(да, root, как sendmail
кажется, не может работать без полномочий root)
Редактировать: Оказалось, что функция mailertable не была включена в файле макросов, поэтому sendmail.cf не содержал соответствующих правил перезаписи для его работы.
С чем вы здесь сталкиваетесь: /etc/mail/virtusertable
Я считаю, что это ограничивается только входящей электронной почтой, а не исходящей.
Вы можете использовать маршрут по умолчанию в mailertable или SMART_HOST для доставки всех нелокальных сообщений в один локальный почтовый ящик / псевдоним.
mailertable entry:
. local:catch-all-outgoing
aliases:
catch-all-outgoing: some-local-account
Любая запись LHS, которая не начинается с точки, соответствует указанному полному имени хоста. Записи LHS, начинающиеся с точки, соответствуют всему, что заканчивается этим доменным именем (включая начальную точку), то есть их можно рассматривать как наличие начального шаблона регулярного выражения «. +» Для непустой последовательности символов.
RHS всегда должна быть парой «почтовая программа: хост». Почтовая программа - это имя конфигурации почтовой программы (то есть строка M в файле sendmail.cf). "Хост" будет именем хоста, переданным этой почтовой программе.
(ссылка: readme для sendmail, Раздел «ИСПОЛЬЗОВАНИЕ ПОЧТЫ»)
Так что-то вроде:
. local:catch-all-outgoing
(всего одна точка согласно Комментарий Аджея) в / etc / mail / mailertable должен вызвать перенаправление любого domain.tld на локальную конфигурацию почтовой программы, определенную в sendmail.cf. С псевдонимом, улавливающим имя хоста catch-all-outgoing
и делает его локальным адресом электронной почты.
Чтобы почтовая таблица работала, ее необходимо включить в config. Добавление
FEATURE(`mailertable',`hash -o /etc/mail/mailertable.db')dnl
в файл макроса m4, генерирующий вашу конфигурацию, должен позаботиться об этом.
Также из файлов помощи сайта sendmail:
ПОЧТОВОЕ:
Включите "таблицу почтовой программы", которую можно использовать для переопределения маршрутизации для определенных доменов. (которые не входят в класс {w}, т.е. имена локальных хостов). Аргумент ФУНКЦИИ может быть ключевым определением. Если ничего не указано, используется следующее определение:
хеш / etc / mail / mailertable
Ключи в этой базе данных представляют собой полностью определенные доменные имена или частичные домены, которым предшествует точка, например "vangogh.CS.Berkeley.EDU" или ".CS.Berkeley.EDU". Как частный случай последнего, "." соответствует любому домену, не охваченному другими ключами. Значения должны иметь вид: почтовая программа: домен.
где «почтовая программа» - это внутреннее имя почтовой программы, а «домен» - это место для отправки сообщения. Эти карты не отражаются в заголовке сообщения. В качестве особого случая формы: local: user будут перенаправлять указанному пользователю с помощью локальной почтовой программы,
Вы можете определить SMART_HOST
для нелокальных доменов и MAIl_HUB
для локальных почтовых доменов.
sendmail.mc:
define(`SMART_HOST',`local:some_existing_user')dnl
define(`MAIL_HUB',`local:some_existing_user')dnl
dnl optional part to list local users/mailboxes excluded from the redirect
dnl in /etc/mail/direct-users file (one user per line)
LOCAL_CONFIG
FL/etc/mail/direct-users
divert(0)
P.S.
Использовать echo '$=w' | sendmail -bt
чтобы получить список локальных почтовых доменов. Sendmail по умолчанию заполняет его автоматически.
mailertable может использоваться для исключения некоторого внешнего домена из перенаправления
example.net %0