Каталог :: Программирование и комп-ры

Курсовая: Электронная почта

Международная сеть INTERNET
Одна из первых версий INTERNET была разработана в семидесятых годах
Департаментом Обороны США, чтобы дать возможность исследовательским
институтам, работавшим над особо важными для обороны в то время проблемами,
обмениваться информацией. К тому же предполагалось, что этот способ связи
позволит сохранить обмен информацией между ними в случае такой мировой
катастрофы, как ядерная война. В то время сеть носила название ARPAnet - по
имени организации финансировавшей эти разработки. Основная операционная
система была Unix. В 80-х годах, когда персональные компьютеры начали
получать все более широкое распространение в США, появились сети, связавшие
между собой исследовательские центры университетов. Соединив сети,
университеты получили возможность общаться между собой, подобно оборонным
институтам в семидесятых годах. Однако эта новая связь имела дополнительное
качество: пользователь университетской сети, находясь дома или в школе,
подключаясь к сети, получал также доступ к любому месту, к которому эта сеть
была подсоединена. Такая связь получила название "межсеть" (internet), и,
таким образом, появилась сеть INTERNET, которую назвали основной сетью,
межсетью или сетью сетей.Каждый пользователь INTERNET имеет свой сетевой
адрес. Существует компания (в штате Вирджиния),  которая следит за INTERNET
адресами с тем, чтобы среди пользователей не появилось два одинаковых адреса.
Возможности INTERNET
Существует 7 основных путей использования INTERNET:
ü      Электронная почта. С помощью почтовых программ Outlook Express и
Netscape Messenger
ü      Отправка и получение файлов с помощью FTP (File Transfer Protocol)
ü      Чтение и посылка текстов в USENET
ü      Поиск информации через GOPHER и WWW (World Wide Web)
ü      Удаленное управление - запрос и запуск программ на удаленном компьютере.
ü      Chat-разговор с помощью сети IRC и Электронной почты
ü      Игры через INTERNET
Программы Outlook Express, GOPHER, Netscape Messenger, обеспечивающие
отдельные функции INTERNET, называются "клиентами". Они удобны в
использовании и предоставляют дружественный интерфейс для пользователей
INTERNET. Системы WWW, FTP требуют знания операционной системы UNIX.
Электронная почта
Отправка и получение писем остается пока наиболее популярным видом
использования INTERNET. Существует система LISTSERV, позволяющая создавать
группы пользователей с общей групповой адресацией. Таким образом, письмо,
направленное на групповой адрес, будет получено всеми членами группы.
Например, существует LISTSERV Netterain, объединяющий группу специалистов,
обучающих пользованию INTERNET. Они объединились для того, чтобы обменяться
идеями или задать вопросы своим коллегам, чтобы дать знать, что с ними можно
связаться по электронной почте. В случае если известно, что конкретное лицо
или компания имеют адрес в INTERNET, но сам адрес не известен, существуют
способы узнать его с помощью системы NETFIND.
     

Отправка и получение файлов

FTP – один из самых распространенных протоколов передачи файлов по INTERNET. В начале это была терминальная программа с командной строкой, то сейчас многие FTP- клиенты могут похвалиться удобным интерфейсом и кучей дополнительных возможностей таких как: · Поддержка докачки · Поддержка ННТР · Список очередей

Чтение и посылка текстов

USENET – это сеть информационных серверов. В Usenet порядка 200.000 конференций (это каталог, куда стекаются сообщения на определенную тему), практически на любую тему отведена своя собственная группа. Сервера постоянно обмениваются между собой информацией, в результате происходит естественно обновление новостей. 2 .Электронная почта Для того чтобы иметь возможность обмениваться письмами по электронной почте, пользователь должен стать клиентом одной из компьютерных сетей. Также как и в телефонных сетях, клиенты компьютерных сетей называются абонентами. Для каждого абонента на одном из сетевых компьютеров выделяется область памяти - электронный почтовый ящик. Доступ к этой области памяти осуществляется по адресу, который сообщается абоненту, и паролю, который абонент придумывает сам. Пароль известен только абоненту и сетевому компьютеру. Став абонентом компьютерной сети и получив адрес своего почтового ящика, пользователь может сообщить его друзьям, знакомым. Каждый абонент электронной почты может через свой компьютер и модем послать письмо любому другому абоненту указав в послании его почтовый адрес. Но сделать это можно, только сообщив компьютерной сети свой почтовый адрес и пароль (как доказательство того, что это действительно абонент).Все письма, поступающие на некоторый почтовый адрес, записываются в выделенную для него область памяти сетевого компьютера. Сетевой компьютер, содержащий почтовые ящики абонентов носит название хост компьютера (от host - хозяин). Существуют два основных типа электронной почты. Первый способ, называется off-line (вне линии, вне связи), заключается в том, что при каждом сеансе связи компьютера абонента с сетевым компьютером происходит обмен письмами в автоматическом режиме: все заранее подготовленные письма абонента передаются на сетевой компьютер, а все письма, пришедшие на адрес абонента, передаются на его компьютер. Название off-line подчеркивает тот факт, что сам процесс ознакомления с письмами и их чтение происходит, когда связь с сетевым компьютером уже прекращена. Второй способ, названный, естественно, on-line (на линии, на связи, произносится: онлайн), заключается в том, что абонент во время сеанса связи со своего компьютера получает возможность обратиться к содержимому своего почтового ящика, просмотреть его и прочитать письма. Некоторые письма можно удалить не читая, на другие письма можно сразу дать ответ, воспользовавшись клавиатурой своего компьютера. Можно также послать все заготовленные заранее письма, являющиеся ничем иным как текстовыми файлами. В режиме on-line абонент не пользуется автоматическим режимом, а отсылает все письма сам, указывая их адреса и задавая соответствующую команду сетевому компьютеру. Один компьютер может обслуживать нескольких абонентов. В случае использования on-line сети, каждый абонент осуществляет связь с компьютерной сетью и выполняет необходимые манипуляции для получения или отправки информации в соответствии со своими задачами во время сеанса связи. Для абонентов сети off-line существует возможность иметь отдельный почтовый ящик на одном компьютере. Каждый абонент пользуется только своим почтовым ящиком, а рассылка и получение писем, связь с телеконференциями и обращения к базам данных для всех абонентов, пользующихся данным компьютером, осуществляются автоматически в момент сеанса связи с компьютерной сетью. Такая сложная организация обмена информацией с использованием одного компьютера приводит к необходимости выделения специального администратора для координации всего обмена информацией, осуществления сеансов, связи и обнаружения заблудившихся писем. Адресация Адрес электронной почты, так же как и обычный почтовый адрес должен содержать всю необходимую информацию для того, чтобы письмо дошло до адресата из любой части земного шара. Точно так же, как и почтовый, электронный адрес состоит из двух частей: раздел "Куда" - содержит указание на хост компьютер; раздел "Кому" - содержит учетное имя абонента. В разных системах используются различные способы представления адреса. Например, в системе INTERNET и совместимых с ней разделы "Кому" и "Куда" разделены знаком "@", причем слева указывается "Кому". Например, , где user - учетное имя абонента, а adonis.iasnet.ru - имя хост компьютера (adonis) и указание, как его найти. Раздел "Куда" имеет иерархическую структуру. Уровни иерархии называются доменами (domain - владение, сфера деятельности) и разделены точками. Количество доменов в адресе, вообще говоря, не ограничено. Самый правый домен представляет собой домен верхнего уровня. В данном случае, ru - код России. Для всех стран существуют двухбуквенные коды. Например : · au - Австралия, · br - Бразилия, · by - Беларусь, · ca - Канада, · cn - Китай, · de - Германия, · jp - Япония, · ua - Украина, · uk - Великобритания, · us - США. Домен верхнего уровня не обязательно является кодом страны. Ниже приведены примеры нескольких доменов верхнего уровня: · COM - коммерческие организации и бизнес; · EDU - образовательные учреждения; · NET - структурные организации системы; · ORG - неприбыльные организации; · INT - международный домен. Домен второго уровня дает уточнение для поиска хост компьютера. Это может быть код города или региона, в США - штата. В рассматриваемом случае домен второго уровня указывает на компьютерную сеть Института Автоматизированных систем (iasnet).

2.1. Конверт

Для того чтобы написанное письмо добралось до адресата, надо поместить его в конверт, написать адрес и отправить по почте. Адресат, получив письмо, помимо своего адреса обнаружит на конверте некоторые дополнительные данные, которые могут оказаться полезными. Если на конверте указан обратный адрес, то он может оказаться единственной возможностью для обеспечения отправки ответа. Штемпели почтовых отделений покажут даты прохождения письма через эти учреждения. По аналогии с конвертом каждое письмо, приходящее по электронной почте снабжено "шапкой", имеющей тот же смысл. В зависимости от того, какая телекоммуникационная система используется, структура адреса может выглядеть по-разному. Структура электронного послания в системе INTERNET выглядит следующим образом: From: User Name <> Date:2, November 1998 14:25 To: Cc: Bcc:

Subject: Hello

