Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

Теоретические сведения. Протокол электронной почты SMTP



Протокол электронной почты SMTP

Электронная почта - это средство передачи сообщений между любыми двумя ЭВМ, имеющими соединение в сети.

SMTP (Simple Mail Transfer Protocol - простой протокол электронной почты) принят в качестве стандартного метода передачи электронной почты в сети Internet. Этот протокол во многом подобен протоколу FTP. В качестве транспортного протокола SMTP использует TCP, соединение устанавливается через порт с номером 25. Для обслуживания этого соединения используется специальная программа – почтовым сервером. Для формирования сообщения и установления соединения используется почтовая программа (утилита) пользователя.

Главная цель протокола SMTP – надежная и эффективная доставка электронных почтовых сообщений. Для реализации протокола требуется надежный канал связи. Средой для SMTP может служить отдельная локальная сеть, система сетей или Internet. Если между отправителем и получателем письма имеется непосредственная связь, адрес пользователя имеет вид имя_пользователя@адрес_ЭВМ. Когда получатель находится на ЭВМ, которая не поддерживает соединение по протоколу SMTP, и передача происходит через промежуточный сервер, то адрес получателя письма может иметь иной вид, например, имя_пользователя%имя_сервера@адрес_ЭВМ. Адреса ЭВМ в сети Internet представляют собой имя домена и преобразуются в IP-адреса согласно протоколу DNS.

Протокол SMTP базируется на следующей модели коммуникаций: в ответ на запрос пользователя почтовая программа-отправитель сообщения устанавливает двухстороннюю связь с программой-приемником (почтовым сервером). Получателем может быть оконечный или промежуточный адресат. Если необходимо, почтовый сервер может установить соединение с другим сервером и передать сообщение дальше. SMTP-команды генерируются отправителем и посылаются получателю. На каждую команду должен быть получен отклик.

Перечень команд протокола SMTP приведен в табл. 3. Это внутренние команды протокола. Если пользователь использует для работы с электронной почтой некоторую утилиту, то эти команды ему недоступны. Они представляют интерес только при программировании взаимодействия программ на основе этого протокола.

Таблица 3.

Внутренние команды протокола SMTP

Команда Описание команды
DATA Сообщение (за командой следует текст сообщения)
EXPN Расширение списка получателей
HELO Используется при инициализации обмена при установлении соединения
HELP Запрос о помощи
MAIL Адрес отправителя
NOOP Никаких действий (пустая команда)
QUIT Разрыв соединения
RCPT Адрес получателя (таких команд может быть несколько)
RSET Закончить текущую транзакцию
SAML Послать письмо на терминал пользователя и в почтовый ящик
SEND Послать письмо на терминал
SOML Если можно, послать письмо на терминал, иначе - в почтовый ящик
TURN Изменить направление передачи (отправитель и получатель меняются местами)
VRFY Проверить имя пользователя

 

Через систему электронной почты передаются сообщения, имеющие определенный формат. Любое почтовое сообщение можно разделить на три части: "конверт", заголовки и собственно текст. "Конверт" используется почтовым сервером и содержит две команды - MAIL и RCPT. Заголовок используется почтовой программой пользователя. Он содержит девять специальных полей: Received, From, To, Date, Subject, Message-Id, X-Phone, X-Mailer, Reply-To. Каждое из этих полей содержит имя, за которым после двоеточия идет его значения. При желании, пользователь может ознакомиться с содержимым всех полей заголовка письма.

Текст сообщения должен передаваться в виде 7-разрядных символов ASCII. Конец сообщения представляет собой строку, содержащую только символы точки (".") и перевода строки. Если по каким-то причинам такая строка встречается внутри текста сообщения, то передающая сторона автоматически дублирует точку, чтобы принимающая сторона не приняла ее за конец сообщения.

С 7-битной кодировкой сообщений связана проблема пересылки писем, написанных на национальных языках, в т.ч. и на русском, поскольку для русского алфавита требуется 8-битная кодировка. Большинство современных почтовых серверов поддерживают не только 7-битные, но и 8-битные кодировки, однако, для совместимости со старыми почтовыми системами используется специальная схема преобразования 8-битных кодов в 7-битные.

Нет единого стандарта на кодировку русского алфавита, и поэтому на сторонах отправителя и получателя могут использоваться различные кодировки. Для перекодирования сообщений почтовый сервер использует таблицы смены кодировок. Информация об исходной кодировке включается почтовой системой отправителя в текст или в заголовок сообщения (в зависимости от используемой системы). Одно сообщения в процессе своего прохождения через почтовые сервера может претерпеть несколько перекодировок.

Передача сообщения по протоколу SMTP. После установления соединения стороны обмениваются кодами аутентификации (с помощью команд HELO), затем одна из них посылает команду MAIL, в которой указан адрес отправителя и сведения о письме. Если получатель готов к приему сообщения, он посылает положительный отклик. Далее отправитель посылает одну или несколько команд RCPT, в которых идентифицирует адресатов сообщения. Если получатель может принять сообщение для указанного адресата, то он снова выдает положительный отклик на каждую команду. После этого передается команда DATA за которой следует само письмо (сколько бы не было адресатов, само письмо передается только один раз). В конце сеанса отправитель дает команду QUIT.

