Здравствуйте, помогите пожалуйста решить проблему.На сервере установлен Exim и Dovecot.
Новая почта, которая приходит, автоматически падает в один и тот же файл: /var/spool/mail/sairus
При получении почты, dovecot ругается: Couldn't open INBOX: Internal error occurred. Refer to server log for more information.
В логах тоже ничего не понятно:
dovecot: Jun 12 00:21:38 Error: POP3(sairus): stat(/var/spool/mail/sairus/cur) failed: Not a directory
dovecot: Jun 12 00:21:38 Error: POP3(sairus): Couldn't open INBOX: Internal error occurred. Refer to server log for more information. [2011-06-12 00:21:38]В конфиге dovecot.conf
прописано:
mail_location = maildir:/var/spool/mail/%u
Обьясните, почему ругается dovecot, а также почему вся почта падает в один файл и где именно настраивается, чтобы в разные директории.
Очень надеюсь на вашу помощь, т.к. больше почерпнуть информации просто не откуда.
заменилmail_location = maildir:/var/spool/mail/%u
наdefault_mail_env = mbox:/var/mail/%u:INBOX=/var/mail/%u:INDEX=/var/mail/%u
Создались папки cur new и tmp в папке /var/spool/mail, ошибку не выдает.команда list (через телнет)
list
+OK 0 messages:Собственно как связать exim с dovecot чтобы один писал в папку определенную, а второй оттуда читал.
> Собственно как связать exim с dovecot чтобы один писал
> в папку определенную, а второй оттуда читал.МТА занимается маршрутизацией почт, и локальное деливери - не его ума дело. Экзим умеет класть почту в локальный ящик (LDA), но гораздо правильнее эту работу поручить довекоту, которому потом эту почту читать.
Заведите отдельного безлогинного юзера в системе, которому будет принадлежать вся почта. Например, postman с уидом=20000 и гидом=20000
В конфиг экзима добавьте транспорт:
dovecot_lda:
driver = pipe
command = /usr/local/libexec/dovecot/deliver -d $local_part@$domain -f $sender_address
user = postman
log_outputВ роутере, обрабатывающем локальную почту, пропишите транспортом довекот_лда.
В конфиге довекота прописываем статический юзердб:
userdb static {
args = uid=postman gid=postman home=/var/mail/%d/%n
}Все. С этого момента экзим для укладки в ящики будет отдавать письма довекоту, который будет их класть от имени postman и читать от него же.
Мейлдирам самое место в вар/мейле:
mail_location = maildir:/var/mail/%d/%n
Каталог /var/mail должен быть с правами 777, довекот внутри сам создаст структуру уже с правами постмена.
Спасибо большое за обьяснение! Подобное видел, но не знал как это работает и зачем, благодаря Вам вроде бы разобрался.!
> Спасибо большое за обьяснение! Подобное видел, но не знал как это работает
> и зачем, благодаря Вам вроде бы разобрался.!Статический юзердб - это простейший вариант. Можно из базы выдергивать данные, но при этом уид/гид подставлять нужные. У меня виртуальные юзеры лежат в мускле, там же хранятся квоты на ящики, статусы активности и прочая. А извлекаю я их вот так:
-----------------------------------------------------------------
userdb sql {
args = /usr/local/etc/dovecot/dovecot.sql
}
-----------------------------------------------------------------
user_query = SELECT `home`, 1000 AS `uid`, 1000 AS `gid`, \
CONCAT("*:bytes=",quota) AS quota_rule \
FROM `mailbox` WHERE `username` = '%n@%d' AND `active`='1'
-----------------------------------------------------------------Идея та же: с майлдирами работает только довекот и только от одного юзера. Мануал довекота не рекомендует для этого использовать юзеров dovecot или dovenull, а предлагает завести совсем отдельного.
настроил так как подсказали, но после отправки приходит письмо от Mail Delivery System:local delivery failed
Как я только не пробовал, что не подставлял, то ругается на права, то dovecot вырубается при проверке почты. А теперь письмо вот приходит.Я вообще пытаюсь делать все в статике, база мне не нужна (мало пользователей - личная почта только)
Скажите, а можно связать dovecot так, чтобы он читал тот 1 файл, который по умолчанию создается в папке /var/mail с именем пользователя.
И если не трудно, подскажите что означает mbox, INBOX, INDEX в строчке:
mail_location = mbox:/var/mail/%n:INBOX=/var/mail/%n:INDEX=/var/mail/%n
Для чего они используются и какие значения должны быть.
Спасибо.
Наверное так будет проще: выложу конф файлы, а Вы уж пинайте меня за ошибки...### DOVECOT CONF ###
base_dir = /var/run/dovecot/
protocols = imap pop3
listen = *disable_plaintext_auth = no
shutdown_clients = yes
ssl_disable = yeslog_path = /var/log/dovecot.log
info_log_path = /var/log/dovecot-info.log
log_timestamp = "%b %d %H:%M:%S "
syslog_facility = maillogin_dir = /var/run/dovecot/login
login_user = dovecotlogin_process_size = 64
login_process_per_connection = yes
login_processes_count = 3
login_max_processes_count = 64
login_max_connections = 100
login_greeting = I am ready, sir.login_log_format_elements = user=<%u> method=%m rip=%r lip=%l %c
login_log_format = %$: %smail_location = maildir:/var/mail/%d/%n
first_valid_uid = 25
first_valid_gid = 0
umask = 0077
protocol imap {
}protocol pop3 {
pop3_uidl_format = %08Xu%08Xv
}protocol lda {
postmaster_address = admin@****
auth_socket_path = /var/run/dovecot/auth-master
}
auth default {
mechanisms = plain
socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0600
user = mailnull
}
}passdb passwd-file {
args = /etc/dovecot.passwd
}userdb static {
args = uid=vmail gid=vmail home=/var/mail/%d/%n
}user = root
}plugin {
}
Фрагмент от
####EXIM####begin routers
dnslookup:
driver = dnslookup
domains = ! +local_domains
transport = remote_smtp
ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
no_more
system_aliases:
driver = redirect
allow_fail
allow_defer
data = ${lookup{$local_part}lsearch{/etc/aliases}}
file_transport = address_file
pipe_transport = address_pipeuserforward:
driver = redirect
check_local_user
file = $home/.forward
allow_filter
no_verify
no_expn
check_ancestor
file_transport = address_file
pipe_transport = address_pipe
reply_transport = address_replylocaluser:
driver = accept
check_local_user
#transport = local_delivery
transport = dovecot_delivery
cannot_route_message = Unknown user
######################################################################
# TRANSPORTS CONFIGURATION #
######################################################################
# ORDER DOES NOT MATTER #
# Only one appropriate transport is called for each delivery. #
######################################################################
begin transportsremote_smtp:
driver = smtplocal_delivery:
driver = appendfile
file = /var/mail/$local_part
delivery_date_add
envelope_to_add
return_path_add
group = mailaddress_pipe:
driver = pipe
return_outputaddress_file:
driver = appendfile
delivery_date_add
envelope_to_add
return_path_add
mode = 0660
address_reply:
driver = autoreply
dovecot_delivery:
driver = pipe
command = /usr/local/libexec/dovecot/deliver -d $local_part@$domain
message_prefix =
message_suffix =
delivery_date_add
envelope_to_add
return_path_add
log_output
user = vmail
> выложу конф файлы, а Вы уж пинайте меня за ошибки...
> Фрагмент от
> ####EXIM####
> dovecot_delivery:
> driver = pipe
> command = /usr/local/libexec/dovecot/deliver -d $local_part@$domain
> user = vmailНе хватает опции "-f $sender_address" в команде вызова.
Эта опция крайне важна, поскольку на этот адрес отправителю будут слаться баунсы, уведомления, автореплаи и т.д. Если ее не указать, то отправитель никогда не узнает, что при доставке в локальный ящик что-то не срослось.
> Скажите, а можно связать dovecot так, чтобы он читал тот 1 файл,
> который по умолчанию создается в папке /var/mail с именем пользователя.
> И если не трудно, подскажите что означает mbox, INBOX, INDEX в строчке:
> mail_location = mbox:/var/mail/%n:INBOX=/var/mail/%n:INDEX=/var/mail/%nСуществуют разные типы хранилищ, используемые для почтовых ящиков. Исторически самый древний - мейлбокс (mbox), когда все письма аппендятся в один файл с именем пользователя. При этом при большом количестве писем становятся очень большими накладные расходы на удаление писем и поиск письма в общей братской могиле. Для обхода затыков хранилища можно ставить костыли, вроде построения отдельного индекса. Но это костыли имени довекота, сам по себе мейлбокс никаких индексов не имеет.
Гораздо прогрессивнее мейлдир, когда вместо одного файла есть каталог, в котором каждое письмо хранится отдельным файлом. При этом появляется возможность структурировать каталог на подкаталоги, строить индексы для поиска и т.д. Это все уже входит в базовую конструкцию мейлдира, и отдельной настройки не требует. Правда, тогда возникает проблема множества мелких файлов, что усложняет тюнинг файловой системы и бекап. Но незначительно, по сравнению с выигрышем в остальном.
В общем, даже если на сервере не поднимается массовый почтовый сервис, а обслуживается всего 5-10-20 ящиков, мейлдир все равно предпочтительней мейлбокса. Если у вас все равно для кого-то из юзеров создается мейлбокс, значит у вас роутер довекот_лда находится после роутера, который этот мейлбокс создает.
Я практикую следующую схему роутинга: сначала идут все роутеры с редиректами (обработка алиасов), а затем - роутеры с аксептами (ЛДА), причем довекот_лда идет первым, а прочие выполняются лишь тогда, когда довекот не справился.