Первая строка сообщает адрес и имя отправителя. Строка, начинающаяся с Date, содержит дату и время, когда послание было отправлено. Далее указывается адрес получателя. В строке начинающийся с Сс указывает адрес, которому посылается копия письма. В следующей же строке указывается адрес пользователя, которому оправляется, невидимая для адресата, копия письма. Таких строк может быть несколько или не быть ни одной. В следующей строке указывается содержание письма, его заголовок (иногда так делается и с обычными письмами, например в случае, когда организация требует помечать направляемые в нее письма, некоторым кратким сообщением). В предпоследней строке указывается идентификатор послания, его уникальный номер. Если это письмо послано в ответ на некоторое другое письмо, то номер этого исходного письма указывается в последней строке. Для первоначальных, инициативных писем эта строка отсутствует. Однако точный порядок строк шапки послания может меняться от системы к системе. Кроме того, в шапку могут добавляться дополнительные строки, например, Importance - важность послания. Указанный в примере состав шапки послания является обязательным, так как все его компоненты существенны для правильной доставки послания. Сейчас все популярнее становится система электронной почты. Что это такое, каким образом ее можно использовать, как разобраться в адресах E -mail? Эти два вида связи - почтовая и телефонная - стали для нас традиционными, и мы уже хорошо знаем их достоинства и недостатки. А что же такое электронная почта? Электронная почта - обмен почтовыми сообщениями с любым абонентом сети Internet. Существует возможность отправки как текстовых, так и двоичных файлов. На размер почтового сообщения в сети Internet накладывается следующее ограничение - размер почтового сообщения не должен превышать 64 килобайт. Она позволяет пересылать сообщения практически с любой машины на любую, так как большинство известных машин, работающих в разных системах, ее поддерживают. Электронная почта во многом похожа на обычную почту. С ее помощью письмо - текст, снабженный стандартным заголовком (конвертом) - доставляется по указанному адресу, который определяет местонахождение машины и имя адресата, и помещается в файл, называемый почтовым ящиком адресата, с тем, чтобы адресат мог его достать и прочесть в удобное время. При этом между почтовыми программами на разных машинах существует соглашение о том, как писать адрес, чтобы все его понимали. {Электронная почта оказалась во многом удобнее обычной, "бумажной". Не говоря уже о том, что Вам не приходится вставать из-за компьютера и идти до почтового ящика, чтобы получить или отправить письмо, - электронной почтой сообщение в большинстве случаев доставляется гораздо быстрее, чем обычной; - стоит это дешевле; - для отправки письма нескольким адресатам не нужно печатать его во многих экземплярах, достаточно однажды ввести текст в компьютер; - если нужно перечитать, исправить полученное или составленное Вами письмо, или использовать выдержки из него, это сделать легче, поскольку текст уже находится в машине; - удобнее хранить большое количество писем в файле на диске, чем в ящике стола; в файле легче и искать; - и, наконец, экономится бумага.}- лирическое отступление Надежность электронной почты сильно зависит от того, какие используются почтовые программы, насколько удалены друг от друга отправитель и адресат письма, и особенно от того, в одной они сети, или в разных. В наших условиях, пожалуй, лучше полагаться на электронную почту, чем на простую. Если письмо все-таки потерялось, об этом можно узнать достаточно скоро и послать новое. Это самое популярное на сегодня использование Internet у нас в стране. Оценки говорят, что в мире имеется более 50 миллионов пользователей электронной почты. В целом же в мире трафик электронной почты (протокол smtp) занимает только 3.7% всего сетевого. Популярность ее объясняется, как насущными требованиями, так и тем, что большинство подключений - подключения класса ``доступ по вызову'' (с модема), а у нас в России, вообще, в подавляющем большинстве случаев - доступ UUCP. E-mail доступна при любом виде доступа к Internet . Из Internet можно посылать почту в сопредельные сети, если вы знаете адрес соответствующего шлюза, формат его обращений и адрес в той сети. Используя e-mail, можно пользоваться ftp в асинхронном режиме. Существует множество серверов, поддерживающих такие услуги. Вы посылаете e-mail в адрес такой службы, содержащую команду этой системы, например, переслать файл такой-то к вам, и вам приходит автоматически ответ по e-mail с нужным файлом. В таком режиме возможно использование почти всего набора команд обычного ftp. Существуют серверы, позволяющие получать файлы по ftp не только с них самих, но с любого ftp-сервера, который вы укажете в своем послании e-mail.. E-mail дает возможность проводить телеконференции и дискуссии. Для этого используются, установленные на некоторых узловых рабочих машинах, mail reflector-ы. Пользователь посылает туда сообщение с указанием подписать его на такой-то рефлектор (дискуссию, конференцию, etc.), и начинает получать копии сообщений, которые туда посылают участники обсуждения. Рефлектор почты просто по получении электронных писем рассылает их копии всем подписчикам. E- mail дает возможность использования в асинхронном режиме не только ftp, но и других служб, имеющих подобные сервера, предоставляющие такие услуги. Например, сетевых новостей, Archie, Whois. Пересылать по e-mail можно и двоичные файлы, не только текстовые. В UNIX, например, для этого используется программы UUENCODE и UUDECODE. При пользовании e-mail, из-за ее оперативности, может сложиться ощущение телефонной связи, но всегда следует осознавать, что это все же почта. Все сообщения письменны, поэтому почти документированы. Желательно придерживаться этикета, принятого в обычной корреспонденции. В дополнение к этому надо помнить , что e-mail не обладает той степенью приватности, как обычная почта, никогда не писать в посланиях e-mail ничего, чего бы не хотелось увидеть выставленным на всеобщее обозрение. Анонимность также исключена: источник прослеживается без труда. Не стоит пользоваться техническими особенностями терминала. Когда сеть ARPANET впервые вышла на арену, ее разработчики ожидали, что преобладающим будет трафик (то еcть объем информации, передаваемой между узлами) типа "процесс-процесс". Они ошиблись. К их великому изумлению, объем электронной почты между людьми перекрыл объем связи между процессами. В то время, как снег, дождь, жара могли остановить почтовых курьеров, возможности сети ARPANET доставлять сообщения от западного побережья Cоединенных Штатов к восточному в течение нескольких секунд начали революционные процессы в средствах cообщения. Основная привлекательность электронной почты - ее быстрота. Однако есть другие преимущества которые не так широко известны. Телефон также предоставляет почти мгновенный доступ, но исследования показали, что около 75% телефонных вызовов заканчиваются безуспешно . Электронная почта имеет ту же скорость доступа, что и телефон, но не требует одновременного присутствия обоих абонентов на разных концах телефонной линии. Кроме того, она оставляет письменную копию послания, которое может быть сохранено или передано дальше. Более того, письмо одновременно может быть послано нескольким абонентам. Предположим, что вам повезло, и вы стали счастливым обладателем персонального компьютера. Вы составили послание для своего абонента - ввели в компьютер текст, подготовили к передаче файл, содержащий какую-либо программу или, например, графические данные, указали адрес и, сняв телефонную трубку, передали по телефонной линии ваше письмо. Абонента нет дома? Не беда: письмо попадет к нему, как только он включит свой компьютер. Его телефон занят? Тоже не страшно: как только линия освободится, он сможет получить ваше послание, даже если вы уже давно повесили трубку. В этой, на первый взгляд, фантастической истории есть единственное преувеличение. Поднимать трубку и набирать телефонный номер будете не вы, а весьма интеллектуальное электронное устройство, называемое модемом. В простейшем случае передача вашего письма произойдет cледующим образом: сначала по запускаемой вами стандартной процедуре ваш модем постарается связаться с модемом, установленном на почтовой машине (аналог - почтовое отделение связи). В RelCom это производится рассматриваемой в нашем руководстве программным пакетом UUPC. Как только будет установлена связь, произойдет идентификация вашего абонентского пункта (вашего компьютера), проверка пароля и передача подготовленной вами информации. После этого ваш модем "повесит трубку". Вы можете спокойно заниматься своими делами, а в это время почтовая машина проверит, насколько правильный адрес вы указали, и, если все в порядке, постарается связаться с вашим абонентом. Как только два модема - почтовый и вашего абонента - "договорятся", произойдет передача вашего послания. Обмен информацией состоялся. Удобство такого средства связи трудно переоценить. Быстрота, необременительность, возможность передавать информацию любого объема в любую точку мира. Хотя электронная почта может рассматриваться как частный случай передачи файлов, она имеет ряд особенностей, не привычных для стандартных процедур пересылки файлов. Во-первых, отправитель и получатель почти всегда люди, а не машины. Это означает, что система электронной почты состоит из двух различных, но тесно взаимосвязанных частей: одна обеспечивает взаимодействие с человеком (например, составление, редактирование, прочтение сообщений), другая – передачу сообщений (например, рассылка по спискам, обеспечение передачи). Другое различие между электронной почтой и средствами передачи файлов общего назначения состоит в том, что почтовые послания представляют собой четко структурированный документ. Во многих системах каждое послание сопровождается большим количеством дополнительных полей. Они включают в себя имя и адрес отправителя, имя и адрес получателя, дату и время отправки письма, перечень людей, которым направлена копия письма, уровень значимости, степень секретности и многое другое. Адресация в системе электронной почты. Для того, чтобы ваше электронное письмо дошло до своего адресата, необходимо, чтобы оно было оформлено в соответствии с международными стандартами и имело стандартизованный почтовый электронный адрес. Общепринятый формат послания определяется документом под названием "Standard for the Format of ARPA - Internet Text messages", сокращенно - Request for Comment или RFC822, и имеет заголовок и непосредственно сообщение. Заголовок выглядит приблизительно так: From: почтовый электронный адрес - от кого пришло послание To: почтовый электронный адрес - кому адресовано Cc: почтовые электронные адреса - кому еще направлено Subject: тема сообщения (произвольной формы) Date: дата и время отправки сообщения Строки заголовка From: и Date: формируются, как правило, автоматически, программными средствами. Помимо этих строк заголовка, послание может содержать и другие, например: Message-Id: уникальный идентификатор послания, присвоенный ему почтовой машиной Reply-To: обычно адрес абонента, которому вы отвечаете на присланное вам письмо Само послание - как правило, текстовый файл достаточно произвольной формы. При передаче нетекстовых данных (исполняемой программы, графической информации) применяется перекодировка сообщений, которая выполняется cоответcтвующими программными средствами. Почтовый электронный адрес может иметь разные форматы. Наиболее широко распространена система формирования адреса DNS (Domain Name System), применяемая в сети Internet. Дешифрацию адреса и перевод его в необходимый формат осуществляют встроенные программные средства, применяемые в данной сети электронной почты. С точки зрения логики, для того чтобы адрес был информативным, необходимо, чтобы в нем присутствовали: - идентификатор абонента (по аналогии - строка КОМУ: на почтовом конверте); - почтовые координаты, определяющие его местонахождение (по аналогии - дом, улица, город, страна на почтовом конверте). Почтовый электронный адрес имеет все эти составляющие. Для того, чтобы отделить идентификатор абонента от его почтовых координат, используется значок @. Почтовый электронный адрес в формате Internet может иметь вид: В рассматриваемом примере aspet - идентификатор абонента, составляемый, как правило, из начальных букв его фамилии, имени, отчества (Анатолий Сергеевич Петров). То, что стоит справа от знака @, называется доменом и однозначно описывает местонахождение абонента. Составные части домена разделяются точками. Самая правая часть домена, как правило, обозначает код страны адресата - это домен верхнего уровня. Код страны утвержден международным стандартом ISO. В нашем случае, ua- код Украины. Однако в качестве домена верхнего уровня может фигурировать и обозначение сети. Например, в США, где существуют сети, объединяющие высшиеучебные заведения или правительственные организации, в качестве доменов верхнего уровня используются сокращения edu - Educational institutions, gov - Government institutions и другие. Следующий поддомен - msk - является однозначно определяемым внутри домена верхнего уровня. Нетрудно догадаться, что обозначает он код города - Москва. Совокупность составных частей домена msk.ru называется доменом второго уровня. Аббревиатуры домена второго уровня определяются в соответствии с правилами, принятыми доменом верхнего уровня. Домен третьего уровня - mepi.msk.ru. В нашем случае домен третьего уровня включает в себя сокращенную английскую абревиатуру Московского инженерно- физического Института. Правила образования имен внутри доменов третьего уровня личное дело доменов второго уровня. Поддомен htd - зарегистрированное на почтовом узле имя машины, на которой владеет почтовым ящиком упомянутый выше Анатолий Сергеевич Петров. Система DNS приводится только для того, чтобы показать, что ничего сложного и непривычного даже для начинающего абонента электронной почты в этом нет. Электронная почта на вашей машине. Электронная почта на Вашей машине обслуживается несколькими программами, систему которых будем для простоты называть почтовой службой, или просто почтой. Почтовые сообщения (письма), пришедшие на Ваш адрес, поступают в файл, называемый Вашим почтовым ящиком, из которого Вы в любое удобное для Вас время можете их доставать и читать при помощи специальной программы - редактора сообщений E-Mail, в нашем руководстве мы предлагаем BeautyMail. При отправлении сообщения Вы вводите текст сообщения и некоторую служебную информацию (аналогично надписи на почтовом конверте), включая адрес получателя, после чего почтовая служба на вашей машине с помощью программного пакета UUPC связывается с почтовой службой машины адресата, передает ей сообщение, и оно попадает в почтовый ящик адресата. Формат почтового сообщения. Почтовые службы на разных машинах представляют сообщения в разных форматах, некоторые из них несовместимы. Тем не менее, большинство систем во всем мире понимают формат сообщения, называемый, по имени документа, в котором он описан, RFC822[2]. Первоначально этот стандарт был разработан для сети Internet, но сейчас принят во многих других сетях. Поэтому здесь будем описывать этот формат - это тот конверт, в котором письмо дойдет практически в любую точку земного шара. Сообщение состоит из текста, который Вы хотите передать адресату, и заголовка, который приписывается в начале сообщения, отделяется от текста пустой строкой, и содержит несколько строчек необходимой информации об этом сообщении: дату отправления, адрес, обратный адрес, тему сообщения, и другие. Рассмотрим пример почтового сообщения: Received: by avg386.kiae.su; Thu, 20 Dec 90 13:51:59 MSK Received: by jumbo.kiae.su; Thu, 20 Dec 90 12:52:17 MSK Received: from CS.ORST.EDU by fuug.fi with SMTP id AA15539 (5.65+/IDA-1.3.5 for ); Thu, 20 Dec 90 08:19:05 +0200 Received: from jacobs.CS.ORST.EDU by CS.ORST.EDU (5.59/1.15) id AA19981; Wed, 19 Dec 90 22:19:59 PST Received: by jacobs.CS.ORST.EDU (5.54/1.14) id AA02240; Wed, 19 Dec 90 23:19:35 MST Date: Wed, 19 Dec 90 23:19:35 MST From: Harry Brooks <> Message-Id: <9012200619.> To: Subject: Re: wondering if you attended? Status: RO gosh, i wish that you were not so far away that we could face each other and speak of your interests--computers, girls, nature and drinks! no, i do not know Russian history--only the sketch and collected memory of pieces read and heard... was infatuated by Dostevosky harry //interrupted for talking to a friend--bye--more later. Здесь первые четырнадцать строчек составляют заголовок. Заметим, что каждая из строк заголовка имеет вид: название: текст Названия строк заголовка расшифровываются так: Received: отметка о прохождении через машину (почтовый штемпель). У нашего письма таких отметок пять, значит, по пути оно прошло через пять машин, и каждая из них обозначила, когда оно проходило. Date: дата и время отправления письма; они указываются в стандартном формате, поскольку большинство почтовых систем умеют сортировать сообщения по времени, если Вы попросите. From: имя отправителя и обратный адрес <отделен угловыми скобками>. Message-Id: внутренний идентификатор сообщения; присваивается почтовой службой отправителя. Каждому письму присваивается уникальный - единственный в мире! - идентификатор. Его можно использовать для ссылок на письмо, как исходящий номер. To: адрес получателя Subject: тема сообщения. Пометка Re: обозначает, что это сообщение - ответ (от слова reply) на другое сообщение. У исходного сообщения и у ответа строка Subject: одна и та же. При составлении автором ответа почтовая служба автоматически взяла тему из исходного сообщения. Это удобно, когда идет длинный разговор на одну тему. Вы сможете потребовать, чтобы почтовая служба отсортировала сообщения по темам, и освежить в памяти предыдущие фразы этого разговора. Составляя сообщение, старайтесь в этой строке указать название короткое и как можно более информативное. Сообщение под заголовком вроде "А помнишь, как-то раз ты мне говорила..." не всякий станет читать. Status: статус сообщения; Ваша почтовая служба помечает для себя, что сообщение Вами уже прочитано, чтобы второй раз Вам его не предложить как новое. Бывает еще несколько видов строк заголовка. Не все они обязательно должны быть. Некоторые строки почтовые службы добавляют автоматически (Received:, Date:), другие задает сам автор письма (To:, Subject:). Мы же остановимся подробно на том, как указать в сообщении адрес, чтобы почтовые службы его поняли и доставили письмо по назначению. Ввести текст сообщения, сформировать заголовок можно одном из редакторов сообщений для электронной почты. В нашем руководстве мы рекомендуем воспользоваться редактором BeautyMail, справочник по которому мы и приводим в одной из следующих глав. Адреса электронной почты. Рассмотрим адрес из нашего примера: Он состоит из адреса машины и имени адресата, которое отделено знаком "@". Слева от @ стоит имя адресата, точнее, имя файла - почтового ящика на его машине, из которого он забирает письма. Обычно пользователь называет свой почтовый ящик тем же именем, под которым он зарегистрирован в системе. Чаще всего это имя (например, polina), фамилия (korotaev), или инициалы (avg, как в нашем случае). Часть справа от @ называется доменом и описывает местонахождение этого почтового ящика (машину или организацию). Более подробно о доменах. Рассматривая домен справа налево и разбив его по точкам на отдельные слова, получим поддомены, поочередно уточняющие, где этот почтовый ящик искать. Обратите внимание, что домен не описывает путь, по которому следует передавать сообщение, а только объясняет, где находится адресат; точно так же адрес на почтовом конверте - это не описание дороги, по которой должен идти почтальон, чтобы доставить письмо, а место, в которое он должен в конце концов его принести. В обоих случаях почтовые службы сами выбирают маршрут из соображений экономии времени и денег. Обычно существует несколько путей, по которым можно доставить сообщение в указанное место, и, отправляя письмо, Вы не знаете, по какому из путей оно на этот раз пойдет. Самый правый поддомен (в нашем случае ru) называется доменом верхнего уровня и чаще всего обозначает код страны, в которой находится адресат. Код ru- это Росия, а в Приложении 1 можно найти список других стран с соответствующими им кодами, каждый код состоит из двух латинских букв. Например, код uk обозначает Великобританию, и почтовый ящик с адресом следует искать в английской сети JANET. Домен верхнего уровня - не всегда код страны. В Соединенных Штатах встречаются такие, например, домены верхнего уровня, как edu - научные и учебные организации, или gov - правительственные учреждения: Если почтовая служба видит в правой части домена поддомен такого вида, она уже знает, что адресат находится в США, поэтому код страны us не нужен. Такие обозначения сложились в американской научной сети ARPANET еще до того, как ее связали с сетями в других странах, а сейчас они сохраняются только по привычке. Как правило, во все места, которые адресуются по типу организации, можно добраться и используя код страны. Из соображений простоты и единообразия лучше пользоваться адресами с кодами стран. Также можно встретить домен верхнего уровня, обозначающий название сети, в которой находится адресат, например, bitnet: net Обычно такие адреса используются, если эта сеть понимает адреса в формате, отличном от RFC822. Тогда Вы пишите адрес типа имя@машина.сеть а мост между Вашей сетью и сетью адресата преобразует его к нужному виду. Поддомены, расположенные правее домена верхнего уровня, уточняют положение адресата внутри этого домена (внутри России для ru, среди военных организаций США для mil, или в сети BITNET для bitnet). В нашем первом примере поддомен kiae обозначает организацию внутри России. В адресе домен верхнего уровня gov означает, что адресат находится в одном из правительственных учреждений США, первый поддомен nasa уточняет, в каком именно - NASA, второй поддомен arc называет подразделение NASA - Ames Research Center, а george указывает на конкретную машину в этом подразделении. Если письмо адресуется по имени сети, в которую его надо послать, адрес (домен) состоит только из домена верхнего уровня - имени сети и еще одного поддомена - имени машины в этой сети. Разбираться, где находится данная машина, выпадает на долю почтовых служб этой сети. Таким образом, в адресе net поддомен cunyvms1 обозначает конкретную машину в сети BITNET. В BITNET существует достаточно строгое соглашение относительно имени машины. Оно обязано состоять из восьми букв, в нашем случае cuny - это City University of New York, vms - машина под управлением операционной системы VMS, а 1 - номер машины. Почтовые программы, обслуживающие BITNET, по такому коду умеют определять, где эта машина находится, и строить маршрут, по которому письмо дойдет до адресата. Имена почтовых ящиков. В общем случае часть адреса, расположенная слева от @, представляет собой имя почтового ящика человека, который должен получить сообщение. Чаще всего это просто имя файла. При этом подразумевается, что в правой части адреса (домене) подробно описано, где находится машина (или несколько машин, расположенных в одном месте и соединенных в локальную сеть), на которой хранится этот почтовый ящик. Бывают, однако, машины, у которых нет адреса в формате RFC822. Это значит, что машина не входит ни в одну сеть, понимающую этот формат адреса. Если можно найти другую, подключенную к такой сети промежуточную машину, которая могла бы ей позвонить по телефону и передать сообщение, проблема отправки письма будет решена. Но, поскольку у машины адресата нет формального адреса, промежуточной машине надо явно указать путь, по которому передавать сообщение. Для передачи почтовых сообщений по телефонным линиям компьютеры пользуются протоколом uucp. Путь сообщения от Вашей машины до пользователя на другой машине для uucp описывается в такой форме: машина1!машина2!машина_адресата!имя_адресата Такой адрес означает, что Ваша машина должна передать сообщение на машину1, та - на машину2, оттуда сообщение следует передать на машину_адресата и положить в почтовый ящик с указанным именем. Чтобы адресовать сообщение на машину, не имеющую стандартного адреса, найдем промежуточную, имеющую адрес машину, и укажем ее адрес в правой части (домене); путь же от промежуточной машины до почтового ящика адресата распишем в левой части в формате uucp, например: watcsc!rose! Правая часть этого адреса указывает на учебные заведения США (домен верхнего уровня edu), среди них на университет Ватерло (первый поддомен), и в нем на машину maytag (второй поддомен); в левой части описан путь от машины maytag через машину watcsc на машину rose и в почтовый ящик пользователя ocplumb, в который-то, наконец, и нужно положить письмо. Этим способом адресации следует пользоваться только в крайнем случае, поскольку он сложен и не очень надежен (не всякая машина такой адрес правильно поймет). Вам может попасться адрес и такого необычного вида: carl%nuceng. Такой сложный адрес приходится писать, когда мост между Вашей сетью и сетью адресата письма не умеет преобразовывать адреса. В таком случае в правой части указывается адрес моста в Вашей сети, а в левой - адрес нужного Вам почтового ящика в сети адресата. Поскольку повторение знака @ во втором адресе может вызвать путаницу, вместо него используется знак %. Таким образом Вы явно указываете, через какой мост сообщение должно пройти из Вашей сети в сеть адресата. В нашем примере в правой части приведен адрес моста - машины pine в университете Флориды, - через который сообщение должно перейти в сеть DECNET (сеть машин фирмы DEC), а в левой части - адрес почтового ящика пользователя carl на машине nuceng в сети DECNET. Программная поддержка. Для работы с сообщенями электронной почты в предлагается использовать редактор BeautyMail (BML). Общие сведения о редакторе. Программа bml (BeautyMail) предназначена для подготовки, редактирования, просмотра и отправки писем в рамках темы электронной почты RELCOM (Russian Electronic Communication). Эта программа по своим функциям аналогична имеющейся в составе RELCOM программе mail, но обеспечивает выполнение всех действий в более приятном и удобном для пользователя "экранном" режиме. Для упрощения ввода команд можно использовать мышку. Программа bml использует те же каталоги и настроечные файлы, что и команда mail, и не требует поэтому никакой дополнительной настройки. Использование UUPC. В отличие от BeautyMail, которая работает с электронным сообщением как с файлом и не требует установки конфигурации системы, программа отправления электронных писем UUPC должна учесть все реальные параметры компьютера на который она устанавливается. Установка системы UUPC. Система UUPC предназначена для работы с электронной почтой в сети RELCOM или в любой другой сети, использующей протоколы UUCP (Unix to Unix Copy Program) для передачи данных по телефонным линиям. PC-NFS ver 4.0 Изготовитель: SunSelect (USA) (отсылка: SMTP, получение: POP2, POP3). Chameleon TCP/IP for Windows Изготовитель: NetManage (USA) (SMTP для отправки, POP2 для получения). Minuet ver 1.0 Изготовитель: University of Minnesota (USA) (отсылка - SMTP, получение - POP2 или POP3). PC-TCP ver 2.05 Изготовитель: FTP-Software (USA) (отсылка SMTP, POP2, POP3, прием SMTP). MAIL2 Изготовитель: PC-центр Техно (Россия). (прием POP2, POP3 через Sendmail, отсылка SMTP, Sendmail. При работе через модем прием и отсылка почты осуществляется через UUCP). KA9Q Изготовитель: Phil Karn (United Kingdom) (прием и отсылка SMTP). NCSA-Mosaic alpha relеase Изготовитель: NCSA (USA) Waterloo-TCP Изготовитель: Erick Engelke (Canada). (отсылка и прием - SMTP). DMail for Windows Изготовитель: Демос (Россия). (прием POP2, POP3, отсылка SMTP или прием и отсылка через UUCP. При работе через модем прием и отсылка почты осуществляется только через UUCP). Аппаратурная поддержка. К аппаратурной поддержке электронной почты прежде всего нужно отнести сам персональный компьютер, потом модем с телефонной связью( будь то сотовая или обычная). Модем и наличие телефона нужно для соединения с сетью Internet, с последующей работой с электронной почтой. Если модем внешний, то на его лицевой панели находится восемь световых индикаторов. Хотя их расположение на различных моделях может меняться, их обозначения являются стандартными: MR Modem Ready - Модем готов к обмену данными. Если этот индикатор не горит, то надо проверить линию питания модема. TR Terminal Ready - Компьютер готов к обмену данными с модемом. Этот индикатор горит, когда модем получил от компьютера сигнал DTR. CD Carrier Detect - Индикатор зажигается, когда модем обнаружил несущую частоту на линии. Индикатор должен гореть на протяжении всего сеанса связи и гаснуть, когда один из модемов освободит линию. SD Send Data - Индикатор мигает, когда модем получает данные от компьютера. RD Receave Data - Индикатор мигает, когда модем передает данные к компьютеру HS High Speed - Модем работает на максимально возможной для него скорости. AA Auto Answer - Модем находится в режиме автоответа. То есть модем автоматически будет отвечать на приходящие звонки. Когда модем обнаружит звонок на телефонной линии, этот индикатор замигает. OH Off-Hook - Этот индикатор горит, когда модем снял трубку ( занимает линию). Стандартный набор ответов модема OK 0 Модем выполнил команду без ошибок CONNECT 1 Модем установил связь со скоростью 300 bps RING 2 Модем обнаружил сигнал звонка NO CARRIER 3 Модем потерял несущую частоту ERROR 4 Ошибка в командной строке CONNECT 1200 5 Модем установил связь со скоростью 1200 bps NO DIALTONE 6 Отсутствие сигнала станции при снятии трубки BUSY 7 Модем обнаружил сигнал "занято" NO ANSWER 8 Нет ответа после ожидания сигнала CONNECT 600 9 Модем установил связь со скоростью 600 bps CONNECT 2400 10 Модем установил связь со скоростью 2400 bps Заключение. В заключении можно сказать, что E-mail является отличным средством общения людей ( хотя и ограни- ченного круга, т.е. обладателей ПК с соответствующим обеспечением). Можно с уверенностью сказать, что электронную почту ждёт большое будущее во всех его проявлениях, и что она будет постоянно развиваться и совершенствоваться, что будет приводить к более удобному её использованию.