Сервер размещает сообщение в почтовом ящике пользователя. Почтовый ящик - это промежуточное хранилище электронных сообщений, позволяющее почтовому серверу осуществить их передачу адресату в момент установления связь с сервером.

Для того, чтобы получить сообщение из своего почтового ящика, почтовая программа пользователя соединяется с сервером уже не по протоколу SMTP, а по почтовому протоколу получения сообщений позволяющему работать с почтовым ящиком: забирать, удалять, сортировать сообщения и выполнять другие операции. Самым популярным в настоящее время протоколом является POP3 (Post Office Protocol v.3), который предусматривает соединение с почтовым сервером на основе транспортного протокола TCP через порт 110. Другой, более сложный, известный протокол - IMAP4.

Для непосредственного взаимодействия с пользователем существует простейшая программа, именуемая mail или mailx. Однако в современных ОС существует большое количество прикладных программ с развитым интерфейсом, которые предоставляют пользователю возможности работы с электронной почтой. Например, Outlook Express (производство фирмы Microsoft) и Netscape Communicator (производство фирмы Netscape).

Программирование взаимодействия программ на основе прикладных протоколов

Рассмотренные в этой и предыдущей лабораторных работах прикладные протоколы позволяют осуществлять обмен через сеть Internet различного рода данными.

Во многих ОС прикладные протоколы реализованы в различных утилитах. Однако часто возникает необходимость осуществить обмен данными непосредственно между прикладными программами. Для решения такой задачи можно использовать вызов утилит ОС из прикладной программы с помощью командной строки. Такой подход имеет два недостатка: во-первых, скорость работы прикладной программы в этом варианте будет ниже, чем при непосредственном обмене данными по протоколу; во-вторых, необходимо параллельное выполнение утилиты ОС и прикладной программы с организацией взаимодействия между ними, что не всегда возможно. Гораздо эффективнее включить обмен данными по заданному протоколу непосредственно в код разрабатываемой прикладной программы.

Поскольку в качестве транспортного протокола для всех протоколов прикладного уровня используется TCP, то чтобы реализовать обмен данными по любому выбранному протоколу необходимо использовать обмен данными на основе TCP. Для этого в составе многих ОС имеются специальные библиотеки программных средств, позволяющие прикладным программам пользователя осуществлять обмен данными по протоколу TCP. Для это используется механизм сокетов, реализованный в стандартных библиотеках, которые позволяют осуществлять простые операции: установить связь с ЭВМ, для которой известны адрес и порт связи, передать блок данных по протоколам TCP или UDP, получить блок данных, поступивший на локальную ЭВМ. Для реализации стандартных прикладных протоколов также разработано большое количество программных библиотек в различных языках программирования.

Средства реализации прикладных протоколов Internet в среде разработки С++ Builder 5.0

Каждому типу протокола в среде программирования соответствует свой класс объектов, который представлен в виде компоненты в рамках среды. Для того, чтобы работать с выбранным протоколом, разработчик должен создать экземпляр объекта нужного класса. После создания экземпляра объекта, с ним можно работать, используя свойства и методы объекта. Если необходимо использовать несколько соединений по одному и тому же протоколу, то нужно создать столько экземпляров объекта, сколько соединений предполагается использовать.

В среде программирования С++ Builder 5.0 для реализации протоколов FTP, SMTP и POP3 существуют классы объектов типа NMFTP, NMSMTP и NMPOP3, соответственно (обычно они находятся на закладке "FastNet" в палитре компонент).

Следующим действием, как правило, становится установка необходимых параметров (свойств) для созданного класса (адрес и порт ЭВМ с которой будет устанавливаться соединение, имя и пароль пользователя и др.) Конкретный состав параметров зависит от типа протокола и того, для какой цели его планируется использовать. Разработчики компонент предусмотрели для каждой из них широкий набор свойств, соответствующих тем или иным параметрам протокола..

Для установления соединения нужно вызвать некоторый метод протокола и передать ему нужные аргументы. Когда все команды будут выполнены, прикладная программа может завершить обмен, или же, изменив какие-то данные, инициировать его снова. В процессе обмена могут возникать различные события (разрыв соединения, ошибки передачи данных, отсутствие прав пользователя и др.), по многим из которых у объектов предусмотрена активизация связанных с ними функций и процедур языка программирования, в которых разработчик может предусмотреть все необходимые действия по реакции прикладной программы на событие.

Более подробную информацию о функциях программного интерфейса с описанными компонентами можно получить в специальной литературе и в примерах к среде разработки.

 

 




Поиск по сайту:

©2015-2020 studopedya.ru Все права принадлежат авторам размещенных материалов.