Версия для печати

mail_deliveryДля того, что бы доставлять сообщения в почтовый ящик пользователя, в ZMailer существует mailbox LDA. Но у него есть ряд ограничений:

  • он умеет работать только с mailbox ящиками (не умеет maildir или dbox)
  • он не имеет почтовых фильтров (и не умеет доставлять куда-либо, кроме INBOX)
  • квота может быть только на файловой системе (только fs_quota)
  • никак не учитывает того, кто дальше работает с этим ящиком (pop/imap)

Если же вы уже используете в качестве pop/imap сервера dovecot, то использование dovecot LDA выглядит хорошей идеей.

Тогда вы получаете:

  • индексирование ящика в момент доставки, что ускоряет доступ к нему через pop/imap
  • использование разных тип квот, которые умеет dovecot (fs, dirsize, dict, maildir)
  • язык фильтров sieve (переадресация, авто-ответ, доставка в любые папки)
  • ящик может быть не только mailbox типа (mbox, maildir, dbox)

Для установки в ZMailer'е dovecot LDA в качестве доставщика сообщений в ящик пользователя надо:

1. Установить dovecot LDA
2. Добавить описание LDA в: zmailer/sm.conf

# dovecot LDA
dovecot SPfne  /usr/local/libexec/dovecot/deliver  deliver -e -n -d $u

3. И добавить доставку через этот LDA в: zmailer/scheduler.conf
(доставку в file* и pipe* надо оставить через штатный mailbox)

local/file*
local/pipe*
        interval=1m
        idlemax=9m
        expiry=5d
        maxchannel=10
        maxring=10
        # zmailer local delivery transport agent
        command="mailbox -8HS -l ${LOGDIR}/mailbox"
local/*
        interval=1m
        idlemax=9m
        expiry=5d
        maxchannel=10
        maxring=10
        # DOVECOT as the local delivery agent:
        command="sm -8Hc $channel dovecot"

И как всегда, есть небольшая, но исправимая проблема. При доставке я использую параметр «-e». Этот параметр позволяет dovecot deliver'у сообщить о проблеме доставки ZMailer'у, а не генерировать ответ самому. При такой работе deliver завершается с кодом: EX_NOPERM. Такой код ответа приводит к пугающему сообщению: (this is abnormal, investigate!) в ZMailer'е.

Для исправления можно или изменить реакцию на этот код у ZMailer'а:
zmailer/transports/libta/diagnostic.c

-      case EX_NOPERM:
       case EX_PROTOCOL:
       case EX_USAGE:
               strcat(message,
                      " (this is abnormal, investigate!)");
               s += strlen(s);
               /* fall through */
+      case EX_NOPERM:
       case EX_NOUSER:
       case EX_NOHOST:
       case EX_UNAVAILABLE:

Или изменить код возврата у deliver'а:
dovecot-1.2.6/src/deliver/deliver.c

                if (stderr_rejection)
-                       return EX_NOPERM;
+                       return EX_UNAVAILABLE;
Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong

По теме:

Оставить комментарий



Anti-spam image