Командная строка Exim'а использует стандартный для Unix-систем способ
задания опций. Каждая начинается с дефиса, после каждой может следовать
несколько аргументов. Опции совместимы с основными опциями Sendmail и
частично Smail.
Количество опций Exim'а просто огромно. В данной статье перечислены и
описаны только прикладные, полезные для администрирования уже
настроенной и работающей почтовой системы среднего по масштабам
почтового сервера. Для некоторых опций приведены примеры эффективного
использования.
> exim -d
отладка. Крайне полезная опция. Специально начал с нее, потому что её
можно комбинировать с любыми другими.
Например exim -bd -d запускает exim как демон, выводя на консоль всю
отладочную информацию. Чтобы уменьшить количество выдаваемой информации,
можно использовать -dd (имеет смысл только с -bd) пропускает информацию
по подпроцессам. Или -v, простое описание того, что делает exim (при
использовании -d включена по умолчанию).
На самом деле, эта опция гораздо сложнее чем кажется (вообще одна из
самых сложных у Exim'а), можно включать и выключать целую кучу
информации по категориям, но об этом уже в документации (см. Ссылки
ниже).
> exim -bP
выводит все значения установленные в конфиге. У этой команды тоже есть
куча параметров, но дефолтное использование + grep достаточно в 90%
случаев.
> exim -bp
запрашивает список содержимого почтовой очереди на стандартный вывод.
Вывод сортируется в хронологическом порядке по прибытию сообщений.
Если опция сопровождается списком идентификаторов сообщений, то
показываются только эти сообщения.
Это одна из важнейших опций exim'а, вернее это даже не одна опция, а
целый класс. Рассмотрим их подробнее.
Каждое сообщение отображается примерно так
25m 2.9K 0t5C6f-0000c8-00 <alice@wonderland.fict.example.>
red.king@looking-glass.fict.example
<other addresses>
Первая строка содержит 4 колонки: сколько сообщение находится в очереди,
размер сообщения, ID сообщения, отправитель, как он указан в "конверте"
(для баунсов "<>"). Если сообщение заморожено (приостановлена попытка
его доставки), в конце этой строки показывается текст "*** frozen ***".
Получатели сообщения (взятые из конверта, не из заголовков) показаны в
последующих строках. Адреса по которым сообщение уже доставлено отмечены
символом "D". Если оригинальный адрес раскрывается в несколько адресов
через файл альясов или форвардов, оригинальный показывается с "D" только
когда завершены доставки для всех дочерних адресов.
> exim -bpc
выводит общее количество сообщений в очереди.
> exim -bpr
идентична -bp, но вывод не сортируется. Полезно, когда в очереди много
сообщений, а сортировка совсем не нужна (например для передачи exiqsumm).
> exim -bV
кроме того, что выдает версию и некоторую информацию о бинарнике,
проверяет exim.conf на ошибки (А скорее, на опечатки. Если эта опция
говорит, что все хорошо, то это еще не значит, что ВСЁ хорошо).
У опций вывода очереди есть еще некоторые комбинации предназначенные для
отделения и отсеивания форвардинга и алиасинга, но здесь я их
рассматривать не буду.
Дальше две очень важные опции, которые должны знать все
веб-программисты, но почти никто из них не использует (и, видимо, не
знает), а потом удивляются, почему их письма с сайта падают в спам.
Опции управляют некоторыми полями "конверта" сообщения составленного
локально (в наше время, в 99 случаях из 100, это сообщения составленные
скриптами).
> exim -F <string>
устанавливает имя отправителя. Если опция не указана, подставляется
значение поля "gecos" из данных пароля пользователя.
> exim -f <address>
устанавливает адрес отправителя. Обычно, она может использоваться только
доверенными пользователями, но директива "untrusted_set_sender" может
разрешить её использование недоверенным пользователям.
Если не понятно, в чем разница между опциями, объясню: приходит письмо
от Vasya Pupkin <admin@server.ru.>.
Vasya Pupkin - это имя отправителя (опция -F)
admin@server.ru - адрес (опция -f)
Относительно доверенных/недоверенных пользователей, если кто не в курсе.
Пользователю root и пользователю exim'а (это не обязательно пользователь
exim) доверяют всегда. Остальных можно задать в конфиге директивами
"trusted_users" и "trusted_groups". Если "-f" не определена, или
определена пользователем, которому не доверяют, отправитель как
логин_пользователя@домен.по.умолчанию (определяется директивой
qualify_domain, если не определена используется hostname сервера).
Существует исключение из этого ограничения: пустой отправитель может
быть задан любым пользователем. Пустой отправитель может быть указан как
пустая строка, или как пара угловых скобок без чего-либо между ними:
exim -f '<>' user@domain
exim -f "" user@domain
При чем же здесь программисты? В отношении php приведу такой пример
"правильного" кода (кстати, взято из официальной документации к PHP)
<?php
mail('nobody@example.com', 'the subject', 'the message', null, '-fwebmaster@example.com');
?>
Есть другие способы определять заголовки средствами PHP, но это статья
не о PHP.
Дальше вероятно самый важный "класс" опций для администрирования
почтового сервера.
Опции управления сообщениями.
> exim -Mvl <message id>
Посмотреть лог сообщения
> exim -Mvb <message id>
Посмотреть тело сообщения
> exim -Mvh <message id>
Посмотреть заголовки сообщения
> exim -Mrm <message id> ...
Удалить сообщения и не посылать никаких ошибок (в логах упоминание будет).
> exim -Mg <message id> ...
Удалить сообщение и отослать отлуп (cancelled by administrator).
> exim -M <message id> ...
Ускорить доставку для сообщения с данным messageID (безусловно немедленно доставляет сообщение)
> exim -Mar messageID <address> <address> ...
Добавить адрес в список получателей сообщения.
> exim -Mes <message id> <address>
Изменить адрес отправителя в сообщении на заданный адрес.
> exim -Mf <message id> <message id> ...
Отметить перечисленные сообщения как "frozen". Любые попытки доставки
прекращаются, пока сообщение не будет разморожено вручную, или пока не
пройдет время указанное в "auto_thaw".
> exim -Mt <message id> <message id> ...
"разморозить" сообщение.
> exim -Mmad <message id> <message id> ...
пометить все адреса получателей в сообщениях как уже доставленные.
Никогда (!) не надо так делать. Сами же запутаетесь.
> exim -Mmd <message id> <address> <address> ...
пометить заданные адреса как уже доставленные. Адреса регистрозависимы.
Вот это уже полезнее, если какие-то адреса недоступны.
Если сообщение находится в состоянии "попытки доставки", следующие опции
на него не повляют: -Mrm, -Mg, -Mar, -Mes, -Mf, -Mt, -Mmad, -Mmd.
Для сообщений, которые подозреваются в спаме удобно сначала массово,
сделать -Mf, потом -Mvl, -Mvh и -Mvb для пары выбранных наугад
сообщений. Если все еще невозможно с консоли определить спам ли это
(например, проблемы с кодировками или есть вложения), то можно с помощью
-Mar добавить себя в список получателей, и ускорить данное сообщение с
помощью -M. Когда все наконец станет ясно, то либо -Mrm, либо -Mt.
> exim -q
просто запускает один процесс обработчика очереди; очередь сканируется и
сообщения доставляются в том, порядке в котором бы доставлялись обычно
(вообще, порядок случаен, здесь имеется ввиду, что учитываются все
заморозки и т. п.). Для каждого процесса обработчика очереди одно SMTP
соединение (это справедливо для всех опций этого класса). После одного
прохода по сообщениям процесс завершается (т.о. сообщения, у которых не
подошло время доставки даже не попытаются доставиться), если не указана
опция (см. ниже).
Опция -q имеет флаги. Её использование таково exim -q<qflags><time>
Это значит, что вы можете комбинировать её разновидности (в отличие, от,
например -M, где вы НЕ можете указать -Mvlhb, чтобы просмотреть и логи,
и заголовки, и тело сообщения). Тем не менее, флаги должны быть указанны
в правильно порядке.
> exim -qq...
двухступенчатое выполнение очереди. При первой обработке очереди опция
"queue_smtp_domains" принимается как совпадающая с каждым доменом.
Адреса роутятся, происходят локальные доставки, но удалённые транспорты
не запускаются. Во время второй обработки происходит нормальное
сканирование очереди. Плюс такого способа в том, что те сообщения
которые роутятся на один и тот же хост, в основном, идут через одно
SMTP-соединение, на основе БД совпадений, которые были установлены при
первом сканировании очереди.
> exim -q[q]i...
если присутствует флаг i то доставляются только те сообщения, для
которых еще не было попытки доставки.
> exim -q[q]f...
если присутствует флаг f, доставляются любые незамороженные сообщения
(независимо от того, пришло их время повтора или нет).
> exim -q[q]ff...
то же что и f, но замороженные сообщения тоже доставляются.
> exim -q[q][f[f]]l
l определяет, что нужно делать только локальные доставки (остальные
сообщения, разумеется, остаются в очереди).
Значение time идет после всех флагов. Он определяет промежуток времени,
через который будет повторяться заданная обработка очереди. Например:
exim -ffl10m
Предпринимать попытку доставить любое (включая замороженные) сообщение,
требующее локальной доставки каждые 10 минут (очень полезно, когда
очередь забита всякой дрянью, которую нельзя удалить и из-за которой
нормальные люди не могут получить письма).
/usr/exim/bin/exim -bd -q30m
А так можно запустить демона, который будет обслуживать входящие
соединения и обрабатывать очередь каждые 30 минут (собственно штатные
средства ОС, его примерно так и запускают).