Системы электронной почты

Система электронной почты состоит из трех компонентов: пользовательского агента, который позволяет пользователям читать и составлять сообщения, транспортного агента, который пересылает сообщения с одной машины на другую, и доставочного агента, который помещает сообщения в почтовые ящики пользователей-получателей. Взаимодействие этих компонентов схематически изображено на Рис. 1. Рис. 1. Работа агентов электронной почты Пользовательские агенты. Самым первым пользовательским агентом была программа /bin/mail, разработанная AT&T. Сейчас есть несколько программ этого класса. Кроме того, существуют пользовательские агенты с графическим интерфейсом пользователя. Существует также стандарт, определяющий включение в почтовые сообщения объектов мультимедиа. Он называется MIME (Multipurpose Internet Mail Extensions) – многоцелевые расширения электронной почты для Internet. Этот стандарт поддерживают некоторые пользовательские агенты. Бесплатные пользовательские агенты для ОС UNIX – /bin/mail, pine, elm и др. Транспортные агенты. Задача транспортного агента – принимать почту от пользовательского агента, интерпретировать адреса получателей и каким-то образом перенаправлять почту на соответствующие машины для последующей доставки. Кроме того, транспортный агент должен принимать входящую почту от других транспортных агентов. Многие транспортные агенты «говорят» на языке протокола SMTP (Simple Mail Transport Protocol – простой протокол транспортировки почты), который определен в RFC821. Для ОС UNIX разработано несколько транспортных агентов (MMDF, zmailer, smail, upas и другие), но самый мощный, самый гибкий и самый распространенный – sendmail. Программа sendmail – транспортный агент, программа-связка между пользовательскими и доставочными агентами. Для Internet она является и доставочным агентом. Программа sendmail выполняет следующие задачи: Ø управление сообщениями после того, как они вышли из-под пальцев пользователя; Ø разбор адресов получателей; Ø выбор соответствующего доставочного или транспортного агента; Ø преобразование адресов в форму, понятную доставочному агенту; Ø необходимое переформатирование заголовков; Ø передачу преобразованного сообщения доставочному агенту. Программа sendmail, кроме того, генерирует сообщения об ошибках и возвращает сообщения, которые не могут быть доставлены, отправителю. Доставочные агенты. Доставочный агент отвечает за прием почты от транспортного агента и ее доставку соответствующим получателям. Почта может доставляться конкретному лицу, в список рассылки, в файл и даже в программу. Для обслуживания получателя каждого типа может понадобиться отдельный агент. Программа /bin/mail – это доставочный агент для локальных пользователей, а программы uux и spop, fetchmail – доставочные агенты для пользователей удаленных машин, которые для приема почты пользуются услугами UUCP или POP, IMAP. Программа /bin/sh – доставочный агент для почты, которая направляется в файл или программу.

