Соглашение | Публикация статей

Красивые рольшторы - roll-service.by

Программа Sendmail
Категория: Статьи

Основным средством рассылки почты в Internet является программа sendmail. Она обеспечивает работу модульной системы рассылки, которая предназначена для получения и отправки корреспонденции, а также управления программами подготовки и просмотра почтовых сообщений. Sendmail позволяет организовать почтовую службу локальной сети и обмениваться почтой с другими серверами почтовых служб через специальные шлюзы. Sendmail может быть сконфигурирована для работы с различными почтовыми протоколами. Обычно это протоколы UUCP (Unix-Unix-CoPy) и SMTP (Simple Mail Transfer Protocol).
Sendmail работает как "отделение связи" обычной почтовой службы, которое принимает и пересылает почтовые сообщения. Sendmail может интерпретировать два типа почтовых адресов:
• почтовые адреса SMTP;
• почтовые адреса UUCP.
Первые являются стандартными адресами Internet и, фактически, являются стандартом де-факто. Именно этот адрес обычно указан на визитных карточках.
Sendmail можно настроить для поддержки:
• списка адресов-синонимов;
• списка адресов рассылки пользователя;
• автоматической рассылки почты через шлюзы;
• очередей сообщений для повторной рассылки почты в случае отказов при рассылке;
• работы в качестве SMTP-сервера;
• доступа к адресам машин через сервер доменных имен BIND;
• доступа к внешним серверам имен.
Принцип работы программы sendmail
Sendmail отправляет почту в два приема: сначала почтовые сообщения собираются в очереди, а затем отсылаются.
Каждое сообщение состоит из трех частей: конверта, заголовка и тела сообщения.
Конверт. Конверт состоит из адреса отправителя, адреса получателя и информации рассылки, которая используется программами подготовки, рассылки и получения почты. Конверт остается невидимым для отправителя и получателя почтового сообщения.
Заголовок. Заголовок состоит из стандартных текстовых строк, которые содержат адреса, информацию о рассылке и данные. Заголовок может быть частью подготовленного пользователем текстового файла, а может быть подготовлен и добавлен к телу сообщения программой подготовки почты. Данные из заголовка могут быть использованы для оформления конверта сообщения.
Тело сообщения. Первая пустая строка в файле почтового сообщения отделяет заголовок от тела сообщения. Все, что следует после этой строки, называется телом сообщения и передается по почте без изменений.
Sendmail может быть вызвана:
• программой подготовки сообщений для отправки уже подготовленных сообщений;
• программой получения почты для пересылки полученной из сети почты;
• непосредственно пользователем для отправки по почте файла или короткого сообщения;
• почтовым демоном, которым обычно является сама sendmail.
После того, как почта собрана, начинается ее рассылка. При этом выполняются следующие действия:
• адреса отправителя и получателя преобразуются в формат сети-получателя почты;
• если необходимо, то в заголовок сообщения добавляются строки, позволяющие получателю отвечать на принятое сообщение (например: FROM: <адрес>);
• почта передается одной из программ рассылки почты.
На рисунке 3.1 представлена схема функционирования почтового сервера на базе программы sendmail.
Когда программа приема почты получает сообщение, она передает его программе sendmail для последующей рассылки. Если сообщение достигло машины адресата, то оно отправляется программой местной рассылки в почтовый ящик пользователя.
Первый этап рассылки - сбор сообщений. Sendmail получает почтовые сообщения из трех источников:
• командной строки или стандартного ввода;
• через SMTP-протокол (из сети);
• из очереди сообщений.
При получении сообщений из командной строки или стандартного ввода, sendmail вызывается пользователем с указанием адреса доставки сообщения. При этом выполняются следующие действия: определяется адрес отправителя, выбирается из командной строки адрес получателя и оба адреса преобразуются в соответствии с описанием файла конфигурации, определяется способ доставки сообщения, размещается заголовок в оперативной памяти для последующих преобразований, а тело сообщения размещается во временном файле для отправки без изменений.
При получении сообщений по протоколу SMTP, sendmail используется как программа клиента и сервера протокола. Протокол определен в RFC-821 и является основным для рассылки почты в Internet. В этом случае sendmail запускается как демон, который "слушает" порт TCP и в случае получения сообщения устанавливает соединение с удаленным клиентом SMTP. Как правило, таким клиентом является другая программа sendmail.
Программа подготовки почты на локальной машине также может использовать SMTP. Для этого sendmail открывает канал (pipe) межпроцессного обмена.
При получении сообщений из очереди используются временные файлы очередей. Эти очереди используются для хранения неразосланных сообщений. Сообщение хранится в двух файлах. В одном файле хранится тело сообщения, а в другом конверт и заголовок сообщения. Обычно sendmail опрашивает очереди через определенные администратором почтового сервера промежутки времени, на предмет наличия в них неразосланных сообщений.

