MyTetra Share
Делитесь знаниями!
Время создания: 03.12.2010 18:20
Текстовые метки: exim, очередь
Раздел: Шпаргалки
Запись: balas1/mytetra/master/base/0000003249/text.html на raw.github.com

Командная строка 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 минут (собственно штатные

средства ОС, его примерно так и запускают).

 
MyTetra Share v.0.59
Яндекс индекс цитирования