Адресация в системе электронной почты

Есть два вида адресов электронной почты: маршрутно-зависимые и маршрутно- независимые. При использовании первого способа адресации требуется чтобы, отправитель знал промежуточные машины, через которые должно пройти сообщение, для того чтобы попасть в пункт назначения. В адресе второго вида просто указывается пункт назначения. UUCP-адреса являются маршрутно-зависимыми, а Internet-адреса (обычно) от маршрута не зависят. Электронно-почтовый Internet-адрес имеет следующий формат пользователь@машина где знак @ отделяет имя пользователя от обозначения машины. Почта доставляется в почтовый ящик пользователя пользователь на машине машина. Пример адреса электронной почты. В рассматриваемом примере yvv – идентификатор абонента, составляемый, как правило, из начальных букв его фамилии, имени, отчества. То, что стоит справа от знака @, называется доменом и однозначно опи­сывает местонахождение абонента. Составные части домена разделяются точками. Самая правая часть домена, как правило, обозначает код страны адресата - это домен верхнего уровня. Код страны утвержден международным стандартом ISO и при­водится в Приложении 1. В нашем случае, ru - код Российской Федерации. Однако в качестве домена верхнего уровня может фигурировать и обозначе­ние сети. Например, в США, где существуют сети, объединяющие высшие учебные за­ведения или правительственные организации, в качестве доменов верхнего уровня используются сокращения edu – Educational institutions (например, cs.berkeley.edu), gov – Government institutions и другие (см. Приложение 1). Следующий поддомен – saratov в нашем случае – является однозначно определяемым внутри домена верхнего уровня. Нетрудно догадаться, что обозначает он код горо­да – Саратов. Совокупность составных частей домена saratov.ru называется доменом второго уровня. Аббревиатуры домена второго уровня определяются в соответствии с правилами, принятыми доменом верхнего уровня. Домен третьего уровня – softpro.saratov.ru. В нашем случае домен третьего уровня включает в себя название фирмы SoftPRO Group. Правила образования имен внутри доменов третьего уровня – личное дело доменов второго уровня. UUCP-адрес состоит из списка машин, через которые должно пройти сообщение на пути к пункту назначения. Элементы списка разделяют восклицательными знаками. Например, в электронно-почтовом UUCP-адресе mcvax!uunet!ucbvax!hao!boulder!lair!evi пункт назначения – машина lair, а получатель – пользователь evi. Каждая машина в цепочке имеет непосредственное UUCP-соединение с машинами, которые находятся в сети до и после нее. Например, машина ucbvax должна иметь соединения с машинами hao и uunet. Цепочки UUCP-адресов бывают очень длинными, но теперь, когда широко используется Internet, настоящие громадины увидишь очень редко. Когда электронная почта строилась в основном на базе UUCP, администраторы вынуждены были помнить список компьютеров на довольно больших участках базовой сети UUCP. В формате электронной почты Internet приведенный выше адрес будет иметь вид evi@lair, а точнее – . Допускаются и комбинированные адреса. Например, если система UUCP соединит машину lair с остальной частью домена colorado.edu, адрес может иметь следующий вид: lair! Почтовые псевдонимы Псевдонимы позволяют системному администратору и отдельным пользователям переадресовывать почту. Ими можно пользоваться для задания списков рассылки (которые включают нескольких получателей), для пересылки почты между машинами и для того, чтобы к пользователям можно было обращаться по нескольким именам. Псевдонимы могут быть определены: Ø в файле конфигурации пользовательского агента; Ø в общесистемном файле псевдонимов /etc/aliases; Ø в пользовательском файле пересылки ~/.forward. Сначала система электронной почты ищет псевдонимы в файле конфигурации пользовательского агента, затем в файле aliases и наконец в пользовательском файле пересылки. Вот несколько примеров псевдонимов, определенных в файле aliases: nemeth: evi evi: evi@mailhub authors: evi,garth,scott,trent В первой строке указано, что почту, поступающую на имя nemeth, следует доставлять пользователю evi на локальной машине. Во второй – что всю почту, поступающую на имя evi, следует доставлять н машину mailhub. И наконец третья строка определяет, что почту, адресованную authors, следует доставлять пользователям evi, garth, scott и trent. Поддерживается рекурсия, поэтому почта, посланная на имя nemeth, в конце концов попадает по адресу evi@mailhub. Помимо списков пользователей, псевдонимы могут обозначать: Ø файл, содержащий список адресов; Ø файл, в который должны добавляться сообщения; Ø команду, на вход которой должны передаваться сообщения.

2.1. Принципы организации

Электронная почта во многом похожа на обычную почтовую службу. Корреспонденция подготавливается пользователем на своем рабочем месте либо программой подготовки почты, либо просто обычным текстовым редактором. Обычно программа подготовки почты вызывает текстовый редактор, который пользователь предпочитает всем остальным программам этого типа. Затем пользователь должен вызвать программу отправки почты (программа подготовки почты вызывает программу отправки автоматически). Стандартной программой отправки является программа sendmail. Sendmail работает как почтовый курьер, который доставляет обычную почту в отделение связи для дальнейшей рассылки. В Unix-системах программа sendmail сама является отделением связи. Она сортирует почту и рассылает ее адресатам. Для пользователей персональных компьютеров, имеющих почтовые ящики на своих машинах и работающих с почтовыми серверами через коммутируемые телефонные линии, могут потребоваться дополнительные действия. Так, например, пользователи почтовой службы Relcom должны запускать программу UUPC, которая осуществляет доставку почты на почтовый сервер. Для работы электронной почты в Internet разработан специальный протокол Simple Mail Transfer Protocol (SMTP), который является протоколом прикладного уровня и использует транспортный протокол TCP. Однако, совместно с этим протоколом используется и Unix-Unix-CoPy (UUCP) протокол. UUCP хорошо подходит для использования телефонных линий связи. Большинство пользователей электронной почты Relcom реально пользуются для доставки почты на узел именно этим протоколом. Разница между SMTP и UUCP заключается в том, что при использовании первого протокола sendmail пытается найти машину-получателя почты и установить с ней взаимодействие в режиме on-line для того, чтобы передать почту в ее почтовый ящик. В случае использования SMTP почта достигает почтового ящика получателя за считанные минуты и время получения сообщения зависит только от того, как часто получатель просматривает свой почтовый ящик. При использовании UUCP почта передается по принципу "stop-go", т.е. почтовое сообщение передается по цепочке почтовых серверов от одной машины к другой пока не достигнет машины-получателя или не будет отвергнуто по причине отсутствия абонента-получателя. С одной стороны, UUCP позволяет доставлять почту по плохим телефонным каналам, т.к. не требуется поддерживать линию все время доставки от отправителя к получателю, а с другой стороны, бывает обидно получить возврат сообщения через сутки после его отправки из-за того, что допущена ошибка в имени пользователя. В целом же общие рекомендации таковы: если имеется возможность надежно работать в режиме on-line и это является нормой, то следует настраивать почту для работы по протоколу SMTP, если линии связи плохие или on-line используется чрезвычайно редко, то лучше использовать UUCP. Рис. 2.1. Структура взаимодействия участников почтового обмена Основой любой почтовой службы является система адресов. Без точного адреса невозможно доставить почту адресату. В Internet принята система адресов, которая базируется на доменном адресе машины, подключенной к сети. Например, для пользователя paul машины с адресом polyn.net.kiae.su почтовый адрес будет выглядеть как: . Таким образом, адрес состоит из двух частей: идентификатора пользователя, который записывается перед знаком "коммерческого эй" - "@", и доменного адреса машины, который записывается после знака "@". Адрес UUCP был бы записан как строка вида: net.kiae.su!polyn!paul Программа рассылки почты Sendmail сама преобразует адреса формата Internet в адреса формата UUCP, если доставка сообщения осуществляется по этому протоколу

3.1. Программа 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 aldomain user@alias aldomain user@[local.host.internet.address] localhost!user localhost!localhost!user p Местный адрес - это адрес, который распознается как адрес машины, с которой осуществляется отправка почты. Адреса UUCP имеют вид: host!user host!host!user p Если машина, с которой отправляется почта, имеет прямую линию связи по протоколу UUCP со следующей машиной (в адресе), то почта передается на эту машину, если такого соединения нет, то почта не рассылается и выдается сообщение об ошибке. Файл конфигурации должен содержать детальное описание маршрутов для пересылки сообщений на машины по протоколу UUCP. Адреса SMTP - это адреса, описанные в стандарте RFC-822 или стандартные адреса Internet. Эти адреса имеют вид: usr@host ain <@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 MacroDxvalue Установить значение "x"
Define ClassСсword1 word2 ... Установить значение класса "c"
Define ClassFcfile загрузить значение класса из файла
Set OptionOovalue Установить значение опции "o"
Trusted UsersTuser1 user2 ... Определить доверенных пользователей
Set PrecedencePname=number Для номера ошибки number установить имя name
Define MailerMname,[field=value] Определить программу рассылки почты
Define HeaderH[?mflag?]name:format Определить формат поля заголовка
Set RulsetSnНачать определение набора правил преобразования адресов
Define RuleRlhs 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 P => 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 NET # 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 ain # 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!домен!пользователь Если ваш адрес - , то ваш корреспондент мог бы послать вам сообщение по адресу: internet!world.std.com!nancyr Bitnet Пользователи Bitnet (или NetNorth в Канаде и EARN в Европе) часто имеют адреса вида: IZZY@INDVMS. Если вам повезет, то для посылки сообщения по таком адресу надо только добавить "bitnet" в конце, чтобы получилось net. Иногда случается, что письмо на такой адрес вернется не доставленным, поскольку адреса Bitnet не всегда хорошо переводятся в форму Internet. Если это случится, можно послать сообщение через один из двух шлюзов Internet/Bitnet. Прежде всего замените @ на %, чтобы получилось имя_пользователя%подсистема.bitnet. Затем добавьте либо @vm.marist.edu, либо @cunyvm.cuny.edu, чтобы, как в приведенном выше примере, получилось izzy%indyvms. и izzy%indvyvms. Для пользователей Bitnet задача несколько проще: они с легкостью могут посылать письмо прямо на ваш электронный адрес без всех этих глупостей. Так что посылайте им ваш адрес, и все будет в порядке. CompuServe У пользователей CompuServe адреса цифровые и имеют следующий вид: 73727,545. Чтобы послать письмо пользователю CompuServe, замените запятую точкой и добавьте "@compuserve.com"; например: 73727.. Имейте в виду, что некоторые пользователи CompuServe должны вносить дополнительную плату за получение почты из Internet. Если вы знаете пользователей CompuServe, которые хотят посылать вам сообщения, посоветуйте им обратиться к GO MAIL и создать сообщение. В области адреса вместо ввода номера CompuServe пусть они напишут ваш адрес в форме: >INTERNET:Ваш_Идентификатор@Ваш_Адрес. Например, >INTERNET:. Заметьте, что оба символа ">" и ":" обязательны. 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, например: . MCIMail Чтобы послать сообщение кому-нибудь, имеющему раздел в MCIMail, добавьте "@mcimail.com" в конце имени или адреса этого человека. Например: или Заметьте, что если в сети MCIMail есть несколько подписчиков с таким именем, то вы получите сообщение от MCI с их именами и числовыми адресами. Выберите того, который вам нужен, и пошлите ваше сообщение снова. Чтобы послать сообщение вам из MCI, пользователь должен ввести Ваше Имя (EMS) в ответ на приглашение "To:". В ответ на приглашение EMS следует ввести internet а затем ваш адрес в Сети в ответ на приглашение "Mbx:". Peacenet Чтобы послать сообщение пользователю, используется форма: имя_пользователя@igc.org Подписчики Peacenet могут посылать сообщения по вашему обычному адресу. Prodigy Идентификатор_пользователя@prodigy.com. Имейте в виду, что пользователи Prodigy должны вносить дополнительную плату за электронную почту из Internet.

Почтовый каталог организации

1.3.1. Базовые сведения о X.500 1.3.2. Каталоги частных систем 1.3.3. Каталог Exchange, связь с каталогом X.500 1.3.4. Облегченный протокол доступа к каталогу (LDAP) Назначением каталога в системах электронной почты, как, впрочем, и любых других каталогов - получение пользователем расширенной информации о каком- либо предмете, на основе минимального набора исходных сведений. Примером каталогов, используемых повсеместно, являются телефонные справочники. Служба каталога в той или иной мере присутствует в каждой из современных систем электронной почты, и отличия состоят лишь в том, на какие стандарты опирается та или иная реализация, и какой набор сервисов представляет. Рассмотрим некоторые из них.

1.3.1. Базовые сведения о X.500

