Полный список аргументов для sendmail детально описан в Приложении A. Некоторые важные аргументы описаны здесь.
Количество времени между разветвлением процесса для обработки очереди определяется флагом -q. Если вы работаете в режиме приема, назначенного i или b, то это значение может быть относительно большим, как и в том случае, если ваш хост долго был отключен. Если вы запускаете sendmail в режиме q, то это значение должно быть относительно небольшим, потому что оно определяет максимальное время нахождения сообщения в очереди. (Смотри также опцию MinQueueAge.)
Секция 5.3.1.1 RFC 1123 говорит, что это значение должно быть как минимум 30 минут (но, если вы работаете в режиме "queue-only", то это не важно).
Если вы позволяете принимать почту через соединение IPC, у вас должен работать демон. Он должен запускаться из файла /etc/rc с флагом -bd. Флаги -bd и -q могут быть скомбинированы в одном вызове:
В качестве альтернативы можно запускать sendmail из inetd(8) (используя флаг -bs, чтобы сказать sendmail использовать SMTP на его стандартном вводе и выводе). Это будет работать и позволит вам завернуть sendmail в программу обработки TCP, но может быть несколько медленнее из-за того, что файл конфигурации будет перечитываться при получении любого входящего сообщения. Если вы так сделаете, то вам все равно понадобится работающий sendmail для обработки очереди:
В некоторых случаях, вы можете заметить, что по какой-либо причине ваша очередь застряла. Вы можете ускорить очередь, используя флаг -q (без значения). При этом очень интересно использовать флаг -v (verbose), чтобы посмотреть, что будет происходить:
Вы также можете ограничить количество работ с определенным идентификатором очереди, отправителем или получателем, используя один из модификаторов очереди. Например, "-qRberkeley" ограничит работу по обработке очереди только сообщениями со строчкой "berkeley" в любом из адресов получателей. Точно также, "-qSstring" ограничит обработку сообщениями с определенными отправителями, а "-qIstring" ограничит ее конкретными идентификаторами очереди.
Существует большое количество втроенных в sendmail флагов отладки. Каждый флаг отладки имеет номер и уровень, где большие уровни означают большее количество выдаваемой информации. Существует соглашение, что уровни выше девятого "абсурдны", то есть, они выдают так много информации, что обычно вы ее даже не захотите увидеть, за исключение отладки конкретного куска кода. Флаги отладки выставляются опцией -d; синтаксис таков:
debug-flag: | -d debug-list |
debug-list: | debug-option [ , debug-option ]* |
debug-option: | debug-range [ . debug-level ] |
debug-range: | integer | integer - integer |
debug-level: | integer |
где пробелы используются только для облегчения чтения. Например,
-d12 | Выставляет флаг 12 на уровень 1 |
-d12.3 | Выставляет флаг 12 на уровень 3 |
-d3-17 | Выставляет флаги с 3 по 17 на уровень1 |
-d3-17.4 | Выставляет флаги с 3 по 17 на уровень 4 |
Для полного списка доступных отладочных флагов, вы должны посмотреть в исходный код (они слишком динамичны, чтобы быть отраженными в этой документации).
Опции могут быть преодолены использованием в командной строке флагов -o или -O. Например,
выставляет опцию T (таймаут) на две минуты только для этого запуска; эквивалентная строка, использующая длинное имя опции такова:
Некоторые опции имеют ограничения по безопасности. Sendmail позволяет вам выставить их, но с этого момента убирает свои пермиссии смены uid на root 1.
Альтернативный файл конфинурации может быть определен флагом -C; например,
использует файл конфигурации test.cf вместо обычного /etc/sendmail.cf. Если флаг -C не имеет значения, то по умолчанию он использует файл sendmail.cf в текущем каталоге.
Когда вы используете этот флаг, sendmail не использует пермиссии смены uid на root, поэтому обычно, во время тестирования, для каталога подкачки используют каталог, который открыт всем на запись (типа /tmp) (опция QueueDirectory или Q).
Многие реализации SMTP не полностью реализуют протокол. Например, некоторые SMTP для персональных компьютеров не понимают строк-продолжений в кодах возврата. Это может быть очень трудно отследить. Если вы подозреваете такую проблему, вы можете включить протоколирование траффика, используя флаг -X. Например,
будет вести протокол всего траффика в файле /tmp/traffic.
Это протоколирует большое количество данных очень быстро, и при нормальной работе вы НИКОГДА не должны ее использовать. После запуска такого демона, заставьте странную реализацию послать сообщение на ваш хост. Весь траффик сообщений из и в sendmail, включая входящий траффик SMTP, будет запротоколирован в этом файле.
При построениии таблицы конфигурации, вы можете произвести некоторое тестирование, используя "тестовый режим" sendmail. Например, вы можете запустить sendmail так:
что заставит sendmail прочитать файл конфигурации "test.cf" и войти в тестовый режим. В этом режиме, вы вводите строки типа:
где rwset - набор правил перезаписи, который вы хотите использовать, а address - это адрес, к которому вы хотите его применить. Тестовый режим покажет вам шаги при обработке, показав в конце окончательно полученный адрес. Вы можете использовать список правил перезаписи, разделенный запятыми, для последовательного применения на входе. Например:
сначала применит набор правил три на адрес "monet:bollard." Затем к выходу набора правил три будет применен набор правил один, затем точно также наборы правил двадцать один и четыре.
Если вам нужна большая детализация, вы можете также использовать флаг "-d21" для включения режима отладки. Например,
включит невероятное количество информации; адрес из одного слова может выдать в результате несколько страниц нужной информации.
Необходимо предупредить, что внутренне sendmail применяет набор правил 3 ко всем адресам. В тестовом режиме, вы должны делать это вручную. Например, старые версии позволяли вам использовать
Эта версия требует, чтобы вы использовали:
Начиная с версии 8.7, в тестовом режиме стали доступны и некоторые другие вещи:
+o .Dxзначение | Указывает макросу x иметь указанное значение. Это полезно, когда отлаживаемые правила используют синтаксис $&x. |
+o .Ccзначение | Добавляет указанное значение к классу c. |
+o .Sнабор_правил | Распечатывает содержимое указанного набора правил. |
+o -ddebug-spec | Эквивалентно флагу командной строки. |
При включенном HostStatusDirectory, информация о статусе хостов находится на диске, и поэтому может быть использована одновременно несколькими процессами sendmail. Статус последнего соединения с каждым удаленным хостом может быть просмотрен командой:
Эта информация может быть обнулена командой:
Опустошение информации предотвращает ее загрузку новыми процессами sendmail, но не обнуляет уже имеющуюся у запущенных процессов информацию о статусе.
1. То есть, он выставляет свой эффективный uid соответственно настоящему uid; таким образом, если вы запускаете его как root, или из root'овского файла crontab, или во время запуска системы, пермиссии root будут учтены. [назад]