Рис. 3.1. Схема почтового взаимодействия на базе программы Sendmail
Вторая стадия рассылки почты - рассылка сообщений.
Как только одним из описанных выше способов sendmail получила сообщение, делается попытка его отправить по адресу. Для этого sendmail определяет три параметра: программу рассылки, узел сети и получателя. Эта процедура производится по правилам, которые содержатся в файле конфигурации. Sendmail сохраняет одну копию тела сообщения во временном файле, а заголовок загружает в оперативную память. Для каждого сообщения программа доставки (рассылки) сообщений вызывается отдельно. Если сообщение должно быть доставлено на разные машины, то для каждой из машин также вызывается своя программа доставки. Некоторые программы могут обслуживать сразу несколько абонентов одной машины, если это невозможно, то для каждого абонента вызывается также своя программа доставки. Рассматривают два типа рассылки: на удаленную машину и местную рассылку.
Рассылка на удаленную машину. Для вызова программы рассылки sendmail открывает pipe и запускает программу рассылки, командная строка которой находится в файле конфигурации. Sendmail записывает заголовок и тело сообщения в pipe. Если программа рассылки не использует протокол SMTP, то адрес получателя передается через pipe. Если используется SMTP, то открывается двунаправленный канал для интерактивного взаимодействия с удаленным сервером SMTP. Если в качестве транспортного протокола используется TCP, то sendmail не запускает внешнюю программу рассылки, а сама инициирует TCP-соединение с удаленным сервером SMTP.
Доставка местной почты. Если sendmail определяет, что адреса доставки местные, то происходит обращение к файлу адресных синонимов и производится преобразование адресов (расширение). Файл адресных синонимов можно использовать для перенаправления почты в файлы или для обработки местными программами. Пользователь может иметь и свой собственный файл адресных синонимов для управления рассылкой персональной почты. После преобразования адресов почта отправляется программе местной рассылки (например rmail).
Важным моментом при работе sendmail является алгоритм определения типа адресов. При использовании стандартного файла конфигурации применяются следующие правила: почта рассылается в соответствии с форматом адреса получателя, адреса при этом бывают местные, UUCP и SMTP.
Местные адреса имеют вид:
user
user@localhost
user@localhost.localdomain
user@alias
user@alias.localdomain
user@[local.host.internet.address]
localhost!user
localhost!localhost!user
user@localhost.uucp
Местный адрес - это адрес, который распознается как адрес машины, с которой осуществляется отправка почты.
Адреса UUCP имеют вид:
host!user
host!host!user
user@host.uucp
Если машина, с которой отправляется почта, имеет прямую линию связи по протоколу UUCP со следующей машиной (в адресе), то почта передается на эту машину, если такого соединения нет, то почта не рассылается и выдается сообщение об ошибке. Файл конфигурации должен содержать детальное описание маршрутов для пересылки сообщений на машины по протоколу UUCP.
Адреса SMTP - это адреса, описанные в стандарте RFC-822 или стандартные адреса Internet. Эти адреса имеют вид:
usr@host
usr@host.domain
<@host1,@host2,@host3:user@host4>
user@[remote.host`s.internet.address]
Почта с адресами SMTP рассылается по протоколу SMTP.
Если в системе для адресации используется Berkeley Internet Name Domain (BIND) сервер, то sendmail может определять адреса получателей, используя сервис BIND. Если BIND не используется, то sendmail сама определяет адреса.
При рассылке почты можно использовать и смешанную адресацию:
user%hostA@hostB - почта отправляется с машины hostB на машину hostA
user!hostA@hostB - почта отправляется с машины hostB на машину hostA
hostA!user%hostB - почта отправляется с hostA на hostB
Подводя итог обсуждению принципов работы sendmail, следует специально подчеркнуть тот факт, что почта реально рассылается двумя принципиально разными способами. При использовании протокола UUCP почта рассылается по принципу "stop-go", т.е. сообщения передаются от машины к машине по указанному в адресе пути. Следует ясно представлять, если почта ушла с машины отправителя, то это не означает, что она поступит получателю. Промежуточная машина может вернуть почту назад, если не сможет разослать. Электронная почта действительно работает как система обычной почты, физически перемещая и храня сообщения на промежуточных почтовых станциях. При работе по протоколу SMTP почта реально отправляется только тогда, когда установлено интерактивное соединение с программой-сервером на машине-получателе почты. При этом происходит обмен командами между клиентом и сервером протокола SMTP в режиме on-line. При смешанной адресации доставка почты происходит по смешанному сценарию. Как шла доставка и как маршрутизировалось сообщение можно определить из заголовка сообщения, которое вы получили.
Анализ типа адресов в программе sendmail - это самый главный процесс, т.к. по типу адреса получателя sendmail определяет каким способом сообщение будет разослано. Вызов программы доставки вмонтирован в правила преобразования адресов отправителя и получателя. При этом как только система решит, что дальнейшее преобразование адреса нецелесообразно, так сразу вызывается программа доставки. Наибольшее число сообщений об ошибках при рассылке сообщений связано как раз с определением адреса получателя. В этом процессе принимают участие, по крайней мере, два сервиса Internet: система рассылки почтовых сообщений и служба доменных имен. Sendmail постоянно обращается к службе доменных имен на предмет канонизации имен электронной почты сверяет эти имена с теми, которые закреплены за компьютером, на котором данная система установлена. Если имена совпадают, то осуществляется местная рассылка по адресам местной почты.
Настройка программы sendmail
Настройка программы sendmail происходит при помощи файла /etc/sendmail/conf. Этот файл можно разбить на несколько частей:
Описание особенностей данной машины (local information) - в данной секции описываются такие параметры, как имя данной машины, имя UUCP и т.п.
• Описание макроопределений sendmail, отвечающих за работу в локальной сети, например, имя домена и "официальное имя" машины.
• Описание классов, т.е. групп имен, которые используются программой для рассылки почты. Например, для рассылки в другие почтовые службы.
• Номер версии файла конфигурации. Данная переменная должна изменяться каждый раз, как только в файл конфигурации вносятся какие-либо изменения.
• Внутренние макроопределения sendmail. В данном разделе присваиваются значения переменным, которые sendmail использует при взаимодействии с другими транспортными агентами.
• Опции команды sendmail. Опции определяют режимы работы программы. Опции можно задавать в виде параметров командной строки, а можно в виде описаний в файле настройки.
• Определение порядка сообщений программы sendmail (Precedence). Обычно эта секция не модифицируется администратором.
• Доверенные пользователи. В данной секции описываются пользователи, которым разрешено переписывать адреса отправителей, т.е. выступать не под тем адресом, который за ними закреплен.
• Описание формата заголовка почтового сообщения. В данной секции определяются поля и их формат, которые отображаются в заголовке. Многие поля заголовка sendmail генерирует на основе информации из конверта почтового сообщения.
• Правила преобразования адресов. Это самая большая часть файла конфигурации программы sendmail. Преобразование адресов необходимо для принятия программой решений о пути рассылки почтовых сообщений, т.к. это решение принимается на основе полученного в результате преобразований почтового адреса.
• Описание программ рассылки. В данной секции описываются имена программ рассылки, пути и параметры командной строки этих программ. Обычно это программа местной рассылки, рассылка по UUCP, рассылка по SMTP, рассылка на выполнение.
• Общий набор правил преобразования адресов, который не меняется от машины к машине и от конфигурации к конфигурации (Rule Set 0).
• Машинно-зависимая часть общего правила преобразования адресов. В данной секции содержание определяется способом рассылки почты. Например, данная секция при рассылке по SMTP будет отличаться от случая рассылки по UUCP.
В большинстве случаев все изменения, которые приходиться внести в файл конфигурации, касаются только имени машины, домена и машин шлюзов в другие почтовые службы. Однако, если у организации имеется достаточно продолжительная и славная история использования электронной почты, то может оказаться, что для нормального функционирования придется произвести и ряд более существенных изменений.
В целом все описанные выше секции решают три основных задачи:
• определение окружения sendmail,
• анализ и преобразование адресов электронной почты,
• рассылка сообщений при помощи программ рассылки.
При редактировании файла следует учитывать некоторые правила, которые используются при написании файла конфигурации: вся информация локального характера сосредоточена в начале файла, команды одного типа собраны в компактные группы, большую часть файла составляют правила преобразования адресов, в конце файла описаны программы рассылки электронной почты.
Все команды, которые используются в файле настроек sendmail можно представить в виде следующей таблицы:
Команда Синтаксис Назначение
Define Macro Dxvalue Установить значение "x"
Define Class Ссword1 word2 ... Установить значение класса "c"
Define Class Fcfile загрузить значение класса из файла
Set Option Oovalue Установить значение опции "o"
Trusted Users Tuser1 user2 ... Определить доверенных пользователей
Set Precedence Pname=number Для номера ошибки number установить имя name
Define Mailer Mname,[field=value] Определить программу рассылки почты
Define Header H[?mflag?]name:format Определить формат поля заголовка
Set Rulset Sn Начать определение набора правил преобразования адресов
Define Rule Rlhs rhs comment Определить правило преобразования адреса
Теперь разберем более подробно некоторые команды и секции файла настроек 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
# 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), а также класс машин-шлюзов в другие почтовые системы (CP....). При этом наращивание класса происходит по мере описания шлюза для каждого из видов почтовых служб. В конце секции описаны символы, которые не могут использоваться в качестве имен пользователей или доменов.
Следующая секция - определение макросов sendmail:
######################
# Special macros #
######################
# SMTP initial login message
De$j Sendmail $v/$Z ready at $b
# UNIX initial From header format
DlFrom $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:
Dq$?x$x <$g>$|$g$.
Здесь описана условная подстановка значения. Все предложение можно описать следующей фразой:
"Если значение переменной x установлено, то: q = значение_x <значение_g>, иначе: q=значение_g".
То же самое можно записать и по-другому:
if(x!=NULL)
{
strcpy(q,x);
strcat(q," <");
strcat(q,g);
strcat(q,">");
{
else
{
strcpy(q,g);
}
В данном случае $? соответствует оператору if, $| - else, а $. - конец условного оператора.
Следующая секция - это определение опций:
###############
# Options #
###############
# strip message body to
7 bits on input?
#O7False
# Insist that the BIND
name server be running to resolve names
OI
# deliver MIME-encapsulated
error messages?
OjTrue
В данном случае приведен только фрагмент этой секции. Большинство параметров общие для всех установок sendmail. Указанные же в листинге параметры являются принципиальными с точки зрения режимов работы sendmail. Первый параметр определяет тот факт, что по почте можно пересылать семибитовую информацию. Согласно RFC-822 информация должна быть семибитовая, но для передачи кириллицы это значит использовать кодирование, что абсолютно не приемлемо. Поэтому данный параметр должен быть закоментарен. В системах, где используется сервер доменных имен, опция I (OI) должна быть установлена, чтобы не было ошибок при идентификации доменов. Последний параметр не является принципиальным, но для целей более понятного представления его следует установить. Если почтовый клиент не поддерживает MIME, то данный параметр следует закоментарить.
Следующие две секции определяют уровень сообщений об ошибках и доверенных пользователей:
###########################
# Message precedence
#
###########################
Pfirst-class=0
Pspecial-delivery=100
Plist=-30
Pbulk=-60
Pjunk=-100
#####################
# Trusted users #
#####################
Troot
Tdaemon
Tuucp
За этими двумя секциями следует секция описания полей заголовка почтового сообщения, который генерируется программой sendmail:
#########################
# Format of headers
#
#########################
H?P?Return-Path: $g
HReceived: $?sfrom $s
$.$?_($?s$|from $.$_) $.by $j ($v/$Z)$?r with $r$. id $i$?u for
$u$.; $b
H?D?Resent-Date: $a
H?D?Date: $a
H?F?Resent-From: $q
H?F?From: $q
H?x?Full-Name: $x
HSubject:
# HPosted-Date: $a
# H?l?Received-Date: $b
H?M?Resent-Message-Id:
<$t.$i@$j>
H?M?Message-Id: <$t.$i@$j>
Формат команд данной секции определяет какие поля включаются в заголовок, а какие не включаются. Данная секция тесно связана с секцией определения программ рассылки почты. Если после H нет знака вопроса, то поле включается в заголовок сообщения для любой программы рассылки, если после H символ "?" присутствует, то в строке аргументов программы рассылки данный флаг должен быть определен для того, чтобы данное поле было включено в заголовок. Как следует из приведенного выше описания, всегда включаются только поля Received и Subject. Все перечисленные поля не являются обязательными полями заголовка.
Следующая секция - правила преобразования адресов. Но прежде чем обсуждать ее содержание следует сказать как и когда sendmail эти адреса преобразовывает.
Прежде всего необходимо рассмотреть схему преобразования (рисунок 3.3).

Рис. 3.3. Правила
При получении почтового сообщения адреса, указанные в полях To, From, Cc, преобразуются в соответствии с правилами преобразования.
######################################################################
######################################################################
#####
##### REWRITING RULES
#####
######################################################################
######################################################################

###########################################
### Rulset 3 - Name Canonicalization ###
###########################################
S3
# handle null input (translate to <@> special case)
R$@ $@ <@>
# basic textual canonicalization -- note RFC733 heuristic here
R$*<$*>$*<$*>$* $2$3<$4>$5 strip multiple <> <>
R$*<$*<$+>$*>$* <$3>$5 2-level <> nesting
R$*<>$* $@ <@> MAIL FROM:<> case
R$*<$+>$* $2 basic RFC821/822 parsing
# handle list:; syntax as special case
R$*:;$* $@ $1 :; <@>
# make sure <@a,@b,@c:user@d> syntax is easy to parse -- undone later
R@ $+ , $+ @ $1 : $2 change all "," to ":"
# localize and dispose of route-based addresses
R@ $+ : $+ $@ $>96 < @$1 > : $2 handle <route-addr>
# find focus for list syntax
R $+ : $* ; @ $+ $@ $>96 $1 : $2 ; < @ $3 > list syntax
R $+ : $* ; $@ $1 : $2; list syntax
# find focus for @ syntax addresses
R$+ @ $+ $: $1 < @ $2 > focus on domain
R$+ < $+ @ $+ > $1 $2 < @ $3 > move gaze right
R$+ < @ $+ > $@ $>96 $1 < @ $2 > already canonical
# do some sanity checking
R$* < @ $* : $* > $* $1 < @ $2 $3 > $4 nix colons in addrs

# convert old-style addresses to a domain-based address
R$- ! $+ $@ $>96 $2 < @ $1 .UUCP > resolve uucp names
R$+ . $- ! $+ $@ $>96 $3 < @ $1 . $2 > domain uucps
R$+ ! $+ $@ $>96 $2 < @ $1 .UUCP > uucp subdomains
# if we have % signs, take the rightmost one
R$* % $* $1 @ $2 First make them all @s.
R$* @ $* @ $* $1 % $2 @ $3 Undo all but the last.
R$* @ $* $@ $>96 $1 < @ $2 > Insert < > and finish
# else we must be a local name

################################################
### Ruleset 96 - bottom half of ruleset 3 ###
################################################
# At this point, everything should be in a "local_part<@domain>extra" format.
S96
# handle special cases for local names
R$* < @ localhost > $* $: $1 < @ $j . > $2 no domain at all
R$* < @ localhost . $m > $* $: $1 < @ $j . > $2 local domain
R$* < @ localhost . UUCP > $* $: $1 < @ $j . > $2 .UUCP domain
R$* < @ [ $+ ] > $* $: $1 < @@ [ $2 ] > $3 mark [a.b.c.d]
R$* < @@ $=w > $* $: $1 < @ $j . > $3 self-literal
R$* < @@ $+ > $* $@ $1 < @ $2 > $3 canon IP addr
# pass UUCP addresses straight through
R$* < @ $+ . UUCP > $* $@ $1 < @ $2 . UUCP . > $3
# pass to name server to make hostname canonical
R$* < @ $* $~P > $* $: $1 < @ $[ $2 $3 $] > $4
# local host aliases and pseudo-domains are always canonical
R$* < @ $=w > $* $: $1 < @ $2 . > $3
R$* < @ $* $=P > $* $: $1 < @ $2 $3 . > $4
R$* < @ $* . . > $* $1 < @ $2 . > $3
# if this is the local hostname, make sure we treat is as canonical
R$* < @ $j > $* $: $1 < @ $j . > $2

##################################################
### Ruleset 4 - Final Output Post-rewriting ###
##################################################
S4
R$*<@> $@ $1 handle <> and list:;
# strip trailing dot off possibly canonical name
R$* < @ $+ . > $* $1 < @ $2 > $3
# externalize local domain info
R$* < $+ > $* $1 $2 $3 defocus
R@ $+ : @ $+ : $+ @ $1 , @ $2 : $3 <route-addr> canonical
R@ $* $@ @ $1 ...and exit
# UUCP must always be presented in old form
R$+ @ $- . UUCP $2!$1 u@h.UUCP => h!u
# delete duplicate local names
R$+ % $=w @ $=w $1 @ $j u%host@host => u@host

##############################################################
### Ruleset 97 - recanonicalize and call ruleset zero ###
### (used for recursive calls) ###
##############################################################
S97
R$* $: $>3 $1
R$* $@ $>0 $1

######################################
### Ruleset 0 - Parse Address ###
######################################
S0
R<@> $#local $: <> special case error msgs
R$* : $* ; $#error $@ USAGE $: "list:; syntax illegal for recipient addresses"
R<@ $+> $#error $@ USAGE $: "user address required"
R<$* : $* > $#error $@ USAGE $: "colon illegal in host name part"
# handle numeric address spec
R$* < @ [ $+ ] > $* $: $>98 $1 < @ [ $2 ] > $3 numeric internet spec
R$* < @ [ $+ ] > $* $#smtp $@ [$2] $: $1 < @ [$2] > $3 still numeric: send
# now delete the local info -- note $=O to find characters that cause forwarding
R$* < @ > $* $@ $>97 $1 user@ => user
R< @ $=w . > : $* $@ $>97 $2 @here:... -> ...
R$* $=O $* < @ $=w . > $@ $>97 $1 $2 $3 ...@here -> ...

# handle local hacks
R$* $: $>98 $1
# short circuit local delivery so forwarded email works
R$+ < @ $=w . > $: $1 < @ $2 . @ $H > first try hub
R$+ < $+ @ $+ > $#local $: $1 yep ....
R$+ < $+ @ > $#local $: @ $1 nope, local address
# resolve remotely connected UUCP links (if any)
# resolve fake top level domains by forwarding to other hosts
R$*<@$+.BITNET.>$* $: $>95 < $B > $1 <@$2.BITNET.> $3 user@host.BITNET
# forward non-local UUCP traffic to our UUCP relay
R$*<@$*.UUCP.>$* $: $>95 < $Y > $1 <@$2.UUCP.> $3 uucp mail
# pass names that still have a host to a smarthost (if defined)
R$* < @ $* > $* $: $>95 < $S > $1 < @ $2 > $3 glue on smarthost name
# deal with other remote names
R$* < @$* > $* $#smtp $@ $2 $: $1 < @ $2 > $3 user@host.domain
# if this is quoted, strip the quotes and try again
R$+ $: $(dequote $1 $) strip quotes
R$+ $=O $+ $@ $>97 $1 $2 $3 try again
# handle locally delivered names
R$=L $#local $: @ $1 special local names
R$+ $#local $: $1 regular local names

###########################################################################
### Ruleset 5 - special rewriting after aliases have been expanded ###
### (new sendmail only) ###
###########################################################################
S5
# see if we have a relay or a hub
R$+ $: < $R > $1 try relay
R< > $+ $: < $H > $1 try hub
R< > $+ $@ $1 nope, give up
R< $- : $+ > $+ $: $>95 < $1 : $2 > $3 < @ $2 >
R< $+ > $+ $@ $>95 < $1 > $2 < @ $1 >

###################################################################
### Ruleset 95 - canonify mailer:host syntax to triple ###
###################################################################
S95
R< > $* $@ $1 strip off null relay
R< $- : $+ > $* $# $1 $@ $2 $: $3 try qualified mailer
R< $=w > $* $@ $2 delete local host
R< $+ > $* $#relay $@ $1 $: $2 use unqualified mailer

###################################################################
### Ruleset 98 - local part of ruleset zero (can be null) ###
###################################################################
S98
За секцией преобразования адресов следует секция определения программ рассылки почты. В ней определяется локальная программа рассылки (mail), программа рассылки для выполнения (sh) и программа рассылки по SMTP.
##################################################
### Local and Program Mailer specification ###
##################################################
Mlocal, P=/usr/libexec/mail.local, F=lsDFMrmn, S=10, R=20/40,
A=mail -d $u
Mprog, P=/bin/sh, F=lsDFMeu, S=10, R=20/40, D=$z:/,
A=sh -c $u
S10
R<@> $n errors to mailer-daemon
R$+ $: $>40 $1
S20
R$+ < @ $* > $: $1 strip host part
S40

#####################################
### SMTP Mailer specification ###
#####################################
Msmtp, P=[IPC], F=mDFMuX, S=11/31, R=21, E=\r\n,
L=990, A=IPC $h
Mesmtp, P=[IPC], F=mDFMuXa, S=11/31, R=21, E=\r\n,
L=990, A=IPC $h
Mrelay, P=[IPC], F=mDFMuXa, S=11/31, R=61, E=\r\n,
L=2040, A=IPC $h
Затем идут правила определения локального преобразования адресов для конкретных программ рассылки, в частности набор правил S11.
# envelope sender and masquerading recipient rewriting
#
S11
R$+ $: $>51 $1 sender/recipient common
R$* :; <@> $@ $1:; list:; special case
R$* $@ $>61 $1 qualify unqual'ed names
В секции программ рассылки мы в нашем примере не указали еще одну важную возможность - рассылку по протоколу UUCP:
Мuucp, P=/usr/bin/uux, F=DFMhuU, S=13, R=23, M=100000,
A=uux - -r -z -a$f -gC $h!rmail
Естественно, что правила преобразования адресов S13 и R23 должны быть описаны в файле настроек sendmail.

Посылка электронной почты в другие сети Есть много компьютерных сетей, не являющихся частью Сети, но в настоящий момент подсоединенные через "шлюзы", которые разрешают прохождение электронной почты. Вот список нескольких самых больших сетей, а также указания о том, как посылать электронную почту в эти сети и как пользователи этих сетей могут посылать свои сообщения вам.
America Online
Уберите все пробелы из имени пользователя и добавьте "aol.com," вот так пользователь@aol.comПользователи сети America Online, которые хотят послать сообщение вам, должны только подставить ваш адрес в Сети в поле "to:" (кому) перед составлением сообщения.
ATTMail
Адресуйте свое сообщение к пользователь@attmail.com. Пользователь ATTMail может послать сообщение вам следующим образом:
internet!домен!пользователь
Если ваш адрес - nancyr@world.std.com, то ваш корреспондент мог бы послать вам сообщение по адресу:
internet!world.std.com!nancyr
Bitnet
Пользователи Bitnet (или NetNorth в Канаде и EARN в Европе) часто имеют адреса вида: IZZY@INDVMS. Если вам повезет, то для посылки сообщения по таком адресу надо только добавить "bitnet" в конце, чтобы получилось izzy@indvms.bitnet. Иногда случается, что письмо на такой адрес вернется не доставленным, поскольку адреса Bitnet не всегда хорошо переводятся в форму Internet. Если это случится, можно послать сообщение через один из двух шлюзов Internet/Bitnet. Прежде всего замените @ на %, чтобы получилось имя_пользователя%подсистема.bitnet. Затем добавьте либо @vm.marist.edu, либо @cunyvm.cuny.edu, чтобы, как в приведенном выше примере, получилось izzy%indyvms.bitnet@vm.marist.edu и
izzy%indvyvms.bitnet@cunyvm.cuny.edu
Для пользователей Bitnet задача несколько проще: они с легкостью могут посылать письмо прямо на ваш электронный адрес без всех этих глупостей. Так что посылайте им ваш адрес, и все будет в порядке.
CompuServe
У пользователей CompuServe адреса цифровые и имеют следующий вид: 73727,545. Чтобы послать письмо пользователю CompuServe, замените запятую точкой и добавьте
"@compuserve.com"; например:
73727.545@compuserve.com.
Имейте в виду, что некоторые пользователи CompuServe должны вносить дополнительную плату за получение почты из Internet. Если вы знаете пользователей CompuServe, которые хотят посылать вам сообщения, посоветуйте им обратиться к GO MAIL и создать сообщение. В области адреса вместо ввода номера CompuServe пусть они напишут ваш адрес в форме:
>INTERNET:Ваш_Идентификатор@Ваш_Адрес.
Например, >INTERNET:adamg@world.std.com. Заметьте, что оба символа ">" и ":" обязательны.
Delphi
Для посылки сообщения пользователю Delphi адрес имеет форму имя_пользователя@delphi.com.
Fidonet
Чтобы послать сообщение пользователю какой-то доски объявлений (BBS) Fidonet, нужно знать имя, под которым он регистрируется в системе и его "номер узла". Номер узла, или адрес Fidonet состоит из трех номеров и имеет вид: 1:322/190. Первый номер сообщает, в какой из нескольких больших географических зон находится BBS (1 - США и Канада, 2 - Европа и Израиль, 3 - Азиатско-Тихоокеанский регион, 4 - Южная Америка). Второй номер определяет сеть BBS, а последний номер есть "номер узла" ("FidoNode") - номер BBS в этой сети. Если у вашего корреспондента только два номера (например, 322/190), это означает, что система находится в зоне 1. Вот теперь фокус. Вы должны изменить порядок номеров и добавить к ним буквы f, n и z (первые буквы "FidoNode" (узел Fido), "network" (сеть) и "zone" (зона)). Например, приведенный выше адрес будет иметь вид f190.n322.z1. Теперь добавьте в конце "fidonet.org", чтобы получилось f190.n322.z1.fidonet.org. Теперь добавьте "Имя.Фамилия@", чтобы получилось имя.Фамилия@f190.n322.z1.fidonet.org. Отметьте наличие точки между именем и фамилией. Кроме того, в некоторых странах есть их собственные "хребтовые" системы Fidonet, которые могут менять адресацию. Например, если бы предыдущий адрес относился к Германии, то в конце надо было бы добавить "fido.de" вместо "fidonet.org."
Обратный процесс отличается от описанного полностью. Прежде всего человек должен выйти на "net mail" (сетевую почту) зоны своей BBS и знать адрес Fidonet своего локального шлюза Fidonet/UUCP (часто его знает системный оператор). Ваш корреспондент из Fidonet должен адресовать свое сообщение сетевой почты, указав в поле "to:" UUCP (а не ваше имя). В поле номер узла, он должен ввести номер узла шлюза Fidonet/UUCP (если система шлюза находится в той же региональной сети, что и система отправителя, то ввести надо только последний номер, например, 390 вместо 322/390). После этого первая строка сообщения должна быть вашим адресом в Internet, а за ней должна быть оставлена чистая строка. Вот теперь можно писать сообщение и посылать его. В связи с тем, как Fidonet организует передачу почты, доставка сообщения в любом направлении может занять день или два. Кроме того, поскольку сеть систем Fidonet - любительская, хорошим тоном считается спросить разрешения у системного оператора в тех случаях, когда вы собираетесь прогонять по почте большой объем информации. Сообщения коммерческого характера категорически воспрещаются (даже если вас о них просили). Кроме того, очень вероятно, что кроме вашего адресата сообщение прочтет еще кто-нибудь.
GEnie
Чтобы послать сообщение пользователю GEnie, добавьте "@genie.com" к концу имени пользователя сети GEnie, например: walt@genie.com.
MCIMail
Чтобы послать сообщение кому-нибудь, имеющему раздел в MCIMail, добавьте "@mcimail.com" в конце имени или адреса этого человека. Например:
555-1212@mcimail.com
или
jsmith@mcimail.com
Заметьте, что если в сети MCIMail есть несколько подписчиков с таким именем, то вы получите сообщение от MCI с их именами и числовыми адресами. Выберите того, который вам нужен, и пошлите ваше сообщение снова. Чтобы послать сообщение вам из MCI, пользователь должен ввести
Ваше Имя (EMS)
в ответ на приглашение "To:". В ответ на приглашение EMS следует ввести
internet
а затем ваш адрес в Сети в ответ на приглашение "Mbx:".
Peacenet
Чтобы послать сообщение пользователю, используется форма:
имя_пользователя@igc.org
Подписчики Peacenet могут посылать сообщения по вашему обычному адресу.
Prodigy
Идентификатор_пользователя@prodigy.com. Имейте в виду, что пользователи Prodigy должны вносить дополнительную плату за электронную почту из Internet.


Статьи по теме:

Этапы решения задачи на ЭВМ
Охранно-пожарные системы фирмы Satel теперь можно контролировать по телефону или Ethernet
Настройка Главного меню Microsoft Windows XP
Глобальный уровень
Основные физические и логические параметры жестких дисков
Поддержка драйвера сжатых дисков в MS DOS
Некоторые характеристики ПЛАТЕЖНОЙ СИСТЕМЫ
Внедрение Crm Системы Quick Sales 2 В Компании «Эпос»
Активация Windows XP
Icq И Другие: Основы Безопасности
Работа со сжатыми дисками
ПРОЯВЛЕНИЕ НАЛИЧИЯ ВИРУСА В РАБОТЕ НА ПЭВМ
Ms Word Vs Notepad
Материнская плата
Структура функционирования сети
Назначение деловых игр
Информационное общество: необходимость государственного
Теория фреймов
Восстановление файлов миф или реальность?
Что составляет Internet?
МЕТОДЫ ЗАЩИТЫ ОТ КОМПЬЮТЕРНЫХ ВИРУСОВ
Поколения ЭВМ
Поиск людей (Кто есть Who)
Устройства ввода
Электронный подход
Микроконтроллерыне Системы
Получение изображений со сканера или цифровой камеры
Приостановка печати документа
Зачем Нам Нужен План Управления Конфигурациями? Основные Понятия И Концепции Документа
Нормативно-техническая документация
Общая схема расследования неправомерного доступа к компьютерной информации
Разработка и распространение компьютерных вирусов
Физические основы организации квантовых компьютеров
Региональная Система Имен
Проблемы, возникающие при созданииЭС
Компьютерные Технологии И Генеалогия
Graycatsoft - Сайт Программного Обеспечения
Российские национальные IP-сети
Защита регистрации
ЭВМ в магазинах самообслуживания
СТРУЙНЫЕ ПЛОТТЕРЫ (СП, INK-JET PLOTTER)
Отремонтируйте разрешения для вялого компьютера
Свежая Версия Mobile Forex 2.16: Комфортный Мобильный Трейдинг
Возможные проблемы при загрузке Windows
Локальные шины
Самая популярная операционная система сегодня для CompactPCI систем
Обмен данными : Excel - другие приложения
Полезные советы - программа Picasa
Темп развития CompactPCI
Сети
Кредитные карты и Internet
Виртуальная память
Друкувальні пристрої, графобудівники
Просмотр видеодисков в формате MPEG 4 и DVD
Административное устройство Internet