Стандарт на службу каталогов X.500 был разработан изначально для организации публичных справочников общего доступа, позволяющий хранить информацию из любой области человеческих знаний. Он представляет собой набор рекомендаций комитета CCITT/ITU, описывающих исключительно принципы построения и форматы данных для взаимодействия систем, предоставляющих сервисы поиска в глобальных хранилищах информации. Выбор средств реализации полностью возлагается на разработчика. Существуют две редакции этих рекомендаций - 1988 и 1992 года. Каталог (directory), построенный в соответствии с рекомендациями X.500, способен хранить информацию о наборе произвольного числа целевых объектов (objects of interest), имеющих различную структуру. Целевые объекты хранятся в информационной базе объектов (Directory Information Base или DIB). Каждый объект имеет связанный с ним набор сведений о структуре, свойствах и множестве разрешенных над ним действий, называемый классом объекта. Сами классы, в свою очередь, также трактуются как объекты. Каждый экземпляр объекта, хранящийся в каталоге, обязан соответствовать одному из зарегистрированных в DIB классов. Для обеспечения непротиворечивости данных в каталоге, объекты должны создаваться и модифицироваться только в соответствии с правилами, предписанными классами этих объектов. Для отражения того факта, что сущности реального мира могут содержать в себе вложенные сущности и одновременно содержаться внутри других сущностей, вводится иерархия сущностей. Сочетание информационной базы объектов и знаний об их иерархии образует дерево информационного каталога (Directory Information Tree или DIT). Как положено дереву (см. рисунок 1.10), оно имеет корень (root entry), узлы, называемые также контейнерами (container entry) и листья (leaf). Корень является стартовой точкой каталога. Объекты-контейнеры содержат в себе один или более объектов-листьев и/или других контейнеров. Листья не содержат вложенных объектов и, как правило, представляют собой собственно целевые объекты. Однако если объект создается "под" листом, лист становится контейнером. Рис. 1.10. Иерархия объектов каталога Набор определений и правил, регулирующих структуру информационной базы, называют схемой каталога (Directory Schema). Схема каталога определяет, объекты каких классов могут быть созданы в рамках каталога, каков набор и каковы предельные значения их атрибутов, как они могут взаимодействовать друг с другом, и где в информационном дереве каталога могут находиться. Внутри информационной базы каталога каждый объект должен иметь уникальное имя (name). Чтобы однозначно адресовать объект внутри информационной базы, его полное имя в базе также должно быть уникальным и отражать положение объекта в дереве каталога. Естественный способ получения такого имени - последовательное добавление к имени объекта имен уровней иерархии при движении вверх по дереву объектов. Рисунок 1.11 поясняет использование этого способа. Рис. 1.11. Схема построения уникального имени Полученное имя называют характерным именем (Distinguished Name или DN). Имена, получаемые на промежуточных уровнях, называют относительными характерными именами (Relative Distinguished Name или RDN). Эти имена могут использоваться при относительной адресации объектов каталога на каком-либо уровне иерархии. Строгого формата построения характерного имени именования спецификация X.500 не приводит. Следует заметить, что, несмотря на некоторую схожесть формата адресов X.400 с форматом характерных имен, они имеют совершенно разную природу и свойства. Значения ключей в адресе X.400 может быть произвольным. В X.500, в связи с тем, что набор ключевых слов не определяется стандартом, напротив порядок следования ключей должен строго соответствовать пути к объекту в дереве каталога. В остальном адреса X.400 и X.500 вполне совместимы, и многие X.400- системы поддерживают настройки X.500 для ведения глобальных адресных книг и их автоматической репликации. Для сокрытия внутренней структуры каталога и механизма работы с ним, в составе информационной системы должны присутствовать два компонента, уже ранее упоминавшихся: системный и пользовательский агенты каталога (DSA и DUA, соответственно). При обращении клиента к каталогу за информацией об интересующих его объектах, DUA выступает в роли промежуточного звена, преобразующего запрос в формат, понимаемый DSA, и возвращающий полученные результаты в ожидаемом пользователем виде. В свою очередь DSA принимает запросы со стороны пользовательских агентов и выполняет их или переадресует запрос другим системным агентам, если запрашиваемая информация не относится к обслуживаемой им части каталога. Каталог, представляемый единым информационным пространством, на практике может быть распределен между различными DSA. В составе информационной системы может быть произвольное количество системных агентов, каждый из которых отвечает за различные подмножества общего информационного дерева каталога. Та часть общего каталога, за обслуживание которой отвечает отдельный DSA, называется фрагментом (Fragment). Фрагмент может включать в себя произвольное количество поддеревьев из произвольных мест каталога. Системный агент может использовать различную технику для обработки запросов, поступающих от пользовательского агента на те части каталога, которые не обслуживаются данным DSA:
  • цепной поиск (chaining), когда запрос при необходимости перенаправляется другому DSA, и результаты работы последнего возвращаются пользователю;
  • перенаправление (referral), когда системный агент инструктирует пользовательского агента, к какому DSA обратиться за нужной информацией.
Использование цепного поиска и перенаправления требует возможности непосредственного взаимодействия DSA, что не всегда выполнимо и накладывает существенные ограничения на область применения таких систем. Чтобы сократить время, затрачиваемое на обработку пользовательского запроса, применяется метод репликации (replication) фрагментов между системными агентами каталога. В этом случае DSA отслеживает изменения, вносимые в подотчетный ему фрагмент, и доставляет их остальным системным агентам. В этом случае относительно актуальная копия всего каталога доступна для поиска каждому DSA системы, однако использование такой схемы требует дополнительных затрат ресурсов на размещение избыточных копий информации. Следует заметить, что для почтовых систем, данный вариант организации доступа к каталогу является единственно возможным, так как отдельные фрагменты могут не иметь непосредственного соединения друг с другом. Единицей репликации данных является пространство имен (Name Context), представляющее собой отдельную ветвь общего дерева. Рисунок 1.12 поясняет различия между фрагментом и пространством именования. Рис. 1.12. Реализация распределенного каталога Несмотря на массу достоинств, реальных систем, полностью отвечающих рекомендациям X.500, не так много, и все они, как правило, функционируют либо на уровне региональных административных доменов, либо в государственных учреждениях и силовом секторе. Высокая сложность реализации и громоздкость интерфейсов взаимодействия подсистем привели к появлению параллельных служб каталогов, опирающихся на идею X.500, но по-другому реализующих протоколы доступа и форматы передачи данных. Программное обеспечение почтового обмена Согласно схеме почтового обмена (рисунок 2.1) взаимодействие между участниками этого обмена строится по классической схеме "клиент-сервер". При этом схему можно подразделить на несколько этапов. Первый - взаимодействие по протоколу SMTP между почтовым клиентом (Internet Mail, Netscape Messager, Eudora и т.п.) и почтовым транспортным агентом (sendmail, smail, ntmail и т.п.), второй - взаимодействие между транспортными агентами в процессе доставки почты получателю, результатом которого является доставка почтового сообщения в почтовый ящик пользователя и третий - выборка сообщения из почтового ящика пользователя почтовым клиентом в почтовый ящик пользователя на машине пользователя по протоколу POP3 или IMAP. Каталоги частных систем В терминах X.500 в частных системах реализуется схема с репликацией отдельных фрагментов каталога между системными агентами почтовых отделений. Сам каталог ограничен малым числом уровней иерархии (тремя для MS Mail и двумя для cc:Mail). База объектов содержит небольшое число классов, такие как почтовый ящик, список рассылки, общая папка, шаблон, таблица маршрутов, внешний адресат и почтовый шлюз. Шаблоны позволяют модифицировать набор атрибутов почтового ящика и списков рассылки, однако создание новых классов объектов не предусмотрено. В качестве информационной базы глобального каталога выступает глобальная адресная книга, содержащая данные об иерархии организации и пользователях в ее составе. Фрагментом в данном случае является локальное почтовое отделение. Поскольку данные системы используют файловый доступ для выполнения всех операций, пользовательский агент каталога интегрирован с почтовым агентом и выполняет роли как DUA, так и DSA при поиске информации в глобальной адресной книге. По той же причине при сборе изменений о подотчетном фрагменте каталога в роли DSA выступает внешняя программа, которая запускается на отдельном компьютере и формирует файл изменений для локального почтового отделения. Собственно репликация выполняется путем пересылки изменений каталога в виде письма выделенному серверу каталога, имеющего специальный почтовый адрес. В задачи упомянутого сервера входят слияние изменений ото всех почтовых отделений, обновление адресной книги и рассылка модификаций к текущей адресной книги системному агенту каждого отделения. На основе полученного файла модификаций при следующем запуске локальный DSA вносит изменения в глобальную адресную книгу, затем снова контролирует изменения в структуре локального отделения и при необходимости создает новый файл изменений, направляемый опять же серверу каталога. После чего процесс повторяется. Несмотря на кажущуюся громоздкость, такая схема обеспечивает достаточно высокую эффективность ведения общего адресного списка и способна обслуживать организации с числом отрудников до полумиллиона. Адресация в MS Exchange Адресация В сервере Exchange используется весьма необычная на первый взгляд схема назначения адресов. Она двойная, т.е. каждый ящик или список рассылки (а если быть точным - каждый объект каталога) всегда имеет два адреса: адрес X.400 и внутренний. Чем это объяснить? Во-первых, одной из целей, преследовавшихся при создании Exchange, было обеспечение возможности использовать произвольное количество адресов различных типов для каждого почтового ящика и осуществлять доставку по любому из них. Это неизбежно потребовало введения параллельной адресации, не совпадающей ни с одной из существующих. Во-вторых, поскольку внутренние адреса имели собственный формат и не предназначались для применения за пределами одной организации, потребовалось наличие еще другого адреса, который мог бы быть использован для общения с внешним миром, был общеизвестен и не требовал обязательной регистрации. Этим условиям удовлетворял только адрес X.400. Чтобы обеспечить достаточную гибкость системе, ее X.400-адрес может быть динамически изменен, но не уничтожен. Поскольку любые другие почтовые адреса, включая дополнительные X.400, являются не более чем атрибутами объекта, их набор и значение может произвольно изменяться по мере необходимости. Такой подход позволяет реализовать столь популярную сейчас концепцию плоского почтового пространства, когда упоминания о внутренней структуре организации полностью исключены из почтового адреса (например, подавляющее большинство адресов Internet в настоящее время имеет вид ). Любой из поддерживаемых типов адресов: X.400, Internet, cc:Mail и MS Mail может быть использован при отправке почтовых сообщений. Установка почтовых шлюзов в другие системы позволяет вводить адреса в характерных для них форматах. Маршрутизация Для отправки сообщений внутри почтового пространства, объединяющего серверы Exchange, системы X.400, MS Mail и cc:Mail, используется статическая маршрутизация. При отправке сообщений через сети SMTP может быть использована динамическая маршрутизация на основе службы имен DNS и/или статическая маршрутизация на основе таблиц. В случае использования синхронизации каталогов, таблицы маршрутизации обновляются автоматически.

Адресация в системах X.400

Адресация В системах на базе рекомендаций X.400 используется одна из самых мощных схем адресации, известная как автор/получатель (Originator/Recipient или O/R). Структура адреса и терминология, используемая при определении адресов, опирается на предположение (не лишенное оснований), что глобальная телекоммуникационная сеть управляется и поддерживается официально зарегистрированными в CCITT/ITU коммерческими компаниями, предоставляющими свои услуги прочим организациям. В терминах рекомендаций X.400 телекоммуникационные компании называются администрацией (Administration). Управляющим доменом (Management Domain или MD) называется объединение по крайне мере одного MTA и произвольного (в том числе нулевого) количества пользовательских агентов (UA), информационных хранилищ (MS) и/или шлюзов (AU), принадлежащих и управляемых одной компанией. Управляющий домен, поддерживаемый администрацией, называется административным управляющим доменом (Administration management domain или ADMD). Остальные домены, обслуживаемые неадминистрациями, называются частными управляющими доменами (Private management domain или PRMD). В обязанности ADMD входит контроль за уникальностью имен PRMD, пользующихся его услугами, обеспечение корректной работы телекоммуникационного оборудования, начисление платы за услуги и взаимные расчеты с другими ADMD. В ведении PRMD находится назначение имен внутри собственного управляющего домена. Согласно рекомендациям CCITT, частные управляющие домены должны направлять весь нелокальный трафик только через свой административный домен, прямая же передача данных между PRMD не категорически приветствуется. На территории каждого государства может существовать несколько ADMD, однако, в целях обеспечения "максимальной" совместимости с национальной политикой сфера деятельности ADMD не распространяется за пределы государственных границ. По этой же причине существование международных PRMD неявно запрещается. Пользовательский адрес X.400 представляет собой набор атрибутов. Для разделения атрибутов используется либо прямой слеш, либо двоеточие. Каждый атрибут записывается в виде КЛЮЧЕВОЕ_СЛОВО=ЗНАЧЕНИЕ, для ключевых слов могут использоваться аббревиатуры и метки. Часть атрибутов, не оказывающих влияния на уникальность адреса, может быть опущена. Сведения об адресате могут иметь произвольный порядок следования. Существуют четыре типа адресов X.400:
  • мнемонический (Mnemonic), служит для представления обычных пользователей и списков рассылки (этот тип адресов используется наиболее часто);
  • цифровой (Numeric), служит для представления пользователей, использующих только цифровые клавиатуры для регистрации и посылки сообщений;
  • терминальный (Terminal), служит для представления пользователей, использующих терминалы, подключенные к сетям передачи данных;
  • почтовый (Postal), служит для представления пользователей не использующих электронных устройств.
В таблице 1.2 приводится список атрибутов для мнемонического адреса X.400. Таблица 1.2. Атрибуты мнемонического O/R адреса
Тип атрибута Аббревиатура Метка Длина Примечания
Given Name Given Name G 16 Имя
Initials Initials I 5 Инициалы
Surname Surname S 40 Фамилия
Generation Qualifier Generation Q 3

Признак поколения

(младший, старший)

