Используйте Postfix для пересылки почты в домен на тот же адрес в другом домене

8

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

Я использую Postfix с поддержкой MySQL для виртуальных учетных записей.

Авраам Вег
источник

Ответы:

8

Нет, это невозможно напрямую. Есть одно исключение, как это может работать, описано в http://www.postfix.org/ADDRESS_REWRITING_README.html#luser_relay

Другим грубым решением было бы использовать SQL (substr + concat), чтобы обработать это для вас в virtual_alias_maps.

Редактировать : Ох. Есть одна последняя возможность. Используйте механизм делегирования политики и возвращайтесь REDIRECT localpart@other-domain.exampleтуда, где он вам нужен, и DUNNOесли вы не хотите переписывать.

Редактировать 2 : Вдохновленный Squidly (но его решение не работает!) Вы можете настроить

virtual_alias_maps = pcre:/etc/postfix/forward_user.pcre, ...

и в этом файле положить

/^(.*)@adomain\.example/    $(1)@other-domain.example

(Остерегайтесь экранированной точки (\.) В первом столбце.) Лично я предпочел бы эту версию.

mailq
источник
третье решение сработало для меня. Однако мне пришлось установить postfix-pcreпакет (Ubuntu 12.10)
scytale
1

Тип таблицы pcre недоступен в моей системе, поэтому я сделал следующее:

  • В /etc/postfix/main.cf:

    virtual_alias_maps = regexp:/etc/postfix/virtual
    
  • В /etc/postfix/virtual:

    /^([^@]*)@olddomain/ $(1)@newdomain
    
Ричард Хансен
источник
0

Если вы используете MySQL в качестве конца хранилища, я считаю, что вы можете указать перехват всех форвардов следующим образом:

Переадресация таблиц

| source       | destination   |
|==============|===============|
| @example.com | @yoursite.com |

Если я правильно прочитал документацию, это означало бы, что user1@example.com теперь будет перенаправлен на user1@yoursite.com и т. Д.

Я нашел это в этом уроке Howtoforge

HectorMalot
источник
0

Не возможно напрямую? Я нашел это очень простым и прямым без SQL, регулярных выражений или механизмов политики.

В main.cf:

virtual_alias_domains = alias-destination1.com alias-destination2.com
virtual_alias_maps = hash:/etc/postfix/virtual

В /etc/postfix/virtual:

# I want @true-destination.com to have two incoming aliases
@alias-destination1.com @true-destination.com
@alias-destination2.com @true-destination.com

Отправка тестового электронного письма с сервера:

# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 smtp.myserver.com ESMTP Postfix
HELO smtp.myserver.com
250 smtp.myserver.com
MAIL FROM:<somebody@gmail.com>
RCPT TO:<anyuser@alias-destination1.com>
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
Message-ID: <4DC3723F.8010907@myserver.com>                                                                                                               
Date: Thu, 05 May 2011 23:59:59 -0400                                                                                                                    
From: Some Body <somebody@gmail.com>                                                                                                                   
To: anyuser@alias-destination1.com                                                                                                                                
Subject: Hello                                                                                                                                           
Just testing.                                                                                                                                            
.

И фактический результат в mail.log (у меня работает amavis на порту 10025):

Apr  6 22:39:43 smtp-a postfix/smtpd[4411]: connect from localhost[127.0.0.1]
Apr  6 22:39:43 smtp-a postfix/smtpd[4411]: 6B47641AF2: client=localhost[127.0.0.1]
Apr  6 22:39:43 smtp-a postfix/cleanup[3706]: 6B47641AF2: message-id=<4DC3723F.8010907@myserver.com>
Apr  6 22:39:43 smtp-a postfix/qmgr[3681]: 6B47641AF2: from=<somebody@gmail.com>, size=1115, nrcpt=1 (queue active)
Apr  6 22:39:43 smtp-a postfix/smtpd[4411]: disconnect from localhost[127.0.0.1]
Apr  6 22:39:43 smtp-a amavis-incoming[2159]: (02159-13) Passed CLEAN {RelayedInternal}, LOCAL [127.0.0.1]:42426 [127.0.0.1] <somebody@gmail.com> -> <anyuser@alias-destination1.com>, Queue-ID: 5C61F41AE5, Message-ID: <4DC3723F.8010907@myserver.com>, mail_id: hUbzH1PtXlzl, Hits: 2.605, size: 394, queued_as: 6B47641AF2, 1224 ms
Apr  6 22:39:43 smtp-a postfix/lmtp[3687]: 5C61F41AE5: to=<anyuser@alias-destination1.com>, relay=127.0.0.1[127.0.0.1]:10024, delay=25, delays=24/0/0/1.2, dsn=2.0.0, status=sent (250 2.0.0 from MTA(smtp:[127.0.0.1]:10025): 250 2.0.0 Ok: queued as 6B47641AF2)
Apr  6 22:39:43 smtp-a postfix/qmgr[3681]: 5C61F41AE5: removed

Ключевые строки отделены для акцента:

Apr  6 22:39:43 smtp-a postfix/smtp[3684]: 6B47641AF2: to=<anyuser@true-destination.com>, orig_to=<anyuser@alias-destination1.com>, relay=10.0.0.245[10.0.0.245]:2525, delay=0.03, delays=0.01/0/0/0.02, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 705AA40459)
Apr  6 22:39:43 smtp-a postfix/qmgr[3681]: 6B47641AF2: removed
BaseZen
источник
-1

В зависимости от того, как вы настроили свой Postfix, вы можете использовать псевдоним для пересылки всей почты.

редактировать

Также вы можете настроить редирект, который сделает это за вас легко.

В /etc/postfix/main.cf добавьте это:

recipient_bcc_maps = pcre:/etc/postfix/forward_bcc.pcre

Затем в /etc/postfix/forward_bcc.pcre добавьте это:

/^user@olddomain.com/ user@newdomain.com

Это что-то вроде хака, но оно будет работать для пересылки определенных пользователей из одного домена в другой.

Вы также можете посмотреть на этой странице, как сделать переписывание в Postfix самостоятельно.

Squidly
источник
Можете быть более конкретными? Я знаю, что могу указать @somedomain.comпересылку всей почты на определенный адрес, но я хочу знать, могу ли я переслать тому же получателю.
Авраам Вег
в / etc / aliases настройте его следующим образом. $ username: $username@newdomain.com
Squidly
@Squidly Ваше редактирование не является регулярным выражением и не будет работать. Вы комментируете / etc / aliases не будет работать, так как у OP есть только виртуальные пользователи.
mailq
@mailq. Это LIVE на МОЕМ сервере прямо сейчас. Он отлично работает для нескольких перенаправлений. Также он не сказал, что это были ТОЛЬКО виртуальные пользователи. Это также давало варианты, чтобы посмотреть.
Squidly