[personal profile] waspagv
Для админов, делающих щастье своим юзерам, маленькая заметка о том, как совместить Cyrus-IMAP и qmail.

Два дня выбирал, какой сервер IMAP поставить на работе. Испытал bincimap, UW-IMAP, Dovecot, Courier, Cyrus. Проблема в том, что очень нужны общие папки (Shared Folder) с механизмом контроля доступа к ним. Все названные сервера, кроме последнего, или вообще не поддерживают общие папки, или делают это через задницу. Cyrus-IMAP понравился всем, кроме того, что он закрытый. Т.е., он использует свое собственное хранилище сообщений, куда грязными руками соваться не следует. В частности, нельзя просто положить письмо в нужный каталог, надо еще прописать его в индексных файлах, одному cyrus'у известно в каких. Поэтому доставка письма производится либо через юниксовый сокет по протоколу LMTP, либо с помощью прилагаемой утилиты deliver, которая в итоге пишет в тот же сокет. В сопроводительной документации подробно рассказано, как заставить sendmail запихивать письма в Cyrus, вскользь упомянут exim, но ни слова о qmail, а именно он у меня базовый MTA. Пришлось придумывать самому.

Вообще, все тривиально. Составляем usertable, где перечисляем особенных пользователей, а в качестве шаблона по умолчанию пишем

+:cyrus:104:8:/var/spool/cyrus:-::

В данном случае 104 и 8 - uid и gid пользователя cyrus в моей системе. В домашнем каталоге этого пользователя создаем файл .qmail-default с единственной строчкой

|preline -fr deliver -r "$SENDER" -m INBOX -- $DEFAULT

Задача решена. Ну, почти решена. Команда preline из пакета qmail дополнит заголовок сообщения строкой Delivered-To:, содержащей получателя из конверта (envelope recipient). Без флагов -fr она добавила бы также Return-Path: (отправитель из конверта) и строку From, пришедшую из эпохи UUCP и ныне разделяющую письма в стандарном UNIX mailbox. Почему бы не добавить Return-Path:? Дело в том, что программа deliver добавит точно такую же строку, но, если не указать иного, сформирует ее по своему: возьмет имя текущего пользователя и имя текущего хоста. Текущий пользователь в данном случае cyrus, так что на машине mail.example.com вы всегда получите в заголовке любого письма

Return-Path: <cyrus@mail.example.com>

Информация об изначальном отправителе будет потеряна. Поэтому с помощью параметра -r и переменной окружения $SENDER, устанавливаемой qmail-local, сохраняется исходный отправитель.

В моем случае новая почта всегда доставляется в папку "Входящие", об этом говорит параметр -m INBOX. Переменная $DEFAULT - имя почтового ящика, которое у меня совпадает именем пользователя Cyrus-IMAP. Если у вас не совпадает, нужно поправить usertable (см. man qmail-users).

А как поместить письмо в общую папку, скажем office? Так же просто. Если этой папке соответствует адрес office@example.com, просто добавьте в домашний каталог cyrus файл .qmail-office, содержащий строку

|preline -fr cyrdeliver -r "$SENDER" -m office

Следующий этап - подружить qmail и UUCP, а также UUCP и Microsoft Exchange. Когда справлюсь, расскажу.
 
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Профиль

waspagv: (Default)
DCS Foyle

March 2025

M T W T F S S
     12
3456789
10111213141516
17181920212223
242526272829 30
31      

Style Credit

Expand Cut Tags

No cut tags
Page generated 14/07/2025 08:17
Powered by Dreamwidth Studios