Common Name Common Name CN 32 Имя в миру
Organization Organization O 64 Название организации
Organizational Unit 1 Org.Unit.1 OU1 32 Подразделение 1 уровня
Organizational Unit 2 Org.Unit.2 OU2 32 Подразделение 2 уровня
Organizational Unit 3 Org.Unit.3 OU3 32 Подразделение 3 уровня
Organizational Unit 4 Org.Unit.4 OU4 32 Подразделение 4 уровня
Private Management Domain PRMD P 16 Частный управляющий домен

Administration

management domain

ADMD A 16

Административный

управляющий домен

Country Country C 2 Страна

Domain Defined

Attribute

DDA DDA 8128 Доменный атрибут, такой как адрес MS Mail или SMTP
Атрибуты, всегда присутствующие в адресе, выделены серым цветом. Синтаксис доменного атрибута отличается от остальных. В адресе может быть до четырех DDA-записей, имеющих одинаковый формат DDA:ТИП=ЗНАЧЕНИЕ. Как следствие этого, результат разбора адреса зависит от их порядка следования. Кроме того, для этого атрибута имеет значение регистр букв. Данный атрибут был введен для обеспечения лучшего взаимодействия с внешними системами, использующими отличную от X.400 адресацию. Маршрутизация В силу архитектурных особенностей X.400, для гарантированного установления соединения между двумя MTA требуется ручная настройка значительного числа параметров, таких как селекторы, имена и пароли MTA и т.п. Поэтому динамическая маршрутизация в системах X.400 не возможна. Однако в случае использования каталога организации, информация о маршрутах может быть добавлена в таблицы автоматически.

. Протокол SMTP

Simple Mail Transfer Protocol был разработан для обмена почтовыми сообщениями в сети Internet. SMTP не зависит от транспортной среды и может использоваться для доставки почты в сетях с протоколами, отличными от TCP/IP и Х.25. Достигается это за счет концепции IPCE (InterProcess Communication Environment). IPCE позволяет взаимодействовать процессам, поддерживающим SMTP в интерактивном режиме, а не в режиме "STOP-GO". Модель протокола. Взаимодействие в рамках SMTP строится по принципу двусторонней связи, которая устанавливается между отправителем и получателем почтового сообщения. При этом отправитель инициирует соединение и посылает запросы на обслуживание, а получатель на эти запросы отвечает. Фактически, отправитель выступает в роли клиента, а получатель - сервера. Рис. 2.2. Схема взаимодействия по протоколу SMTP Канал связи устанавливается непосредственно между отправителем и получателем сообщения. При таком взаимодействии почта достигает абонента в течение нескольких секунд после отправки. Дисциплины работы и команды протокола. Обмен сообщениями и инструкциями в SMTP ведется в ASCII-кодах. В протоколе определено несколько видов взаимодействия между отправителем почтового сообщения и его получателем, которые здесь называются дисциплинами. Наиболее распространенной дисциплиной является отправка почтового сообщения, которая начинается по команде MAIL, идентифицирующей отправителя: MAIL FROM: Следующей командой определяется адрес получателя: RCPT TO: После того, как определен отправитель и получатель почтового сообщения, можно отправлять последнее: DATA Команда DATA вводится без параметров и идентифицирует начало ввода почтового сообщения. Сообщение вводится до тех пор, пока не будет введена строка с точкой в первой позиции. Согласно стандарту почтового сообщения RFC822 отправитель передает заголовок и тело сообщения, которые разделены пустой строкой. Сам протокол SMTP не накладывает каких-либо ограничений на информацию, которая заключена между командой DATA и "." в первой позиции последней строки. Приведем пример обмена сообщениями при дисциплине отправки почты: S: MAIL FROM: <> R: 250 Ok S: RCPT TO: <> R: 250 Ok S: DATA R: 354 Start mail input; end with <CRLF>.<CRLF> S: Это текст почтового сообщения S: . R: 250 Другой дисциплиной, определенной в протоколе SMTP является перенаправление почтового сообщения (forwarding). Если получатель не найден, но известно его местоположение, то сервер может выдать сообщение: R: 251 User not local; will forward to <ain> Если сервер может сделать только предположение о дальнейшей рассылке, то ответ будет несколько иным: R: 551 User not local; please try <ain> Верификация и расширение адресов составляют дисциплину верификации. В ней используются команды VRFY и EXPN. По команде VRFY сервер подтверждает наличие или отсутствие указанного пользователя: S: VRFY paul R: 250-Paul Khramtsov<> Используя команду EXPN можно получить список местных пользователей: S: EXPN Example-People R: 250-Paul Khramtsov<> R: 250-Vladimir Drach-Gorkunov<> В список дисциплин, разрешенных протоколом SMTP входит кроме отправки почты еще и прямая рассылка сообщений. В этом случае сообщение будет отправляться не в почтовый ящик, а непосредственно на терминал пользователя, если пользователь в данный момент находится за своим терминалом. Прямая рассылка осуществляется по команде SEND, которая имеет такой же синтаксис, как и команда MAIL. Кроме SEND прямую рассылку осуществляют SOML (Send or Mail) и SAML (Send and Mail). Назначение этих команд легко понять из их названия. Для инициализации канала обмена почтой и его закрытия используются команды HELO и QUIT соответственно. Первой командой сеанса должна быть команда HELO. Протокол допускает рассылку почтовых сообщений в режиме оповещения. Для этой цели отправитель в адресе получателя может указать несколько пользователей или групповой адрес. Обычно, программное обеспечение SMTP выбирает эту информацию из заголовка почтового сообщения и на ее основе формирует параметры команд протокола. Если сообщение по какой-либо причине не может быть разослано, то получатель формирует сообщение о неразосланном сообщении: S: MAIL FROM:<> R: 250 Ok S: RCPT TO: <@host.domain:ain> R: 250 Ok S: DATA R: 354 send the mail data, end with . S: Date 23 Oct 95 11:23:30 S: From: ain S: To: <ain> S: S: Undelivered message. Your message lost. 550 No such user. S: . При использовании доменных имен следует использовать канонические имена, т.к. некоторые системы не могут определить синоним по базе данных named. Кроме выше перечисленных дисциплин протокол позволяет отправителю и получателю меняться ролями друг с другом. Происходит это по команде TURN. Для отладки или проверки соединения по SMTP можно использовать telnet. Для этого вслед за адресом машины следует ввести номер порта: /users/local>telnet apollo.polyn.kiae.su 25 25 порт используется в Internet для обмена сообщениями по протоколу SMTP. В интерактивном режиме пользователь сам изображает клиента SMTP и может посмотреть реакцию удаленной машины на его действия.

Гибридные системы (MS Exchange Server)

Результатом накопления опыта в различных областях компьютерной индустрии стало возможным появление систем нового поколения, сочетающих в себе лучшие элементы своих предшественников и добавляющих к ним множество новых функциональных возможностей. В области электронной почты примером такой системы может служить Microsoft Exchange Server. В основу данного продукта положены с одной стороны удобство и простота использования, характерные для коммерческих систем, и мощные средства коммуникации, опирающиеся на общепризнанные стандарты, такие как X.400 и SMTP, с другой. Широкий базовый набор возможностей сервера позволяет ему выполнять роль универсального связующего звена между разнородными почтовыми системами и предоставлять услуги электронной почты и групповой работы пользователям, применяющим различные протоколы доступа и клиентские программы. Так, например, пользователи cc:Mail, использующие IPX/SPX для доступа к своему серверу NetWare, могут свободно переписываться с коллегами, имеющими адреса в Internet или SPRINT. Кроме того, шлюзы сопрягаемых почтовых систем становятся взаимно доступными в каждой из них. Использование стандарта UNICODE на уровне хранилища позволяют поддерживать множество языков на одном сервере, а поддержка OLE-объектов - хранить и предавать любые сложные документы. На рисунке 1.8 приведена схема, поясняющая принципы работы системы управления сообщениями на базе сервера Exchange. Для обеспечения прозрачной интеграции с системами на базе X.400 сервер Exchange поддерживает набор спецификаций на протокол взаимодействия между агентами передачи сообщений (MTA), в редакциях 1984 и 1988 годов, и транспортные протоколы TP0/TCP, TP0/X.25 поверх синхронных и асинхронных линий и TP4/CLNP. При пересылке сообщений через сети X.400 Exchange Server выполняет автоматическое преобразование из внутреннего формата к стандартам P2 или P22. Рис. 1.8. Схема MHS на базе Exchange Server 5.0 На уровне протокола SMTP полностью поддерживается набор стандартных и ряд расширенных (ESMTP) функций сервера, таких как уведомление о доставке (DNR) и согласование предельного размера передаваемых сообщений (SIZE). Поддерживается маршрутизация входящей почты и фильтрация входящих соединений на основании IP-адресов. На уровне формата сообщений поддерживается UUENCODE и MIME и широкий набор национальных кодировок, который при необходимости может быть расширен. Преобразования и перекодировки могут выполняться на основе анализа почтового адреса получателя. При соединении по SMTP серверов Exchange дополнительно можно выполнять их взаимную аутентификацию. Прозрачная интеграция с системой MS Mail 3.x обеспечивается за счет использования метода "теневого" почтового отделения (shadow post office), подключение к которому со стороны соответствующей системы выполняется стандартным образом. Кроме того, на упомянутое почтовое отделение могут быть установлены и сохранять работоспособность все существующие шлюзы MS Mail. Дополнительно Exchange Server может выполнять роль MS Mail MTA (программы EXTERNAL) для передачи сообщений между несколькими локальными и удаленными почтовыми отделениями MS Mail. В случае сопряжения с Lotus cc:Mail эмулирует работу MTA (cc:Mail Router) при помощи утилит EXPORT и IMPORT из стандартного комплекта этой почтовой системы. Доступ пользователей к своим почтовым ящикам организован по принципу клиент- сервер. В качестве протоколов доступа поддерживаются:
  • "родной" протокол на основе удаленного вызова процедур (Remote Procedure Calls или RPC) поверх любого транспортного протокола, поддерживаемого Windows NT;
  • протокол POP3;
  • протокол HTTP, через набор сценариев (Active Server Pages или ASP) сервера IIS 3.0.
Для осуществления доступа по HTTP броузер клиента должен поддерживать исполнение Java-апплетов.

Системы на основе частных стандартов (MS Mail , cc: Mail )

