Настройка программы sendmail
Теперь разберем более подробно некоторые команды и секции файла настроек sendmail. Лучше всего это сделать на основе реального файла. Начнем с секции описания локальных параметров:
##################
# local info
##################
Cwlocalhost
CP.
# UUCP relay host
DYucbvax.Berkeley.EDU
CPUUCP
# BITNET relay host
# DBmailhost.Berkeley.EDU
DBrelay.kiae.su
CPBITNET
#"Smart" relay host (may be null)
DSrelay.kiae.su
# who I send unqualified names to (null means
deliver locally)
DR
# who gets all local email traffic ($R has
precedence
for
unqualified names)
DH
# who I masquerade as (null for no masquerading)
DM
# class L: names that should be delivered locally,
even
if
we have a relay
# class E: names that should be exposed as from
this
host, even
if
we masquerade
#CLroot
CEroot
ft operators that cannot be
in
local usernames
(i.e., network indicators)
CO @
%
!
# a class with just dot (for identifying canonical
names)
C..
# dequoting map Kdequote dequote
Как видно из этого листинга, в данной секции описаны имя данной машины (Cwlocalhost), а также класс машин-шлюзов в другие почтовые системы (СР….). При этом наращивание класса происходит по мере описания шлюза для каждого из видов почтовых служб. В конце секции описаны символы, которые не могут использоваться в качестве имен пользователей или доменов.
Следующая секция – определение макросов send – mail:
##############
# Special macros #
##############
# SMTP initial login message De$j Sendmail $v/$Z ready at $b
# UNIX initial From header format DIFrom $g $d
# my name for error messages DnMAILER-DAEMON
# delimiter (operator) characters
Do.:
%
§!
^
/
[]
# format of a total name
Dq$?x$x
<$g>
$|$g$.
# Configuration version number
DZ8.6.6
В данной секции описаны сообщения, которые выдает sendmail при взаимодействии с другими транспортными агентами. Как видно из этого описания, определение макроса это не только присваивание значения, но и выполнение определенных действий. Наиболее интересное предложение из всех предложение, определяющее значение макроса q:
q$?x$x
<$g>
$|$g$.
Здесь описана условная подстановка значения. Все предложение можно описать следующей фразой: "Если значение переменной х установлено, то: q = значение_х <значение_g>, иначе: q=значение_g".
То же самое можно записать и по-другому:
if
(x !
=
NULL) {
strcpy(q, x);
strcat(q,
"<"
);
strcat(q, g);
strcat(q,
">"
);
}
else
{
strcpy(q, g);
}
То есть, $? соответствует оператору if, $| – else, а $. – конец условного оператора.