Опубликован: 21.11.2006 | Уровень: специалист | Доступ: платный
Лекция 10:

Программа sendmail

Определение заголовка с помощью Н-строк

Строки конфигурации, которые начинаются с " Н ", определяют формат строк заголовка, которые помещаются программой sendmail в сообщение. В строках заголовка употребляются макросы и флаги макросов, которые определяют соответствующий синтаксис заголовка почтового сообщения, в зависимости от протокола, используемого для доставки сообщения. Узлы SMTP и хосты UUCP принимают сообщения с различными заголовками. Формат Н -строки следующий:

H[?mflags?]hname:htemplate,

где mflags — флаги макроса, которые должны быть указаны вместе с самим макросом, hname — имя строки заголовка, а htemplate — формат строки заголовка с макросом в ней. Перед помещением в исходящее сообщение макросы преобразуются в свои нормальные имена.

Для передачи сообщения определенному набору правил, если имеется специальный заголовок, используется еще один формат Н -строки:

Hheader:$>Ruleset,

где header — поле заголовка, а Ruleset — номер набора правил (см. раздел "Наборы правил" далее в этой лекции). Пример применения Н-строк представлен в листинге 10.4.

1 H?P?Return-Path: <$g>
2 HReceived: $?sfrom $s $.$?_($?sS|from $.$_)
3 $.by $j ($v/$Z)$?r with $r$, id $i$?u
4 for $u; $|;
5 $.$b
6 H?D?Resent-Date: $a
7 H?D?Date: $a
8 H?F?Resen-From: $?x$x <$g>$|$g$.
9 H?F?From: $?x$x <Sg>$|$g$.
10 H?x?Full-Name: $x
11 # HPosted-Date: $a
12 # H?l?Received-Date: $b
13 H?M?Resernt-Message-Id: <$t.$i@$j>
14 H?M?Message-Id: <$t.$i@$j>
Листинг 10.4. Пример применения Н- строк в sendmail

В листинге 10.4 строка 1 представляет собой простую Н -строку с условием, которое определяется макросом. Если в ней задан макрос P, который описан ранее в файле sendmail.cf как одиночная точка ( .), то sendmail добавляет поле заголовка Return-Path с макросом $g в качестве данных для этого поля. Как указано в табл. 10.4 макрос $g отображает относительный адрес отправителя. А относительным этот адрес называется потому, что он ставится в соответствие с определенным получателем. Таким образом, Н -строки указывают sendmail добавлять полное имя пользователя и имя хоста в поле заголовка Return-Path, если задан флаг макроса Р.

Конфигурирование почтовой программы с помощью М-строк

Строки конфигурации, которые начинаются с буквы " М ", определяют программу, используемую sendmail для пересылки почты. Различные почтовые программы должны быть описаны для sendmail с помощью М -строк. Тогда ей будет понятно, как работать с ними. Формат М -строки следующий:

Mprog, [field=value]... ,

где prog — имя почтовой программы, а все пары field=value описывают атрибуты, необходимые для работы sendmail с этой программой. В именах полей могут использоваться полные названия полей, хотя в sendmail используются лишь первые символы из названия поля. В табл. 10.7 приведены М -строки полей, которые могут применяться в sendmail.

Таблица 10.7. Поля М- строки в sendmail
Поле Описание
Path Путь к почтовой программе
Flags Флаги для почтовой программы
Sender Набор правил для адреса отправителя
Recipient Набор правил для адреса получателя
Argv Аргументы, которые передаются с почтовой программой
Eoi Метка конца строки, используемая в почтовой программе
Maxsize Максимальная длина сообщения, обрабатываемого почтовой программой
Linelimit Максимальная длина строки, обрабатываемой почтовой программой
Directory Рабочий каталог почтовой программы
Userid Идентификаторы пользователя и группы, используемые по умолчанию при запуске почтовой программы
Nice Значение переменной nice() для почтовой программы
Charset Кодировка, принятая в сообщениях (по умолчанию 8 бит)
Type Тип MTS, используемый в сообщениях об ошибках

Поле Flags используется для определения порядка применения почтовой программы программой sendmail. Флаги определяют действия, которые sendmail может предпринимать при вызове почтовой программы. В поле Flags может использоваться сразу несколько флагов. Тогда все они задаются в одной строке без пробелов. В табл. 10.8 дается описание некоторых флагов.