Параллельно с развитием персональных компьютеров и сетей на их основе возникли и развивались системы электронной почты, использующие, файловый метод доступа к информационным хранилищам, собственные форматы сообщений и протоколы взаимодействия агентов передачи сообщений. Классическим примером таких систем могут служить Microsoft Mail for PC Networks и Lotus cc: Mail . До начала массового распространения SMPT- и X.400-систем электронные почты на основе патентованных стандартов были весьма популярны и широко использовались. Объясняется это тем, что не имея такой сложности реализации и внедрения, как почты X.400, эти системы обладали гораздо большей функциональностью и были гораздо удобнее в работе, чем SMTP-системы. Например, каждая из частных систем предоставляла своим пользователям такие сервисы, как поддержка вложенных списков рассылки, подтверждений о прочтении сообщения, множественных хранилищ (общих и личных папок) и средств группового планирования. К тому же эти системы не требовали наличия на рабочих местах весьма "тяжелого" протокола TCP/IP и дорогостоящих UNIX-серверов, и неплохо работали в любых локальных сетях. Наличие шлюзов в другие почтовые системы обеспечивало и продолжает обеспечивать им достаточно гладкую интеграцию в единое почтовое пространство многих компаний. До настоящего времени эти системы успешно эксплуатируются в организациях и подразделениях со сравнительно небольшим числом сотрудников (до 300). Следует упомянуть, что результатом развития именно систем на основе частных стандартов стало появление повсеместно используемых наборов интерфейсов прикладных программ, таких как MAPI (Messaging API) и VIM (Vendor Independent Messaging). Их поддержка реализована на сегодня практически во всех клиентских программах работы с электронной почтой. Однако у систем рассматриваемого типа есть ряд существенных недостатков. Все они используют парадигму почтового отделения (Post Office или PO ) для организации хранилища сообщений. Почтовое отделение представляет собой набор файлов и каталогов определенной структуры, располагаемых на разделяемом ресурсе файлового сервера. Такая схема требует наличия прав на запись и удаление для каждого пользователя на соответствующем разделяемом ресурсе, что делает эти системы чрезвычайно уязвимыми с точки зрения защищенности от умышленной или случайной порчи данных. Кроме того, поскольку операции доставки почты между пользователями в пределах одного почтового отделения выполняются исключительно средствами пользовательского агента (UA), зависание программы или компьютера на клиенте может надолго блокировать или же разрушить служебные файлы, что сделает невозможным работу других пользователей и может потребовать восстановления почтового отделения. Типичная схема системы на основе частых стандартов приведена на рисунке 1.7. В более ранних версиях, MTA в рассматриваемых системах функционировали исключительно под MS-DOS и требовали установки отдельного компьютера для каждого типа соединения, будь то локальная сеть, канал X.25 или коммутируемые линии. По мере развития многозадачных операционных систем, сначала появилась возможность запуска старых MTA под их управлением, а затем сами MTA были переписаны как родные приложения. Примером могут служить MS Mail 3.5 и последняя версия cc: Mail 8.0. Рис. 1.7. Типичная схема построения системы на основе частных стандартов В настоящее время большинство производителей рассматриваемых систем переводят свои продукты в архитектуру клиент-сервер, либо частично, как это сделано в Lotus cc: Mail , либо полностью, как Microsoft Exchange. Pine" еще лучший способ, чем "Elm" Программа Pine построена на основе Elm, но включает некоторые усовершенствования, которые делают ее идеальной системой для новичка. Как и программа Elm, Pine начинается с меню. У нее есть также такая возможность, как "адресная книга", удобная в тех случаях, когда у людей бывают длинные или сложные адреса электронной почты. Нажатие A в главном меню выводит вас в адресную книгу, и там вы вводите имя (или прозвище) человека, а потом - его адрес. Затем, если вы хотите послать этому человеку сообщение, достаточно только ввести его имя или прозвище, а Pine автоматически вставит фактический адрес. Адресная книга также позволяет установить список рассылки. Эта возможность позволяет посылать одно и то же сообщение нескольким лицам одновременно. Но что действительно ставит Pine в особое положение - это его встроенный текстовый редактор, который на взгляд и на ощупь очень похож на программы текстовых процессоров, работающие на машинах с MS-DOS и Macintosh. У него не только есть автоматический перенос слов в конце строки (самая революционная концепция, которая когда-либо рождалась на свет), у него есть еще и контроль правописания и команда поиска. И что лучше всего, все команды, которые вам нужны, собраны в двух строчное мини-меню внизу каждого экрана. Команды выглядят примерно так: ^W Where is (где это) Символ-шапочка (^) - это синоним клавиши "control" вашей клавиатуры. Чтобы найти у себя в документе конкретное слово, нажмите одновременно клавиши control и W; в ответ появится приглашение ввести слово для поиска. Некоторые из команд Pine довольно причудливы (например, control-V для перевода страницы вниз), что связано с тем, что редактор создан на основе emacs (который странен по самой сути). Но все же все команды, которые вам нужны, собраны в двух строчном мини-меню внизу экрана, так что выбор правильной команды не отнимет больше двух секунд. Чтобы использовать Pine, введите в командной строке pine и нажмите enter. Эта программа относительно новая, так что в некоторых системах ее может еще не быть. Но она настолько проста в работе, что вам стоит послать электронное письмо своему системному администратору и поторопить его ее приобрести! "Elm " более удобный способ Elm представляет собой комбинацию почтового ящика с программой написания писем, в которой для перемещения между письмами используется меню. Большинство систем на основе Unix в настоящее время ее содержит. Чтобы ею воспользоваться, введите elm и нажмите enter. Вы получите меню ожидающих вас сообщений, а также список команд, которые вы можете выполнять. Это будет выглядеть примерно так: Mailbox is '/usr/spool/mail/adamg' with 38 messages [ELM 2.3 PL11] Sep 1Christopher Davis (13) here's another message. Sep 1 Christopher Davis (91) This is a message from Eudora Aug 31Rita Marie Rouvali(161) First Internet Hunt !!! (fwd) Aug 31Peter Scott/Manage(69) New File University of Londo Aug 30Peter Scott/Manage(64) New File X.500 service at A Aug 30Peter Scott/Manage (39) New File DATAPAC Informatio Aug 28 Peter Scott/Manage(67) Proposed Usenet group for HYTELNET n Aug 28Peter Scott/Manage(56) New File JANET Public Acces Aug 26 Helen Trillian Ros (15) Tuesday Aug 26Peter Scott/Manage (151) Update Oxford University OU Почтовый ящик '/usr/spool/mail/adamg' содержит 38 сообщений [ELM 2.3 PL11] Сен 1Christopher Davis(13) Это другое сообщение Сен 1 Christopher Davis (91) Сообщение от Eudora Авг 31Rita Marie Rouvali (161) Первая охота в Internet !!! (fwd) Авг 31 Peter Scott/Manage(69) Новый файл Университет Лондо Авг 30Peter Scott/Manage(64) Новый файл X.500 услуга при Авг 30Peter Scott/Manage(39) Новый файл DATAPAC Информац Авг 28Peter Scott/Manage(67) Предложенная группа Usenet для HYTEL Авг 28Peter Scott/Manage (56) Новый файл JANET Общедоступ Авг 26Helen Trillian Ros(15) Вторник Авг 26 Peter Scott/Manage(151) Дополнения Оксфордский Унив У вас есть возможность выполнить любую из следующих команд нажатием соответствующего символа :d)удалить u)восстановить удаленное сообщение, m) послать сообщение, r) ответить f)переадресовать сообщение, q)выйти. Чтобы прочитать сообщение, нажмите . j = движение вниз, k = движение вверх, ? = помощь. В каждой строке указана дата получения сообщения, отправитель, количество строк в сообщении и его тема (subject). Если используется эмуляция терминала VT100, то можно передвигаться вверх и вниз по меню с помощью соответствующих клавиш управления курсором. В противном случае введите номер строки того сообщения, которое надо удалить или прочесть, и нажмите enter. При чтении сообщения оно останавливается через каждые 24 строки, а не прокручивается сразу и до конца. Чтобы прочесть следующую страницу, нажмите пробел. Можно ввести символ r нижнего регистра, чтобы ответить на сообщение, или символы q или i нижнего регистра для возвращения обратно в меню (I - первая буква слова "index" - указатель). В главном меню нажатие буквы m на нижнем регистре и вслед за ней - клавиши enter позволяет начать новое сообщение. Для удаления сообщения введите символ d нижнего регистра. Это можно сделать в процессе чтения сообщения. При нахождении в меню поставьте курсор на строку удаляемого сообщения и нажмите d. Когда закончите работу с программой Elm, введите символ q нижнего регистра. Программа спросит, правда ли вы хотите удалить те сообщения, которые пометили. Потом она спросит вас, хотите ли вы передать те сообщения, которые вы прочли, но не удалили, в файл полученных сообщений ("received"). Пока что отвечайте n. Программа Elm имеет один очень большой недостаток для начинающего. Тот текстовый редактор, которые она по умолчанию вызывает, когда вы нажимаете клавиши r или m, часто оказывается программой по имени emacs. Почитатели систем Unix клянутся именем этой программы, но все остальные почти всегда находят, что работать с ней невозможно. К несчастью, вам не всегда удастся избавиться от нее (или от vi - другого текстового редактора, встречающегося в системах Unix), так что чуть позже мы поговорим о тех командах, которые все же предохраняют от полного сумасшествия. Если вы хотите сохранить сообщение в своем компьютере, то нажмите s, либо в момент чтения сообщения, либо при нахождении курсора на строке сообщения в меню программы Elm. Появится имя файла. Если вам оно не нравится, впишите новое (забоем пользоваться не придется). Нажмите enter, и сообщение будет сохранено с указанным именем файла в вашей "домашней директории" в вашей местной системе. После выхода из программы Elm можно выгрузить сообщение в свой компьютер (как загружать такие файлы в свой компьютер или выгружать из него "вверх" - спросите у своего системного администратора).

HotMail своими руками, или Что может PH

Виктор Хименко МИР ПК #02/99 В этой статье я хотел бы продемонстрировать, что создание работоспособных и полезных динамических Web-узлов вовсе не такая сложная задача, как может показаться при чтении текстов, описывающих интерфейс CGI. На самом деле подобная работа (по крайней мере, при использовании Linux) больше всего напоминает игру The Incredible Machines, где нужно кремнем высечь искру, чтобы свет упал на солнечную батарею, от которой срабатывает сверхсовременный компьютер. Здесь тоже все, как правило, собирается из компонентов, которые оказались под рукой. В качестве примера мы рассмотрим создание почтовой службы на Web- сервере - WebMail - на основе языка PHP3 с максимальным использованием готовых компонентов. За кадром останутся создание новых пользователей, их регистрация в базе данных и т. п. Наша почта, кроме того, не будет обрабатывать письма с вложениями и в кодировках, отличных от KOI8-R, поддерживать записные книжки и т. п. - все это лишь увеличило бы размеры сценариев, не дав ничего принципиально нового.

Компоненты

