Настройка программы 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, а $. – конец условного оператора.
