[Comm] virtual mail domain

Dmitry Lebkov =?iso-8859-1?q?dima_=CE=C1_sakhalin=2Eru?=
Ср Апр 2 06:48:11 MSD 2003


On Wed, 02 Apr 2003 11:05:42 +1000
metrol на amur.ru wrote:

> 
> Здравствуйте!
> 
> Создал виртуальный почтовый домен в такой связке:
> Postfix + Courier-imap + Maildrop-userdb.
> Делал по maildrop.README-ALT.
> Все прекрасно работает, пока дело не дошло до несуществующих
> пользователей в этом виртуальном домене.
> Письма для них болтаются в очереди postfix'а, mailq показывает:
> 
> -Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
> 1876DF0146      675 Wed Apr  2 10:36:43  test на virtual.ru
> (temporary failure. Command output: /usr/bin/maildrop-userdb: Invalid 
> user specified. )
>                                          test1 на virtual.ru
> 
> Подскажите как сделать, чтобы для таких зверей почта пересылалась на
> существующего пользователя?

На вскидку, три варианта: %)

1. Патчить maildrop на предмет exit code в случае отсутствия пользователя,
   для которого доставляется почта. Сейчас maildrop возвращает EX_TEMPFAIL.
   В твоем случае - необходимо EX_NOUSER. Патч, корректирующий поведение
   maildrop, лежит здесь:

http://www-dt.e-technik.uni-dortmund.de/~ma/postfix/fix-maildrop-NO_USER.diff

Это не совсем 'right way', т.к. принимать решение о доставке сообщения -
дело MTA (sedmail или postfix) а не MDA (procmail или maildrop), т.е.
предполагается, что в момент передачи сообщения локальному агенту от MTA,
пользователь уже присутствует в системе. И с этой точки зрения EX_TEMPFAIL
вполне уместен: если по какой-либо причине не удалось получить инфо о
пользователе (отвалился SQL или LDAP, не сработал вызов getpwent, и т.д.)
-- сообщение зависает в очереди до тех пор, пока ситуация не исправится.


2. Настроить почтовый сервер таким образом, чтоб он _не принимал_ почту
   для несуществующих адресов.

Т.к. у тебя пользователи в userdb, то можно попытаться использовать этот самый
/etc/courier-imap/userdb.db как postfix map. Если maildrop-userdb у тебя описан
как транспорт maildrop, то тебе должно помочь что-то типа:

maildrop_recipient_map = hash:/etc/courier-imap/userdb

Подробности - в доках postfix'а, в районе local_recipient_map.


3. Попытаться Написать общесистемный maildroprc, обрабатывающий данную ситуацию.
   См. man maildropfilter.

Про этот метод я знаю, что он существует и является довольно универсальным
инструментом. Но сам я никогда не пытался решить подобную задачу с помощью
общесистемного maildroprc. %)


-- 
WBR, Dmitry Lebkov



Подробная информация о списке рассылки community