Таблица 10.8. Флаги, задаваемые в М- строке sendmail
Флаг Описание
a Использовать ЕSMTP
A Использовать базу данных псевдонимов
b Принудительно вводить пустую строку в конце сообщения
c Не включать в адреса комментарии
C Добавлять имя локального домена к принятым адресам без символа @
d Не включать квадратные скобки при выводе маршрутной информации
D Включать поле заголовка " Date: "
F Включать поле заголовка " From:"
h Сохранять прописные буквы в именах хостов
l Локальная почтовая программа
m За одну транзакцию почтовая программа может выполнять доставку нескольким пользователям
M Включать поле заголовка Message-ID:
n Не вставлять UNIX-строки типа From:
S Не сбрасывать идентификатор пользователя перед вызовом почтовой программы
u Сохранять прописные буквы в именах пользователей
U Строки From: UUCP-типа
5 Если псевдонимы не определены, для принятия решения использовать набор правил с номером 5
9 Преобразование расширений MIME из 7-битового вида в 8-битовый

В листинге 10.5 в качестве примера приведены некоторые М -строки из файла sendmail.cf.

1 ### SMTP Mailer specification ###
2 Msmtp, P=[IPC], F=mDFMuX, S=11/31, R=21,E=\r\n L=990, T=DNS/RFC822/SMTP,
3 Mesmtp, P=[IPC], F=mDFMuXa, S=11/31, R=21, E=\r\n, L=990, T=DNS/RFC822/SMTP,
4 Msmtp8, P=[IPC], F=mDFMuX8, S=11/31, R=21, E=\r\n, L=990, T=DNS/RFC822/SMTP,
5 Mrelay, P=[IPC], F=mDFMuXa8, S=11/31, R=61, E=\r\n, L=2040, T=DNS/RFC822/SMTP,
6 ### UUCP Mailer specification ###
7 Muucp, P=/usr/bin/uux, F=DFMhuUd, S=12, R=22/42, M=100000,
8 Muucp-old, P=/usr/bin/uux, F=DFMhuUd, S=12, R=22/42, M=100000,
9 Msuucp, P=/usr/bin/uux, F=mDFMhuUd, S=12, R=22/42, M=100000,
10 Muucp-new, P=/usr/bin/uux, F=mDFMhuUd, S=12, R=22/42, M=100000,
11 Muucp-dom, P=/usr/bin/uux, F=mDFMhud, S=52/31, R=21, M=100000,
12 Muucp-uudom, P=/usr/bin/uux, F=mDFMhud, S=72/31, R=21, M=100000,
13 ### PROCMAIL Mailer specification ###
14 Mprocmail, P=/usr/local/bin/procmail, F=DFMSPhnu9, S=11/31, R=21/31, T=DNS/RFC822/X-Unix,
15 ### Local and Program Mailer specification ###
16 Hlocal, P=/usr/local/bin/procmail, F=lsDFMAw5:/|@qSPfhn9, S=10/30, R=20/40,
17 Mprog, P=/bin/sh, F=lsDFMoqeu9, S=10/30, R=20/40, D=$z:/,
Листинг 10.5. Пример применения конфигурационных М- строк

В строках 2–5 листинга 10.5 описываются почтовые программы для работы по протоколу SMTP, а в строках 7–12 почтовые программы для работы с UUCP. В строке 14 описывается почтовая программа procmail, а в строках 16 и 17 определяются почтовые программы, которые используются локальной программой для обработки почты. Для того чтобы sendmail смогла производить запуск соответствующих программ, указываются полные пути к выполняемым файлам почтовых программ. Работая с SMTP-соединениями, программа sendmail может использовать для пересылки почты свои внутренние IP-соединения.

В строке 11 описывается почтовая программа, которая часто применяется для подключения офисов компаний к сети Internet. Программа uucp-dom специально разработана для передачи почтовых сообщений с использованием протокола UUCP, однако в ней имеется поддержка стандартных заголовков сообщения формата RFC822. Узнать, каким образом sendmail пересылает сообщения этой почтовой программе, можно с помощью анализа М -строк:

  • Путь к выполняемому файлу ( P ) /usr/sbin/uux;
  • Флаги, задаваемые выполняемому файлу ( F ):
    • m — sendmail за одну транзакцию может посылать сообщения нескольким пользователям;
    • D — sendmail пересылает поле Date: формата RFC 822;
    • F — sendmail пересылает поле From: формата RFC 822;
    • M — sendmail пересылает поле Message ID: формата RFC 822;
    • h — sendmail сохраняет прописные и заглавные буквы в именах хостов;
    • u — sendmail сохраняет прописные буквы в именах пользователей;
    • d — sendmail не включает квадратные скобки при выводе маршрутной информации;
  • Наборы правил для отправителя — 52 и 31;
  • Набор правил для получателя — 21;
  • Максимальный допустимый размер сообщения для пересылки 100000 байт.

Интереснее выяснить, какой из флагов не представлен в строке 11. Обратите внимание, что в строках 7–10 задан флаг U. Этот флаг sendmail означает, что сообщения должны пересылаться с применением UUCP-стиля для поля From:. Так как протокол в uucp-dom не изменяет формат сообщения, этот флаг должен присутствовать.

Иван Панченко
Иван Панченко
Казахстан, Астана, сш.№16, 2009