Вначале о "готовых компонентах". Я уже упомянул о том, что все описанное ниже рассчитано на использование Linux. Однако существующие дистрибутивы этой ОС настолько различаются по комплектации, что вряд ли удастся построить пример, который годился бы для любой версии. Поэтому я ограничусь версией, с которой лучше всего знаком, - KSI-Linux 2.0 (http://www.ksi-linux.com/). Если у вас другой вариант Linux, например RedHat 5.2 или Debian 2.0, то вам, скорее всего, потребуется получить некоторые компоненты из Internet или перекомпилировать уже имеющиеся. Нам понадобятся Web-сервер Russian Apache 1.3.x rus/PL 27.4, PHP 3.0.6 с поддержкой протокола IMAP4r1 и почтовый сервер IMAP4r1. Благодаря Russian Apache мы будем, по крайней мере отчасти, избавлены от проблем с кодировками: независимо от кодировки, используемой клиентом, данные на сервер всегда будут посылаться в KOI8-R (это настройка Russian Apache по умолчанию). Сервер IMAP4r1 позволит нам манипулировать почтовым ящиком, не описывая в явной форме права доступа (связываясь с этим сервером, вы указываете свое имя и пароль, и он сам решает все проблемы с правами). И наконец, PHP 3.0.6 с поддержкой протокола IMAP4r1 даст возможность работать с сервером IMAP4r1, не реализуя самостоятельно соответствующий протокол, который весьма и весьма нетривиален. Здесь многие зададут вопрос: а почему не perl? Дело в том, что, хотя язык perl - стандартная "рабочая лошадка" для создания Web-узлов, у него есть определенные недостатки. Интерпретатор perl существенно сложнее интерпретатора PHP и требует для работы больше ресурсов компьютера. Кроме того, это не интерпретатор в точном смысле слова: он компилирует программу в специализированный псевдокод, который затем немедленно исполняется. Если в программе есть циклы, такой подход может дать существенный выигрыш, но если нет (как это часто бывает в простых сценариях для Web-сервера - например, во всей нашей реализации WebMail будет всего один цикл), накладные расходы не окупаются. Применение mod_perl - дополнительного модуля Apache - позволяет избежать многократной перекомпиляции сценариев, но при этом к памяти сервера предъявляются еще более высокие требования.

Коротко о PHP

Теперь несколько слов о том, что же такое PHP. Это интерпретируемый язык для создания активных Web-страниц. Программа на PHP, подобно тексту на JavaScript, VBScript или ASP, вставляется в HTML-файл. Начало и конец программы отмечаются специальными скобками <?PHP и ?>. Текст вне этих скобок PHP не интерпретирует: он передается Web-браузеру "как есть". В листинге 1 приведена реализация на PHP "вечного" примера - счетчика. Как видите, это совершенно обычный HTML-файл, однако в том месте, где должно стоять количество посещений, стоит сценарий на PHP3, который в качестве результата своей работы выводит число посещений страницы1. Синтаксис PHP основан на синтаксисе языков Си, Java и perl и довольно подробно описан в руководстве, которое входит в комплект поставки (его также можно взять на узле http://www.php.net/). Способы заставить сервер правильно реагировать на HTML-файлы со вставками на PHP, вообще говоря, различны для разных серверов, но чаще всего бывает достаточно дать имени файла расширение .php3. Итак, мы хотели бы иметь возможность читать и отправлять почту с помощью Web- браузера. Видимо, будет разумно сделать интерфейс похожим, скажем, на Netscape Messenger: окно разделено по горизонтали на две части, в верхней находится список писем в нашем почтовом ящике на сервере, в нижней - текущее письмо. Но перед тем как показать пользователю HTML-файл с описанием фреймов, мы потребуем от него ввести свое имя и пароль (при неправильно введенном пароле он получит файл, содержащий сообщение об ошибке). Эту функцию будет осуществлять файл index.php3, показанный в листинге 2. Давайте посмотрим на него поближе. Прежде всего стоит обратить внимание на то, что скобка <?PHP, открывающая PHP-сценарий, стоит в самом начале файла. Это не случайно. Дело в том, что не нужно сообщать браузеру о том, что документ состоит из нескольких фреймов, пока пользователь не введет правильные имя и пароль. Чтобы запросить пароль, мы меняем "ответ сервера" с обычного "200 OK" на "401 Auth Required"2. Это очень просто: специально для подобных случаев в PHP предусмотрена функция Header(). Но эта функция работает только при условии, что перед ее вызовом вывод документа еще не был начат, и следовательно, скобка <?PHP должна стоять в самом начале файла... Дальнейшее очевидно: мы смотрим на введенное пользователем имя и пароль, пытаемся связаться с сервером IMAP4r1 и, если все прошло успешно, просто выдаем информацию о наборе фреймов. Однако теперь во все сценарии в том подкаталоге, где размещается наш стартовый файл index.php3, будет передаваться информация об имени и пароле!3 Заметим также, что перед именем функции imap_open стоит символ "@". Он означает, что сообщения о возможных ошибках при работе функции должны не выводиться в текст на HTML (поведение PHP по умолчанию), а сохраняться в специальной переменной. Это необходимо для того, чтобы воспользоваться функцией Header(): она не будет работать, если в тело документа уже выведен какой бы то ни было текст, в том числе и сообщение об ошибке.

Другие файлы

Теперь нам нужно создать файлы top.php3 и main.php3, на которые имеются ссылки в index.php3. Начнем с top.php3 (листинг 3). В нем мы строим таблицу, в которой каждая строка соответствует одному письму и содержит его порядковый номер, тему, имя (адрес) отправителя и дату отправки. Вся информация извлекается из соответствующих полей заголовка письма. При оформлении ссылок (HREF) мы должны не забыть передать номер письма (как при работе с обычным CGI-сценарием). Файл main.php3 (листинг 4) проверяет, установлена ли переменная $mail. Если нет, то выводится только надпись New message с соответствующей ссылкой, а если да, добавляются еще две ссылки - Reply и Delete. Кроме того, ссылки, встречающиеся в тексте письма, заменяются на ссылки HTML. Файлы mail.php3, del.php3 и send.php3 (листинги 5-7) устроены предельно просто, однако, так как файлы del.php3 и send.php3 содержат вызовы функции Header(), они начинаются со скобки <?PHP. На сей раз эти вызовы нужны для того, чтобы сообщение об успешной посылке или удалении письма заменилось на основное окно автоматически, без каких бы то ни было действий со стороны пользователя.

Чего мы не сделали

Вот и все. Служба WebMail готова (см. рисунок). Как несложно заметить, мы всего лишь соединили готовые части - все наши шесть файлов не насчитывают и двух сотен строк - и получили почти настоящую почтовую программу. Конечно, с ней связаны и некоторые проблемы. Например, такие.
  1. Что будет, если с помощью нашей WebMail попробовать читать почту одновременно с двух компьютеров? При удалении письма на одном компьютере нумерация "съедет", и на втором начнут происходить весьма неприятные вещи.
  2. Как уже было замечено, на сервере с не полностью контролируемым содержанием использование нашей программы может привести к попаданию паролей в нечистые руки.
  3. Нет поддержки кодировок, отличных от KOI8-R, для почты (при том, что для Web-браузера благодаря Russian Apache поддерживаются все распространенные кодировки).
  4. Нет поддержки вложений.
  5. Нет записной книжки.
  6. Нет поддержки папок.
Впрочем, мы и не ставили себе целью создать программу, способную сравниться с Eudora или Pegasus (но, кстати, программа Imap webMail Program - см. http://web.horde.org/imp/ - очень близка к этому). Сделаем еще несколько замечаний по поводу возможных решений первой и второй проблемы. Эти проблемы связаны с обеспечением безопасности, а значит, требуют особого внимания. Для решения первой проблемы можно передавать в дополнение к номеру письма еще и идентификатор сообщения (MessageID); это, однако, повлечет существенное усложнение программы, так как нужно будет организовать подробное "разбирательство" в случае несовпадения идентификаторов, а также корректное обновление списка писем. Вторая проблема решается путем добавления еще одной формы на входе и передачи имени пользователя и пароля от сценария к сценарию через URL - так, как сейчас передается номер письма. Но тогда пароль будет появляться в адресной строке браузера. С этим можно бороться двумя способами - либо зашифровывая пароль перед посылкой и расшифровывая при получении, либо создав еще два фрейма: первый не используется никак (или в нем размещается реклама, что, в общем, то же самое), во втором происходит вся работа. Можно и скомбинировать названные способы. Дерзайте! ЛИСТИНГ 1 Файл counter.php3 (счетчик числа посещений Web-страницы) <html> <body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000"> <p> Число посещениий: <?PHP $filename = "counter.dat"; $fp = @fopen($filename,"r"); if ($fp) { $counter=fgets($fp,10); fclose($fp); } else { $counter=0; } $counter++; print $counter; $fp = fopen($filename,"w"); if ($fp) { $counter=fputs($fp,$counter); fclose($fp); } ?> </body> </html> ЛИСТИНГ 2 Файл index.php3 (идентификация пользователя, установление контакта с почтовым сервером и создание набора фреймов для вывода списка писем и текста текущего письма) <?PHP $REALM = "Web mail"; $POPSERVER = '127.0.0.1'; $LOGERRORS = 1; if(!isset($PHP_AUTH_USER)): Header( "WWW-Authenticate: Basic realm=\"$REALM\""); Header( "HTTP/1.0 401 Unauthorized"); echo "<H1>Authorization Required</H1>\n"; exit; else: if(!($imap_stream=@imap_open("{127.0.0.1:143}Inbox","$PHP_ AUTH_USER","$PHP_AUTH_PW",OP_READONLY))): Header( "WWW-Authenticate: Basic realm=\"$REALM\""); Header( "HTTP/1.0 401 Auth Required"); echo "<H1>Authorization Required</H1>\n"; exit; else: imap_close($imap_stream); ?> <html> <frameset border="0" framespacing="-2" rows="20%,80%"> <frame src="top.php3" name="top" marginwidth="1" marginheight="1" framespacing="0"> <frame src="main.php3" name="main" marginwidth="1" marginheight="1" framespacing="0"> </frameset> <noframes> <body> Sorry, but your browser does not support frames...<br> </body> </noframes> </html> <?PHP endif; endif; ?> ЛИСТИНГ 3 Файл top.php3 (формирование списка писем) <html> <body bgcolor="#C04040" text="#FFFFFF" link="#0000FF" vlink="#800080" alink="#FF0000"> <BASE TARGET="main"> <?PHP $imap_stream=imap_open("{127.0.0.1:143}Inbox","$PHP_AUTH_USER", "$PHP_AUTH_PW",OP_READONLY); $inbox=imap_mailboxmsginfo($imap_stream); ?> <CENTER><table width="100%"> <tr><th>NN</th><th>Subject</th><th>From</th><th>Date</th></tr> <tr><td> <?PHP for($i=1;$i<=$inbox->Nmsgs;$i++): $header=imap_header($imap_stream,$i,300,300,0); echo "<tr><td><B><a href=main.php3?mail=".$i. ">".$i. "</a></B></td><td><a href=main.php3?mail=".$i. ">".$header->Subject. "</a></td><td><a href=main.php3?mail=".$i. ">".$header->fromaddress. "</a></td><td><a href=main.php3?mail=".$i. ">".$header->Date. "</a></td></tr>"; endfor; imap_close($imap_stream); ?> </table> </CENTER> </body> </html> ЛИСТИНГ 4 Файл main.php3 (проверка наличия писем и вывод кнопок) <html> <body bgcolor="#408080" text="#FFFFFF" link="#0000FF" vlink="#800080" alink="#FF0000"> <BASE TARGET="main"> <a href=mail.php3>New message</a> <?PHP if (isset($mail) && ($mail>=1)):?>| <a href=mail.php3?mail=<?PHP echo $mail;?>> Reply</a>| <a href=del.php3?mail=<?PHP echo $mail;?>target= _top>Delete</a><?PHP endif;?><br><br> <?PHP if(isset($mail) && ($mail>=1)): $imap_stream=imap_open("{127.0.0.1:143}Inbox","$PHP_AUTH_USER", "$PHP_AUTH_PW",OP_READONLY); $inbox=imap_mailboxmsginfo($imap_stream); $body=imap_fetchbody($imap_stream,$mail,1,0); print(nl2br(eregi_replace( "(http|https|ftp)://([-=%_ a-zA-Z0-9./~?:]+)", "<a href=\"\\1://\\2\" target=\"_blank\ ">\\1://\\2</a>", htmlspecialchars($body)))); imap_close($imap_stream); endif; ?> </body> </html> ЛИСТИНГ 5 Файл mail.php3 (создание письма) <html> <body bgcolor="#408080" text="#FFFFFF" link="#0000FF" vlink="#800080" alink="#FF0000"> <BASE TARGET="main"> <?PHP if (isset($mail) && ($mail>=1)): $imap_stream=imap_open("{127.0.0.1:143}Inbox","$PHP_AUTH_USER", "$PHP_AUTH_PW",OP_READONLY); $header=imap_header($imap_stream,$mail,300,300,0); endif; ?> <FORM ACTION='send.php3' METHOD='POST'> <TABLE WIDTH=100%> <TR> <TD WIDTH="150"> <B><b>Your name :</b></B> </TD><TD COLSPAN=2 > <INPUT TYPE="text" NAME="sendername" VALUE="<?PHP echo $sendername;?>" SIZE=60 maxlength=70> </TD></TR> <TR> <TD WIDTH="150"> <B><b>From :</b></B> </TD><TD COLSPAN=2 > <INPUT TYPE="text" NAME="sender" VALUE="<?PHP echo $PHP_AUTH_USER."@host.some_domain.com";?>" SIZE=60 maxlength=70> </TD></TR> <TR> <TD WIDTH="150"> <B><b>Subject :</b></B> </TD><TD COLSPAN=2 > <INPUT TYPE="text" NAME="subject" VALUE="<?PHP if (isset($mail) && ($mail>=1)):?>Re: <?PHP echo eregi_replace("\"",""",$header->Subject); endif;?>" SIZE=60 maxlength=70> </TD></TR> <TR> <TD WIDTH="150"> <B><b>To :</b></B> </TD><TD COLSPAN=2 > <INPUT TYPE="text" NAME="mailto" VALUE="<?PHP if (isset($mail) && ($mail>=1)): echo eregi_replace ("\"",""",$header->fromaddress); endif;?>" SIZE=60 maxlength=70> </TD></TR> <TR> <TD WIDTH="150"> <B>Message body : </TD><TD COLSPAN=2 > <textarea name="text" rows=15 cols=59><?PHP if (isset($mail) && ($mail>=1)): echo "> ".eregi_replace ("\n","\n> ",htmlspecialchars(imap_fetchbody ($imap_stream,$mail,1,0))); endif;?></textarea> <center><input type=submit value="Send"></center><br> </TD></TR> </TABLE> </form> </body> </html> <?PHP if (isset($mail) && ($mail>=1)):imap_close($imap_stream);endif; ?> ЛИСТИНГ 6 Файл del.php (удаление письма) <html> <body bgcolor="#408080" text="#FFFFFF" link="#0000FF" vlink="#800080" alink="#FF0000"> <BASE TARGET="main"> <?PHP if (isset($mail) && ($mail>=1)): $imap_stream=imap_open("{127.0.0.1:143}Inbox","$PHP_AUTH_USER", "$PHP_AUTH_PW",OP_READONLY); $header=imap_header($imap_stream,$mail,300,300,0); endif; ?> <FORM ACTION='send.php3' METHOD='POST'> <TABLE WIDTH=100%> <TR> <TD WIDTH="150"> <B><b>Your name :</b></B> </TD><TD COLSPAN=2 > <INPUT TYPE="text" NAME="sendername" VALUE="<?PHP echo $sendername;?>" SIZE=60 maxlength=70> </TD></TR> <TR> <TD WIDTH="150"> <B><b>From :</b></B> </TD><TD COLSPAN=2 > <INPUT TYPE="text" NAME="sender" VALUE="<?PHP echo $PHP_AUTH_USER."@host.some_domain.com";?>" SIZE=60 maxlength=70> </TD></TR> <TR> <TD WIDTH="150"> <B><b>Subject :</b></B> </TD><TD COLSPAN=2 > <INPUT TYPE="text" NAME="subject" VALUE="<?PHP if (isset($mail) && ($mail>=1)):?>Re: <?PHP echo eregi_replace ("\"",""",$header->Subject); endif;?>" SIZE=60 maxlength=70> </TD></TR> <TR> <TD WIDTH="150"> <B><b>To :</b></B> </TD><TD COLSPAN=2 > <INPUT TYPE="text" NAME="mailto" VALUE="<?PHP if (isset($mail) && ($mail>=1)): echo eregi_replace ("\"",""",$header->fromaddress); endif;?>" SIZE=60 maxlength=70> </TD></TR> <TR> <TD WIDTH="150"> <B>Message body : </TD><TD COLSPAN=2 > <textarea name="text" rows=15 cols=59><?PHP if (isset($mail) && ($mail>=1)): echo "> ".eregi_replace ("\n","\n> ",htmlspecialchars(imap_fetchbody ($imap_stream,$mail,1,0))); endif;?></textarea> <center><input type=submit value="Send"></center><br> </TD></TR> </TABLE> </form> </body> </html> <?PHP if (isset($mail) && ($mail>=1)):imap_close($imap_stream);endif; ?> ЛИСТИНГ 7 Файл send.php3 (отправка письма) <?PHP Header("Refresh: 5;url=main.php3"); ?> <html> <body bgcolor="#408080" text="#FFFFFF" link="#0000FF" vlink="#800080" alink="#FF0000"> <BASE TARGET="main"> <?PHP mail($mailto,$subject,$text,"From: $sendername <$sender>\nContent-Type: text/plain; charset=KOI8-R"); ?> Message was succesfully sent. </body> </html>
1 Сценарий намеренно предельно упрощен: он не заботится о блокировке файлов, не обрабатывает ошибки записи на диск и т. п. Заметим, что наш счетчик, в отличие от большинства других, написан без использования тега <IMG>. Это позволяет сократить трафик и решает проблему неграфических браузеров (например, браузеров для слепых), но может создать проблемы, если нам нужен единый счетчик для нескольких "зеркал" основного узла. "Традиционная" реализация счетчика в PHP также не представляет проблемы, поскольку он имеет множество функций для порождения GIF-файлов (включая даже получение красивых надписей, выполненных шрифтами TrueType). 2 Число 401 взято не с потолка, а из описания протокола HTTP. 3 К сожалению, если в каком-либо другом подкаталоге указать realm="Web mail", то находящиеся в нем сценарии также получат соответствующую информацию. Поэтому данный метод неприемлем, если вы не можете контролировать содержимое всего узла. В конце статьи мы обсудим, как обойти это ограничение.