Перевод выполнен Алексеем Паутовым в рамках
некоммерческого проекта RussianLDP
(http://www.rldp.ru/). Именно на этом сайте
и надлежит искать новые версии, если таковые будут.
26. Транспорт appendfile
Транспорт appendfile доставляет
сообщения путём добавления его к существующему файлу или путём создания
нового файла в заданном каталоге. Отдельные файлы, к которым добавляются
сообщения, могут быть в традиционном формате UNIX mailbox или, опционально, в
формате MBX, поддерживаемом Pine MUA и демоном University of Washington IMAP
(его поддерживают и другие). Когда каждое сообщение доставляется в отдельный
файл, может использоваться, опционально, формат maildir
для дополнительной защиты от ошибок при доставке. Также поддерживается третья
форма доставки в отдельные файлы, известная как mailstore. Для всех этих
форматов exim, в случае необходимости, пытается создать необходимое число
уровней каталогов при условии, что установлена опция create_directory.
Код для опциональных форматов по
умолчанию не включен в бинарный файл exim. Для включения соответствующего
кода, необходимо в Local/Makefile установить SUPPORT_MBX,
SUPPORT_MAILDIR и/или SUPPORT_MAILSTORE.
Exim распознаёт ошибки системной квоты,
и генерит соответствующее сообщение. Также он поддерживает собственное
управление квотами в транспорте, для использования когда системные
средства недоступны, или по каким-то
причинам не могут использоваться.
Если ошибка происходит при добавлении к файлу
(например, превысилась квота или заполнился раздел), exim пытается сбросить
длину и время последней модификации назад к тем, что были прежде.
Если ошибка происходит при создании нового файла, файл удаляется.
До добавления к файлу выполняется множество проверок
безопасности, и файл блокируется. Детальное описание дано ниже,
после списка частных опций.
Обычно, транспорт appendfile
используется для локальной доставки в пользовательские ящики.
Однако, он также может использоваться как псевдо-удалённый транспорт для
раскладывания сообщений в файлы, для удалённой доставки другими
средствами, кроме exim. В этом случае часто используется формат пакетного
SMTP (смотрите опцию use_bsmtp).
26.1 Опции file и directory
Опция file определяет единичный файл, к которому
добавляются сообщения, опция directory
определяет каталог, в котором создаётся новый файл, содержащий сообщение.
Может быть задана лишь одна из этих двух опций, и для нормальной доставки в
почтовые ящики одна из них должна быть установлена.
Однако, appendfile также используется для
доставки сообщений в файлы или в каталоги, имена которых (или части имён)
получаются из алиасов, форвардинга или операций фильтрации (например, команды
save в пользовательском фильтре exim). Когда выполняется такой
транспорт, $local_part содержит локальную часть, которая алиасится или
форвардится, и $address_file содержит имя (или часть имени)
файла или каталога, сгенерированное операцией перенаправления.
Есть два случая:
- Если не установлены ни file, ни directory,
операция перенаправления должна определить абсолютный путь
(тот, который начинается с /). Это большинство общих случаев, когда
пользователи с локальными аккаунтами используют фильтрацию для
сортировки почты по различным каталогам. Смотрите, для примера, транспорт
address_file в конфигурации по умолчанию.
Если путь завершается слэшем, предполагается, что это имя каталоге.
Доставка в каталог может быть вызвана путём установки
maildir_format или mailstore_format.
- Если file или directory установлены для доставки от
переназначения (редиректа), она используется для определения имени
файла или каталога для доставки.
Обычно содержимое $address_file используется каким-то
образом в раскрытии строки.
Как пример второго случая, рассмотрите окружение где
пользователи не имеют домашних каталогов. Им можно разрешить использование
команды фильтра exim в форме:
или команды фильтра Sieve в форме:
require "fileinto";
fileinto "folder23";
|
В этой ситуации раскрытие file или
directory в транспорте должно преобразовать относительный
путь в соответствующее абсолютное имя файла. В случае фильтров Sieve должно
быть обработано имя inbox. Это имя, используемое в качестве результата
действия keep (сохранить) в фильтре. Этот пример показывает один способ
обработать это требование:
file = ${if eq{$address_file}{inbox} \
{/var/mail/$local_part} \
{${if eq{${substr_0_1:$address_file}}{/} \
{$address_file} \
{$home/mail/$address_file} \
}} \
}
|
С этой установкой опции file, inbox
ссылается на стандартное расположение почтового ящика, абсолютные пути
используются без изменения, а другие папки находятся в каталоге
mail внутри домашнего каталога.
Замечание 1: При обработке в фильтре exim
относительный путь, типа folder23, превращается в абсолютный,
если роутеру известен домашний каталог. В частности, так обстоят дела,
если установлена опция check_local_user.
Если Вы хотите предотвратить это во время маршрутизации, Вы должны установить
router_home_directory в пустое значение. Это вынуждает маршрутизатор
передавать транспорту относительный путь.
Замечание 2: Абсолютный путь в $address_file
не обрабатывается как-то особенно: продолжает использоваться опция
file или directory, если она установлена.
26.2. Частные опции для appendfile
Имя | Использование |
Тип | Значение по умолчанию |
allow_fifo | appendfile | boolean |
ложь |
Установка этой опции позволяет доставлять в
именованные каналы (или FIFO) точно так же, как и в обычные файлы.
Если во время доставки отсутствует процесс, читающий
канал, доставка задерживается.
Имя | Использование |
Тип | Значение по умолчанию |
allow_symlink | appendfile | boolean |
ложь |
По умолчанию appendfile не доставляет,
если имя пути к файлу будет символической ссылкой.
Установка этой опции смягчает это ограничение, но существуют проблемы
безопасности, связанные с использованием симлинков. Убедитесь, что Вы знаете,
что делаете при установке этой опции. Точные детали того,
что затрагивает эта опция, находятся в обсуждении,
следующим за этим списком опций.
Имя | Использование |
Тип | Значение по умолчанию |
batch_id | appendfile | string† |
не задана |
Смотрите описание пакетной локальной доставки в разделе
25. Однако, пакетная доставка автоматически
отключается для доставок appendfile, происходящих как результат
форвардинга, алиасинга или других переназначений прямо в файл.
Имя | Использование |
Тип | Значение по умолчанию |
batch_max | appendfile | integer |
1 |
Смотрите описание пакетной локальной доставки в разделе
25.
Имя | Использование |
Тип | Значение по умолчанию |
check_group | appendfile | boolean |
ложь |
Когда эта опция установлена, проверяется
группа владельца файла, заданного опцией file, для удостоверения, что
это та же самая группа, под которой выполняется процесс доставки.
Настройка по умолчанию: ложь, поскольку режим по умолчанию 0600, что
означает, что группа не имеет значения.
Имя | Использование |
Тип | Значение по умолчанию |
check_owner | appendfile | boolean |
истина |
Когда эта опция установлена, проверяется владелец файла,
заданного опцией file, для удостверения, что он
тот же самый, под которым выполняется процесс доставки.
Имя | Использование |
Тип | Значение по умолчанию |
check_string | appendfile | string |
смотрите ниже |
Поскольку appendfile записывает сообщение,
начало каждой строки проверяется на совпадение с check_string,
и если оно происходит, совпавшие начальные символы заменяются на
содержимое escape_string. Значение check_string литеральная строка, а не
регулярное выражение, и регистр содержащихся букв имеет значение.
Если установлена use_bsmtp, значения
check_string и escape_string принудительно устанавливаются
в . и .., соответственно, и любые конфигурационные настройки игнорируются.
Иначе, у них значения по умолчанию From и From, когда задана опция
file, и не заданы, когда установлена любая из опций
directory, maildir или mailstore.
Настройки по умолчанию, наряду с message_prefix и
message_suffix, являются подходящими для традиционных почтовых ящиков
BSD, где строка, начинающаяся с From, индицирует начало нового сообщения.
Все четыре опции нуждаются в изменении, если используется иной формат.
Например, для доставки в почтовые ящики в формате MMDF:
check_string = "\1\1\1\1\n"
escape_string = "\1\1\1\1 \n"
message_prefix = "\1\1\1\1\n"
message_suffix = "\1\1\1\1\n"
|
Имя | Использование |
Тип | Значение по умолчанию |
create_directory | appendfile | boolean |
истина |
Когда эта опция истинна, exim пытается создать
любые недостающие вышестоящие каталоги для файла, в который
собирается производить запись. Режим созданного каталога
задаётся опцией directory_mode.
Владелец группы созданного каталога сильно
зависит от используемой операционной (и, возможно, файловой) системы.
Например, в Solaris, если родительский каталог имеет установленный бит
setgid, его группа передаётся дочернему каталогу, а если нет, используется
текущая установленная группа. Однако, в FreeBSD всегда
используется родительская группа.
Имя | Использование |
Тип | Значение по умолчанию |
create_file | appendfile | string |
anywhere |
Эта опция ограничивает местоположение
файлов и каталогов, создаваемых этим транспортом. Это применяется к файлам,
заданным опцией file и каталогам, заданным опцией directory.
В случае доставки maildir, это применяется к каталогм верхнего уровня, а не к
нижележащим каталогм maildir.
Опция должна быть установлена в одно
из слов anywhere, inhome или belowhome. Во втором и третьем случае для
транспорта должен быть установлен домашний каталог. Эта опция бесполезна,
когда задаётся явное имя файла для обычной доставки в почтовые ящики.
Она предназначена для случая, когда имя файла генерируется из
пользовательских файлов .forward. Обычно они обрабатываются
транспортом appendfile, вызыванным address_file.
Также смотрите опцию file_must_exist.
Имя | Использование |
Тип | Значение по умолчанию |
directory | appendfile | string† |
не задана |
Эта опция взаимоисключающая с опцией file, но одна из опций file или
directory должна быть задана, исключая случай доставки как результата
перенаправления (смотрите раздел 26.1).
Когда задана опция directory,
строка раскрывается, и сообщение доставляется в новый файл или файлы,
или в подкаталог данного каталога, вместо добавления к единственному
файлу почтового ящика. Поддерживается несколько различных форматов
смотрите опции maildir_format и mailstore_format и раздел
26.4, для дальнейших деталей об
этой форме доставки.
Имя | Использование |
Тип | Значение по умолчанию |
directory_file | appendfile | string† |
q${base62:$tod_epoch}-$inode |
Когда установлена опция directory, но
не установлены ни maildir_format, ни mailstore_format,
appendfile доставляет каждое сообщение в файл, имя которого получается
в результате раскрытия строки этой опции. Значение по умолчанию генерирует
уникальное имя из текущего времени в форме base 62 и индекса файла.
Переменная $inode доступна лишь при раскрытии этой опции.
Имя | Использование |
Тип | Значение по умолчанию |
directory_mode | appendfile | octal integer |
0700 |
Если appendfile создаёт какие-либо каталоги
как результат опции create_directory, их режим задаётся этой опцией.
Имя | Использование |
Тип | Значение по умолчанию |
escape_string | appendfile | string |
смотрите описание |
Смотрите выше опцию check_string.
Имя | Использование |
Тип | Значение по умолчанию |
file | appendfile | string† |
не задана |
Эта опция взаимоисключающая с опцией
directory, но одна из опций file или directory
должжна быть задана, исключая случай доставки как результата перенаправления
(смотрите раздел 26.1).
Опция file определяет единичный файл, к которому добавляется сообщение.
Одна и более из опций use_fcntl_lock, use_flock_lock или
use_lockfile должны быть заданы с опцией file.
Если Вы используете более одного хоста
для доставки через NFS в одни и те же почтовые ящики, Вы всегда должны
использовать файлы блокировки.
Значение строки раскрывается для каждой доставки и должно
привести к абсолютному пути. Самые общие установки этой опции вариации одного
из этих примеров:
file = /var/spool/mail/$local_part
file = /home/$local_part/inbox
file = $home/inbox
|
В первом примере все доставки осуществляются в один и
тот же каталог. Если exim сконфигурирован использовать файлы блокировки
(смотрите ниже опцию use_lockfile), он должен быть в состояниии
создать файл в каталоге, таким образом, липкий (sticky) бит должен быть
включен для возможности доставки или, альтернативно, может использоваться
опция group для выполнения доставки под групповым идентификатором,
имеющим доступ к каталогу.
Имя | Использование |
Тип | Значение по умолчанию |
file_format | appendfile | string |
не задана |
Эта опция просит транспорт проверить
формат существующего файла до добавления к нему. Проверка состоит из
соответствия специфической строке в начале файла. Значение опции состоит из
чётного числа строк, разделённых двоеточиями. Первая из каждой пары
проверочная строка, а вторая имя транспорта.
Если транспорт, ассоциированный с совпавшей строкой, не является текущим
транспортом, управление передаётся другому транспорту.
Например, предположим что к стандартному транспорту
local_delivery добавлено это:
file_format = "From : local_delivery :\
\1\1\1\1\n : local_mmdf_delivery"
|
Почтовые ящики, начинающиеся с From,
продолжают обрабатываться этим транспортом, но почтовые ящики, начинающиеся с
четырёх двоичных единиц с символом новой строки, управляютя транспорту,
называемому local_mmdf_delivery, который, видимо, сконфигурирован
для осуществления доставки в формате MMDF. Если почтовый ящик
не существует или пуст, предполагается совпадение с текущим транспортом.
Если начало почтового ящика не совпадает ни с одной строкой,
или не задан транспорт, чьё имя совпало, доставка задерживается.
Имя | Использование |
Тип | Значение по умолчанию |
file_must_exist | appendfile | boolean |
ложь |
Если эта опция истинна, файл заданный опцией file
должен существовать, и происходит ошибка, если это не так.
Если она не задана, в случае его отсутствия, он создаётся.
Имя | Использование |
Тип | Значение по умолчанию |
lock_fcntl_timeout | appendfile | time |
0s |
По умолчанию транспорт appendfile
использует не блокирующие вызовы fcntl() при блокировке
открытого файла почтового ящика. Если вызов неудачен, процесс
доставки засыпает на lock_interval и пробует снова, до времени lock_retries.
Неблокирующие вызовы используются так, чтобы файл не оставлялся открытым в
ожидании блокировки. Причина этого заключается в желании сделать это
безопасным насколько возможно для доставок через NFS в случае, когда
процессы могли бы обращаться к почтовому ящику NFS без
использования файла блокировки. Этого не должно быть,
но недоразумения, и, следовательно, просчёты конфигурации неизвестны.
На загруженных системах, однако, производительность
не блокирующей блокировки не столь хороша,
как использование блокирующей блокировки с таймаутом.
В этом случае ожидание делается в системном вызове,
и процесс доставки exim овладевает блокировкой и может обработать,
как только предыдущий держатель блокировки снимет её.
Если lock_fcntl_timeout
установлена в ненулевое время, блокировка блокируется с
использованием этого таймаута. Всё ещё может быть некоторое повторение:
максимальное число повторений
(lock_retries * lock_interval) / lock_fcntl_timeout
|
округляется к следующему целому числу. Другими словами, полное время, в
течение которого appendfile пробует получить блокировку,
примерно то же самое, если lock_fcntl_timeout
не установлена слишком большой.
Вы должны рассмотреть установку этой опции, если Вы
получаете много отсроченных локальных доставок из-за ошибок вида:
failed to lock mailbox /some/file (fcntl)
|
Имя | Использование |
Тип | Значение по умолчанию |
lock_flock_timeout | appendfile | time |
0s |
Этот таймаут применяется к блокировке файла, когда
используется flock() (смотрите use_flock). Таймаут работает в манере,
похожей на lock_fcntl_timeout.
Имя | Использование |
Тип | Значение по умолчанию |
lock_interval |
appendfile | time | 3s |
Эта опция определяет время ожидания между
попытками блокировки файла.
Смотрите ниже для дополнительных деталей о блокировке.
Имя | Использование |
Тип | Значение по умолчанию |
lock_retries | appendfile | integer |
10 |
Эта опция определяет максимальное число
попыток блокировки файла. Значение нуля обрабатывается как единица.
Смотрите ниже для дополнительных деталей о блокировке.
Имя | Использование |
Тип | Значение по умолчанию |
lockfile_mode |
appendfile | octal integer |
0600 |
Эта опция определяет режим создаваемого файла блокировки,
когда используется файл блокировки
(смотрите опции use_lockfile и use_mbx_lock).
Имя | Использование |
Тип | Значение по умолчанию |
lockfile_timeout |
appendfile | time | 30m |
Когда используется файл блокировки
(смотрите опцию use_lockfile), если файл блокировки уже существует
и он старше этого значения, предполагается, что он был случайно оставлен,
и exim пытается его удалить.
Имя | Использование |
Тип | Значение по умолчанию |
mailbox_filecount |
appendfile | string† | не задана |
Если эта опция установлена, она раскрывается, и
результат берётся как текущее число файлов в почтовом ящике.
Это должно быть десятичное число, опционально сопровождаемое K или M.
Этим предоставлятся способ получить информацию из
внешнего источника, обслуживающего данные.
Имя | Использование |
Тип | Значение по умолчанию |
mailbox_size | appendfile | string† |
не задана |
Если эта опция задана, она раскрывается,
и результат берётся как текущий размер почтового ящика.
Это должно быть десятичное число, опционально сопровождаемое K или M.
Этим предоставлятся способ получить информацию из внешнего
источника, обслуживающего данные. Это, вероятно, будет
полезным для доставок maildir, где, в вычислительном отношении,
дорого вычислять размер почтового ящика.
Имя | Использование |
Тип | Значение по умолчанию |
maildir_format | appendfile | boolean |
ложь |
Если эта опция задана с опцией directory,
доставка в новый файл в формате maildir, используемом
другими почтовыми программами. Когда транспорт активизирован
непосредственно от роутера redirect (например, транспорт address_file
в конфигурации по умолчанию), установка maildir_format
вызывает обработку пути, переданного из роутера как каталога,
вне зависмости, завершается или нет он на /. Эта опция доступна, лишь если в
Local/Makefile присутствует SUPPORT_MAILDIR.
Для получения дополнительных деталей смотрите раздел
26.5.
Имя | Использование |
Тип | Значение по умолчанию |
maildir_quota_directory_regex |
appendfile | string | смотрите ниже |
Эта опция уместна лишь если установлена
maildir_use_size_file. Она определяет регулярное выражение,
для определения каталогов относительно каталога квоты (смотрите
quota_directory), которая должна быть включена в подсчёт квоты.
Значение по умолчанию:
maildir_quota_directory_regex = ^(?:cur|new|\..*)$
|
Этим включаются каталоги cur и new,
и любые каталоги maildir++ (каталоги, чьи имена начинаются с точки).
Если Вы хотите исключить из подсчёта каталог Trash
(как делают некоторые сайты), Вы должны изменить эту установку на:
maildir_quota_directory_regex = ^(?:cur|new|\.(?!Trash).*)$
|
Это использует отрицательное предвидение в
регулярном выражении для исключения каталога с именем .Trash.
Когда каталог исключен из подсчёта квоты, обработка квоты пропускается для
любых сообщений, доставляемых в этот каталог.
Имя | Использование |
Тип | Значение по умолчанию |
maildir_retries | appendfile | integer |
10 |
Эта опция определяет число повторов при записи
файла в формате maildir. Смотрите ниже раздел
26.5.
Имя | Использование |
Тип | Значение по умолчанию |
maildir_tag | appendfile | string† |
не задана |
Эта опция применяется лишь к доставкам в
формате maildir, и она описана ниже в разделе
26.5.
Имя | Использование |
Тип | Значение по умолчанию |
maildir_use_size_file |
appendfile | boolean | ложь |
Установка этой опции в истину включает
поддержку файлов maildirsize. Exim создаёт файлы
maildirsize в maildir, если они не существуют,
беря квоту из опции quota транспорта. Если квота не задана,
значение равно нулю. Смотрите maildir_quota_directory_regex,
выше и раздел 26.5
для получения дополнительных деталей.
Имя | Использование |
Тип | Значение по умолчанию |
maildirfolder_create_regex |
appendfile | string | не задана |
Значение этой опции представляет
собой регулярное выражение. Если оно не задано,
опция не имеет никакого эффекта. Иначе, до доставки maildir,
выражение сравнивается с именем каталога maildir,
то есть, каталога, содержащего субкаталоги new и tmp,
которые будут использоваться для доставки. Если есть соответствие,
exim проверяет существование файла с именем maildirfolder
в каталоге и создаёт его, если он не существует.
Для получения дополнительных деталей, смотрите раздел
26.5.
Имя | Использование |
Тип | Значение по умолчанию |
mailstore_format | appendfile | boolean |
ложь |
Если эта опция установлена вместе с опцией
directory, доставка осуществляется в два новых
файла в формате mailstore. Эта опция доступна лишь в случае,
если при сборке exim в Local/Makefile была опция SUPPORT_MAILSTORE.
Для получения дополнительных деталей смотрите раздел
26.4.
Имя | Использование |
Тип | Значение по умолчанию |
mailstore_prefix | appendfile | string† |
не задана |
Эта опция применяется только к
доставкам в формате mailstore,
и она описана ниже в разделе 26.4.
Имя | Использование |
Тип | Значение по умолчанию |
mailstore_suffix | appendfile | string† |
не задана |
Эта опция применяется только к
доставкам в формате mailstore,
и она описана ниже в разделе 26.4.
Имя | Использование |
Тип | Значение по умолчанию |
mbx_format | appendfile | boolean |
ложь |
Эта опция доступна лишь в случае, если при сборке exim в
Local/Makefile была опция SUPPORT_MBX. Если опция mbx_format
установлена с опцией file, сообщение добавляется к почтовому ящику в
формате MBX вместо формата, традиционного UNIX. Этот формат поддерживается
Pine4 и связан с его POP3 и IMAP-демонами путём используемой всеми
ими c-client библиотеки.
Отметьте: Опции message_prefix и
message_suffix не меняются автоматически при
использовании mbx_format.
Обычно, при использовании формата MBX, они должны устанавливаться пустыми,
таким образом, эта опция почти всегда появляется в такой комбинации:
mbx_format = true
message_prefix =
message_suffix =
|
Если в конфигурации не упомянута ни одна из опций
блокировки, предполагается use_mbx_lock, а другие опции блокировки
по умолчанию ложны. С mbx_format возможно определить другие виды
блокировок, но use_fcntl_lock и use_mbx_lock являются взаимоисключающими.
Блокировка MBX взаимодействует с c-client, предоставляя
общий доступ к почтовому ящику. Она не должна использоваться, если любая иная
программа, не использующая эту форму блокировки, собирается обращаться к
этому почтовому ящику, или если почтовый ящик находится на файловой
системе, смонтированной по NFS, поскольку она работает лишь, когда к
почтовому ящику обращаются с одного хоста.
Если Вы устанавливаете use_fcntl_lock
с почтовыми ящиками в формате MBX, Вы не можете использовать станадартную
версию c-client, поскольку пока есть открытый ящик (это бывает при
сессии Pine или IMAP), exim не в состоянии добавить к нему сообщение.
Имя | Использование |
Тип | Значение по умолчанию |
message_prefix | appendfile | string† |
смотрите ниже |
Строка, заданная в этом пункте, раскрывается и выводится в
начале каждого сообщения. По умолчанию она не задана, если не определена
опция file, и не установлена use_bsmtp, когда она:
message_prefix = "From ${if def:return_path{$return_path}\
{MAILER-DAEMON}} $tod_bsdinbox\n"
|
Имя | Использование |
Тип | Значение по умолчанию |
message_suffix | appendfile | string† |
смотрите ниже |
Строка, заданная в этом пункте, раскрывается и выводится в
конце каждого сообщения. По умолчанию она не задана, если не определена
опция file и не установлена use_bsmtp, в этих случаях она
состоит из единственного символа новой строки.
Суффикс может быть подавлен путём установки:
Имя | Использование |
Тип | Значение по умолчанию |
mode | appendfile | octal integer |
0600 |
Если создаётся файл вывода, на него
устанавливается такой режим. Если он существует и на него установлены более
широкие разрешения, они уменьшаются до указанного в этой опции. Если на него
установлены более жёсткие ограничения, то происходит ошибка, если неложна
опция mode_fail_narrower. Однако, если доставка является
результатом команды save в файле фильтра, задающей особый режим,
то режим выходного файла всегда принудительно
приводится к этому значению, и эта опция игнорируется.
Имя | Использование |
Тип | Значение по умолчанию |
mode_fail_narrower |
appendfile | boolean | истина |
Эта опция применяется в случае, когда существующий
файл почтового ящика имеет более строгие ограничения,
чем заданные опцией mode. Если опция mode_fail_narrower
истинна, доставка задерживается (mailbox has the wrong mode).
Иначе exim продолжает попытки достаки, используя существующий режим файла.
Имя | Использование |
Тип | Значение по умолчанию |
notify_comsat | appendfile | boolean |
ложь |
Если эта опция истинна, демон comsat
уведомляется после каждой успешной доставки в
пользовательский почтовый ящик. Это демон, который уведомляет залогиненых
пользователей о пришедшей почте.
Имя | Использование |
Тип | Значение по умолчанию |
quota | appendfile | string† |
не задана |
Эта опция налагает ограничения на
размер файла, к которому exim добавляет
сообщение, или на полный размер, используемый деревом каталогов, когда
установлена опция directory. В последнем случае вычисление
используемого места дорого стоит, поскольку должны быть индивидуально
осмотрены и просуммированы все файлы в каталоге (и любых субкаталогах).
Смотрите quota_size_regex и maildir_use_size_file
для способов избежать этого в окружении, где пользователи не имеют
shell-доступа к своим почтовым ящикам. Нет блокировки от двух одновременных
доставок в многофайловый почтовый ящик, и в этом случае
возможно превышение квоты. Для однофайловых почтовых ящиков,
разумеется, блокировка необходима.
Размер файла берётся как
его используемое значение. Из-за эффектов блокировки, оно может быть
намного меньше дискового пространства, фактически используемого файлом.
Если складываются размеры большого числа файлов, эффект округления
может стать весьма заметным, особенно на системах, использующих
большой размер блока. Однако, кажется лучше придерживаться
используемого числа, поскольку оно очевидное значение, наиболее
легко понимаемое пользователями.
Значение опции раскрывается и должно быть числовым
значением (разрешена десятичная точка), опционально сопровождаемым
одной из букв K, M, или G: для килобайт, мегабайт или гигабайт.
Если exim работает на системе с поддержкой больших файлов
(FreeBSD и Linux имеют такую поддержку), могут быть обработаны
ящики более 2G размером.
Отметьте: Значение нуля интерпретируется как "нет квоты".
Раскрытие происходит, когда exim работает
как root, до того, как он для доставки меняет uid. Это означает, что для
содержания квоты, которая ищется в раскрытии, можно использовать файлы,
которые недоступны конечному пользователю. При неудаче доставки по причине
превышения квоты, ошибка обрабатывается как ошибка системной квоты.
По умолчанию проверка квоты exim подражает системным
квотам и ограничивает почтовый ящик заданным максимальным размером, хотя
значение не является точным до последнего байта, из-за строк разделителей и
дополнительных заголовков, которые могут добавляться при доставке сообщения.
Когда почтовый ящик почти полный, большие сообщения могут быть отклонены, а
маленькие приняты, поскольку размер текущего сообщения добавляется к квоте
при проверке. Это поведение может быть изменено путём установки
quota_is_inclusive в ложь. Когда это сделано, проверка на превышение
квоты не включает текущее сообщение. Таким образом, доставки продолжаются до
превышения квоты, после этого никакие последующие сообщения не доставляются.
Также смотрите опцию quota_warn_threshold.
Имя | Использование |
Тип | Значение по умолчанию |
quota_directory |
appendfile | string† |
не задана |
Эта опция задаёт каталог для проверки квоты при
доставке в отдельные файлы. По умолчанию это каталог для доставки или, если в
maildir-каталоге существует файл с именем maildirfolder,
родительский каталог, по отношению к каталогу для доставки.
Имя | Использование |
Тип | Значение по умолчанию |
quota_filecount |
appendfile | string† | 0 |
Эта опция применяется, когда установлена опция directory.
Она ограничивает общее число файлов в каталоге (сравните с лимитом
на число файлов в системных квотах). Она может использоваться, лишь когда
установлена опция quota. Значение раскрывается: ошибка доставки
вызывает задержку доставки. Значение нуля интерпретируется как "нет квоты".
Имя | Использование |
Тип | Значение по умолчанию |
quota_is_inclusive |
appendfile | boolean |
истина |
Смотрите выше опцию quota.
Имя | Использование |
Тип | Значение по умолчанию |
quota_size_regex |
appendfile | string |
не задана |
Эта опция применяется, когда используется один из
режимов доставки, записывающий отдельный файл для каждого сообщения.
Когда exim хочет найти размер одного из этих файлов для проверки квоты, он
вначале проверяет quota_size_regex. Если она установлена в
регулярное выражение, которое совпадает с именем файла, и является одной
строкой, строка интерпретируется как представление размера файла.
Значение quota_size_regex не раскрывается.
Эта особенность полезна лишь когда пользователи
не имеют shell-доступа к своим почтовым ящикам: иначе они могли бы
обойти квоту простым переименованием файлов. Это средство может
использоваться для maildir доставок, путём установки maildir_tag
для добавления длины файла к имени файла. Например:
maildir_tag = ,S=$message_size
quota_size_regex = ,S=(\d+)
|
Альтернативой $message_size является $message_linecount,
которая содержит число строк в сообщений.
Регулярное выражение не должно предполагать что размер сообщения
в конце имени файла (даже при том, что ее там помещает maildir_tag),
поскольку MUA, обрабатывающие maildir, иногда добавляют
иную информацию в конец имени сообщения.
Имя | Использование |
Тип | Значение по умолчанию |
quota_warn_message |
appendfile | string† |
смотрите ниже |
Смотрите ниже про использование этой опции. Если эта опция
не задана, когда установлена quota_warn_threshold,
значение по умолчанию будет:
quota_warn_message = "\
To: $local_part@$domain\n\
Subject: Your mailbox\n\n\
This message is automatically created \
by mail delivery software.\n\n\
The size of your mailbox has exceeded \
a warning threshold that is\n\
set by the system administrator.\n"
|
Имя | Использование |
Тип | Значение по умолчанию |
quota_warn_threshold |
appendfile | string† | 0 |
Эта опция раскрывается точно таким же образом, как и
quota (смотрите выше). Если результирующее значение больше нуля,
и доставка сообщения приводит к размеру файла или общему размеру дерева
директорий более данного порога, посылается предупреждающее сообщение.
Если, также, установлена quota,
порог может быть определён как процент от её значения, путём сопровождения
значения символом процента. Например:
quota = 10M
quota_warn_threshold = 75%
|
Если quota не задана, установка quota_warn_threshold,
заканчивающаяся символом процента, игнорируется.
Само предупреждающее сообщение определяется путём опции
quota_warn_message, и оно должно начинаться со строки заголовка
To:, содержащей получателя (получателей) предупреждающего сообщения.
Они не обязательно должны включать отправителей оригинального сообщения.
Также, обычно должна предоставляться строка Subject:.
Вы можете включить любые другие строки заголовков, которые Вам необходимы.
Если Вы не включите строку From:, то значение по умолчанию будет:
From: Mail Delivery System <mailer-daemon@$qualify_domain_sender>
|
Если Вы предоставляете строку
Reply-To:, она перезадаёт глобальную опцию errors_reply_to.
Опция quota не нуждается в приведении в порядок,
для использования этой опции: они независимы друг от друга, кроме случаев,
когда порог определён как процент.
Имя | Использование |
Тип | Значение по умолчанию |
use_bsmtp | appendfile | boolean |
ложь |
Если эта опция установлена в истину, appendfile
пишет сообщения в формате пакетного SMTP с отправителем конверта и
получателем (получателями), включёнными в SMTP-команды.
Если Вы хотите включить начальную команду HELO в эти сообщения, Вы можете это
сделать путём установки опции message_prefix.
Для получения дополнительных деталей о пакетном SMTP,
смотрите раздел 44.10.
Имя | Использование |
Тип | Значение по умолчанию |
use_crlf | appendfile | boolean |
ложь |
Эта опция заставляет строки заканчиваться двухсимвольной
CRLF-последовательностью (возврат каретки, перевод строки) вместо одного
символа перевода строки. В случае пакетного SMTP, записанная в файл
последовательность байт, точное изображение того, что произвело бы отключение
реального SMTP-соединения.
Содержимое опций message_prefix и
message_suffix пишется дословно, таким образом,
они должны содержать свои символы возврата каретки, если они необходимы.
В случаях, когда эти опции имеют непустые значения по умолчанию, значение
завершается единственным переводом строки, таким образом, они должны быть
изменены, чтобы заканчиваться на \r\n, если установлена опция use_crlf.
Имя | Использование |
Тип | Значение по умолчанию |
use_fcntl_lock |
appendfile | boolean |
смотрите ниже |
Эта опция контролирует использование функции fcntl()
для блокировки файла в целях исключительного использования, при добавлении
сообщения. По умолчанию, она установлена, когда не установлена
use_flock_lock. Иначе, она должна быть
выключена, лишь если Вы знаете что все Ваши MUA
используют блокировку путём файла блокировки. Когда не установлены обе опции,
use_fcntl_lock и use_flock_lock, опция use_lockfile должна быть задана.
Имя | Использование |
Тип | Значение по умолчанию |
use_flock_lock |
appendfile | boolean | ложь |
Эта опция предоставлена для поддержки блокировки файлов с
использованием flock() в тех немногих ситуациях, когда это необходимо.
Самые современные операционные системы поддерживают блокировки
fcntl() и lockf(), и эти две функции взаимодействуют друг с другом.
По умолчанию exim использует блокировку fcntl().
Эта опция требуется, лишь если Вы используете операционную
систему, где lockf() используется программами, обращающимися к почтовым
ящикам (обычно MUA), и где flock() некорректно взаимодействует с fcntl().
Если Вы хотите, можете одновременно использовать обе
блокировки: fcntl() и flock().
Не все операционные системы предоставляют flock().
Некоторые версии Solaris не имеют её (и некоторые, я думаю, предоставляют не
совсем правильные версии, собранные на верху lockf()).
Если операционная система не имеет flock(), exim будет собран
без способности её использовать, и любые попытки сделать
это приведут к конфигурационной ошибке.
Предупреждение: Блокировка flock() не работает на
NFS-файлах (только если flock() не отображается (mapped) на
fcntl() с помощью операционной системы).
Имя | Использование |
Тип | Значение по умолчанию |
use_lockfile | appendfile | boolean |
смотрите ниже |
Если эта опция выключена, exim не пытается создать
файл блокировки при добавлении к файлу почтового ящика.
В этой ситуации единственная блокировка fcntl().
Вы должны отключать use_lockfile лишь в случае, если абсолютно
уверены, что любые MUA, которые когда-либо будут просматривать почтовые
ящики пользователей, используют fcntl() вместо блокировочного файла
и тогда, когда Вы не передаёт через NFS более, чем от одного хоста.
Для безопасного добавления к файлам NFS более,
чем от одного хоста, необходимо снять блокировку до открытия файла,
и блокировочный файл достигает этого. Иначе, даже с блокировкой
fcntl(), есть риск повреждения файла. Опция use_lockfile
установлена по умолчанию, если не задана use_mbx_lock.
Невозможно выключить обе опции use_lockfile и
use_fcntl_lock кроме случаев, когда установлена mbx_format.
Имя | Использование |
Тип | Значение по умолчанию |
use_mbx_lock |
appendfile | boolean |
смотрите ниже |
Эта опция доступна, лишь когда exim
скомпилирован с установленной SUPPORT_MBX в Local/Makefile.
Установка опции определяет, что используются специальные
правила блокировки MBX. По умолчанию она установлена, если установлена
mbx_format, и ни одной опции блокировки нет в конфигурации.
Правила блокировки такие же, как используются библиотекой
c-client, лежащей в основе демонов Pine, IMAP4 и POP,
которые идут вместе с ней (смотрите обсуждение ниже). Правила разрешают общий
доступ к почтовому ящику. Однако, этот вид блокироки не работает, когда
почтовый ящик примонтирован по NFS.
Вы можете установить use_mbx_lock
с одной или обеими опциями use_fcntl_lock или use_flock_lock
для контроля того, какая блокировка используется в осуществлении
правил блокировки MBX. Значение по умолчанию использует fcntl(), если
use_mbx_lock установлена без use_fcntl_lock
или use_flock_lock.
26.3.
Операционные детали для добавления
До добавления к файлу производятся следующие подготовительные операции:
- Если имя файла /dev/null, не предпринимается никакого действия
и выдаётся успешное завершение.
- Если какие-либо каталоги на пути файла отсутствуют,
exim создёт их, если установлена опция create_directory.
Режим созданных каталогов задаётся опцией directory_mode.
- Если установлена file_format, проверяется формат существующего файла.
Если она указывает, что должен использоваться иной транспорт, управление
передаётся этому транспорту.
- Если установлена use_lockfile,
создаётся файл блокировки для способа, который будет надёжно работать по
NFS следующим образом:
- 1. Создание сцепленного файла чьё имя является именем файла
блокировки с текущим именем, первичным именем хоста и добавленным
идентификатором процесса, путём открытия для записи нового файла.
Если происходит неудача с ошибкой доступа, доставка задерживается.
- 2. Закрытие сцепленного файла, жёсткая ликовка его на
имя файла блокировки.
- 3. Если вызов link() успешен, создание файла блокировки успешно.
Удаление имени сцепленного файла.
- 4. Иначе, используется stat() для получения информации о
сцепленном файле и затем удаляется ссылка на имя сцепленного файла.
Если число ссылок ровно две, создание блокировчного файла успешно, но иногда
(например, падение и рестарт NFS-сервера)
вызывает несообщение этого факта вызову link().
- 5. Если создание блокировочного файла неудачно, ждётся
lock_interval и снова пробуется, вплоть до времени
lock_retries. Однако, так как любая программа,
пишущая в почтовый ящик, должна завершить свою задачу очень быстро, это
разумный таймаут старых блокировочных файлов, которые обычно являются
результатом сбоев пользовательского агента и системы. Если существующий файл
блокировки старше, чем lockfile_timeout,
exim пытается удалить его до новой попытки.
- К lstat() производится запрос для обнаружения,
существует ли главный файл, и если это так, каковы его характеристики.
Если lstat() неудачна по какой-либо причине,
кроме несуществования, доставка задерживается.
- Если файл действительно существует и явялется симлинком,
доставка задерживается, если не задана опция allow_symlink, в
случае чего проверяется владелец ссылки, а затем вызывается stat()
для нахождения реального файла, подвергаемого последующим проверкам.
Проверка владельца вышестоящей ссылки предотвращает создание пользователем
ссылки на чужой почтовый ящик в липком каталоге, и разрешение симлинков в
этом случае не самая хорошая идея. Если существует цепочка симлинков,
промежуточные не проверяются.
- Если файл реально существует, но он не регулярный файл,
или владелец и группа файла (если группа проверяется, смотрите выше опцию
check_group) отличаются от пользователя и группы,
под которыми производится доставка, то доставка задерживается.
- Если разрешения файла более широкие, чем указанные, они уменьшаются.
Если они недостаточны, доставка задерживается, если опция
mode_fail_narrower не установлена в ложь, в случае чего пробуется
доставка с существующими разрешениями.
- Сохраняется номер дескриптора файла, и файл открывается для добавления.
Если это неудачно по причине того, что файл исчез, appendfile
ведёт себя так, как будто его и не существовало (смотрите ниже).
Для любых других ошибок доставка задерживается.
- Если файл открыт успешно проверяется, что не изменился его
номер дескриптора, что это всё ещё регулярный файл и что не изменились
его владелец и права. Если что-то не так доставка
задерживается, и сообщение замораживается.
- Если файл изначально не существовал, доставка
задерживается, если установлена опция file_must_exist.
Иначе, если установлена опция create_file, проверяется, что файл
создан в разрешённом каталоге, а затем открывается для записи новый файл
с опциями O_EXCL и O_CREAT кроме случаев, когда это производится с
символической ссылкой (должна быть установлена опция allow_symlink).
В этом случае, который может произойти, если ссылка указывает на
несуществующий файл, он открывается для записи используя O_CREAT,
но не O_EXCL, поскольку это мешает связи с ссылкой.
- Если открытие неудачно, поскольку файл существует,
происходят проверки данные выше для существующих файлов.
Однако, для избежания циклов в ситуациях, когда файл непрерыно создаётся
и удаляется, цикл "существует/не существует"
разрывается после 10 повторов, а сообщение замораживается.
- Если открытие неудачно по любой другой причине, доставка задерживается.
- Как только файл открыт, если неложны опции use_fcntl_lock и
use_flock_lock, он блокируется, используя fcntl(), flock() или обе.
Если use_mbx_lock ложна, в каждом случае
запрашивается эксклюзивная блокировка. Однако, если
use_mbx_lock истинна, exim забирает общую блокировку
открытого файла и эксклюзивно блокирует файл с именем:
/tmp/.device-number.inode-number
|
используя устройство и номер дескриптора открытого файла почтового ящика, в
соответствии с правилами блокировки MBX. Этот файл создаётся с режимом,
определённым путём опции lockfile_mode.
Если exim не в состоянии заблокировать файл,
есть два возможных действия, в зависимости от значения таймаута блокировки.
Оно получается из lock_fcntl_timeout и
lock_flock_timeout, соответственно.
Если значение таймаута ноль, файл закрывается, exim ждёт
lock_interval, затем возвращается и повторно открывает файл,
как описано выше, и снова пробует его заблокировать. Это случается до времени
lock_retries, после которого доставка задерживается.
Если значение таймаута более нуля, блокировка вызывает
fcntl() или flock(), которая используются (с данным таймаутом), таким
образом, уже будет некоторое значение таймаута, путём ошибок блокировки.
Однако, exim не прекращает немедленно. Он повторяет до времени (округлённого):
(lock_retries * lock_interval) / timeout
|
В конце доставки exim закрывает файл (освобождая
блокировки fcntl() и/или flock()) и после этого удаляет, если он
существует, файл блокировки.
26.4
Операционные детали для доставки в новый файл
Когда опция directory установлена вместо
file, каждое сообщение доставялется в недавно созданный файл
или установленные файлы. Когда appendfile
активирован непосредственно из роутера redirect, то обычно ни
file, ни directory не устанавливаются, поскольку путь для
доставки предоставялется роутером. Смотрите, например, транспорт
address_file в конфигурации по умолчанию.
В этом случае доставка осуществляется в новый файл, если имя пути
завершается на /, или установлена опция
maildir_format (или mailstore_format).
При записи сообщения в новый файл
блокировка не требуется, следовательно, различные опции
блокировки транспорта игнорируются. Строка From, которая по умолчанию
разделяет сообщения в одном файле, обычно не требуется,
нет экранирования строк сообщения, начинающихся с From,
и нет необходимости обеспечивать новую строку в конце каждого сообщения.
Следовательно, значения по умолчанию
check_string, message_prefix и message_suffix
все не заданы, когда установлена любая из опций directory,
maildir_format или mailstore_format.
Если exim должен проверять установку quota, он
складывает размеры всех файлов в каталоге по умолчанию для доставки.
Однако, Вы можете задать иной каталог путём установки quota_directory.
Также, для доставок maildir (смотрите ниже)
соблюдается соглашение maildirfolder.
Есть три различных пути, которыми может быть сделана
доставка в индивидуальные файлы, контролируемые параметрами настройки опций
maildir_format и mailstore_format. Отметьте, что код
для поддержки форматов maildir или mailstore не включен в исполняемый модуль,
если SUPPORT_MAILDIR или, соответственно, SUPPORT_MAILSTORE
не установлены в Local/Makefile.
Во всех трёх случаях делается попытка создать каталог
и все необходимые субкаталоги, если они не существуют, при условии, что
установлена опция create_directory
(по умолчанию она установлена). Расположение созданного каталога может быть
ограничено установкой create_file. Режим созданного каталога задаётся
опцией directory_mode. Если создание неудачно, или если опция
create_directory не установлена, когда
требуется создание, доставка задерживается.
26.5. Доставка maildir
Если истинна опция maildir_format, exim доставляет
каждое сообщение путём записи его в файл, чьё имя
tmp/stime.HmtimePpid.host
в каталоге, определённом опцией directory (каталог доставки).
Если доставка успешна, файл переименовывается внутрь субкаталоге new.
В имени файла stime текущее время дня в секундах и
mtime часть микросекунд времени.
После maildir доставки exim проверяет, что часы дневного времени ушли
дальше по крайней мере на микросекунду перед завершением процесса доставки.
Это гарантирует уникальность имени файла. Однако, предусмотрительно,
exim вызывает stat() для файла до его открытия. Если даётся какой угодно
ответ, кроме ENOENT (не существует), exim ждёт три секунды и пробует снова,
вплоть до времени maildir_retries.
До того, как exim выполнит maildir-доставку, он
обеспечивает, что каталоги с именами new, cur и tmp
существуют в каталоге доставки. Если они не существуют, exim пробует создать
их и другие предстоящие каталоги в пути, подчиняясь опциям
create_directory и create_file. Если задана опция
maildirfolder_create_regex, и её регулярное выражение содержит
совпадение с каталогом доставки, exim также гарантирует, что в
каталоге доставки существует файл maildirfolder.
Если отсутствующий каталог или файл maildirfolder не
могут быть созданы, доставка задерживается.
Эти особенности позволяют использовать exim для
создания всех необходимых файлов и каталогов в почтовом ящике, включая
субкаталоги для папок maildir++. Рассмотрите этот пример:
maildir_format = true
directory = /var/mail/$local_part \
${if eq{$local_part_suffix}{}{} \
{/.${substr_1:$local_part_suffix}}}
maildirfolder_create_regex = /\.[^/]+$
|
Если пуста $local_part_suffix
(нет суффикса для локальной части), доставка происходит в
вышележащую maildir с именем типа /var/mail/pimbo
(для пользователя с именем pimbo).
Регулярное выражение в maildirfolder_create_regex
не совпадает с этим именем, таким образом, exim не будет искать или создавать
/var/mail/pimbo/maildirfolder, хотя он, в случае необходимости,
создаст /var/mail/pimbo/{cur,new,tmp}.
Однако, если $local_part_suffix содержит, например,
-eximusers, доставка присходит в папку maildir++
/var/mail/pimbo/.eximusers, которая не совпадает с
maildirfolder_create_regex. В этом случае exim создаст
/var/mail/pimbo/.eximusers/maildirfolder также, как и три каталога
maildir /var/mail/pimbo/.eximusers/{cur,new,tmp}.
Предупреждение: При установке maildirfolder_create_regex
позаботьтесь о том, чтобы она, по неосторожности, не совпадала с
вышестоящим каталогом maildir, поскольку файл maildirfolder на
вышестоящем уровне полностью нарушил бы подсчёт квоты.
Если exim обязан проверять установку quota
до maildir-доставки, и quota_directory не установлена, он ищет файл с
именем maildirfolder в maildir-каталоге (рядом с new,
cur, tmp). Если он существует, exim предполагает, что
это каталог папок maildir++, которая одним уровнем ниже верхнего уровня
пользовательского каталога почтового ящика. Это заставляет его начать
подсчёт используемого места с родительского каталога вместо текущего.
Проблема при доставке в многофайловый почтовый ящик состоит в том, что в
вычислительном отношении дорого подсчитать размер почтового ящика
для проверки квоты. Были предприянты различные подходы для
уменьшения необходимой работы. Следующие два раздела описывают
два из них. Третья альтернатива заключается в использовании какого-то
внешнего процесса для обслуживания данных о размере, и использовании
раскрытия опции mailbox_size как способа импортировать
эти данные в exim.
26.6.
Использование тэгов для записи размера сообщений
Если установлена maildir_tag,
строка раскрывается для каждой доставки. Когда maildir-файл переименовывается
в субкаталог new, к его имени добавляется тэг.
Однако, если добавляемый тэг берёт длину имени, с которой проверочный вызов
stat() неудачен по причине ENAMETOOLONG,
тэг удаляется, а maildir-файл создаётся без тэга.
Тэги могут использоваться для кодирования размеров
файлов в их именах: для примера, смотрите выше, опцию
quota_size_regex. Раскрытие maildir_tag происходит
после записи сообщения. Значение переменной $message_size
устанавливается в число фактически записанных байт.
Если раскрытие принудительно неудачно, тэг игнорируется, но непринудительная
неудача раскрытия приводит к задержке доставки. Раскрытый тэг может содержать
любые печатные символы, кроме /. Непечатаемые символы в строке игнорируются,
если результирующая строка пустая: она игнорируется. Если она начинается с
алфавитно-цифрового символа, вставляется начальное двоеточие.
26.7.
Использование файла maildirsize
Если истинна опция maildir_use_size_file,
exim осуществляет правила maildir++ для хранения квоты и информации о
размере файла в файле с именем maildirsize
в каталоге maildir верхнего уровня. Если этот файл не существует, exim
создаст его, устанавливая квоту из транспортной опции quota.
Если не существует сам каталог maildir, он его создаст
до любых попыток записать файл maildirsize.
Файл maildirsize используется для хранения
информации о размерах сообщений в maildir, ускоряя подсчёт квоты.
Значение квоты в файле всего лишь кэш: если квота изменяется в транспорте,
новое значение перезаписывает кэшированное при
доставке следующего сообщения. Кэш поддерживается для других программ,
которые обращаются к maildir и должны знать квоту.
Если опция quota в транспорте не задана
или равна нулю, файл maildirsize поддерживается
(с нулевой установкой квоты), но никакой квоты не накладывается.
Для контроля, какие каталоги используются в вычислении
квоты при использовании файла maildirsize,
доступно регулярное выражение. Для дополнительных деталей смотрите выше
maildir_quota_directory_regex.
26.8. Доставка mailstore
Если истинна опция mailstore_format,
каждое сообщение записывается как два файла в данном каталоге.
Уникальное базовое имя создаётся из идентификатора сообщения и текущего
процесса доставки, а файлы записываются с использованием этого базового имени
плюс суффиксов .env и .msg. Файл .env содержит конверт
сообщения, а файл .msg непосредственно сообщение.
Базовое имя помещается в переменную $mailstore_basename.
В процессе доставки конверт вначале записывается в
файл с суффиксом tmp. Затем пишется файл
.msg и, по завершении записи, файл .tmp
переименовывается в файл .env. Программы, обращающиеся к сообщениям,
должны ожидать появления обоих файлов: .env и .msg,
до доступа к любому из них. Альтернативный подход заключается в ожидании
исчезновения файла .tmp.
Файл конверта начинается с любого текста, заданного опцией
mailstore_prefix, раскрытой и завершённой символом новой строки,
если таковой отсутствует. Затем следует адрес отправителя в одной строке,
затем все адреса получателей по одному на строке. Может быть более одного
получателя лишь в случае, если значение опции
batch_max более одного. В конце раскрывается mailstore_suffix,
и результат добавляется в файл, сопровождаемый символом новой
строки, если он им не заканчивается.
Если раскрытие mailstore_prefix или
mailstore_suffix завершается принудительной неудачей, они игнорируются.
Другие ошибки раскрытия рассматриваются как конфигурационные
ошибки, и доставка задерживается. Переменная $mailstore_basename
доступна для использования в процессе этих раскрытий.
26.9.
Неспециальная доставка в новый файл
Если не установлены ни maildir_format, ни mailstore_format,
непосредственно в названном каталоге создаётся единичный новый файл.
Например, при доставке сообщений в файлы в пакетном формате SMTP для
позднейшей доставки на другой хост
(смотрите раздел 44.10),
могут использоваться установки типа таких:
directory = /var/bsmtp/$host
|
Сообщение записывается в файл с временным именем,
который переименовывается, когда доставка завершена.
Финальное имя файла получается путём раскрытия опции directory_file.
|
|