From: Александр Бельбаков
Newsgroups: http://codenet.ru/
Date: Mon, 20 Sep 2004 18:21:07 +0000 (UTC)
Subject: Краткое описание протокола SMTP
Оригинал: http://codenet.ru/webmast/smtp.php
Описание протокола SMTP
Александр Бельбаков, http://HiProg.com/vb/ "Технологии программирования"
Введение
Основная задача протокола SMTP (Simple Mail Transfer Protocol)
заключается в том, чтобы обеспечивать передачу электронных сообщений
(почту). Для работы через протокол SMTP клиент создаёт TCP соединение
с сервером через порт 25. Затем клиент и SMTP сервер обмениваются
информацией пока соединение не будет закрыто или прервано. Основной
процедурой в SMTP является передача почты (Mail Procedure). Далее идут
процедуры форвардинга почты (Mail Forwarding), проверка имён почтового
ящика и вывод списков почтовых групп. Самой первой процедурой является
открытие канала передачи, а последней - его закрытие.
Команды SMTP указывают серверу, какую операцию хочет произвести
клиент. Команды состоят из ключевых слов, за которыми следует один или
более параметров. Ключевое слово состот из 4-х символов и разделено от
аргумента одним или несколькими пробелами. Каждая командная строка
заканчивается символами CRLF. Вот синтаксис всех команд протокола SMTP
(SP - пробел):
Обычный ответ SMTP сервера состоит из номера ответа, за которым через
пробел следует дополнительный текст. Номер ответа служит индикатором
состояния сервера.
Отправка почты
Первым делом подключаемся к SMTP серверу через порт 25. Теперь надо
передать серверу команду HELLO и наш IP адрес:
C: HELLO 195.161.101.33
S: 250 smtp.mail.ru is ready
При отправке почты передаём некоторые нужные данные (отправитель,
получатель и само письмо):
C: MAIL FROM:<drozd> 'указываем отправителя
S: 250 OK
C: RCPT TO:<drol@mail.ru.> 'указываем получателя
S: 250 OK
указываем серверу, что будем передавать содержание письма (заголовок и
тело письма)
C: DATA
S: 354 Start mail input; end with <CRLF>.<CRLF>
передачу письма необходимо завершить символами CRLF.CRLF
между заголовком письма и его текстом не одна пара CRLF, а две.
C: Hello Drol!
C: You will be die on next week!
заканчиваем передачу символами CRLF.CRLF
S: 250 OK
Теперь завершаем работу, отправляем команду QUIT:
S: QUIT
C: 221 smtp.mail.ru is closing transmission channel
> Другие команды
* SEND - используется вместо команды MAIL и указыает, что почта
должна быть доставлена на терминал пользователя.
* SOML, SAML - комбинации команд SEND или MAIL, SEND и MAIL
соответственно.
* RSET - указвает серверу прервать выполнение текущего процесса. Все
сохранённые данные (отправитель, получатель и др) удаляются.
Сервер должен отправить положительный ответ.
* VRFY - просит сервер проверить, является ли переданный аргумент
именем пользователя. В случае успеха сервер возвращает полное имя
пользователя.
* EXPN - просит сервер подтвердить, что переданный аргумент - это
список почтовой группы, и если так, то сервер выводит членов этой
группы.
* HELP - запрашивает у сервера полезную помощь о переданной в
качестве аргумента команде.
* NOOP - на вызов этой команды сервер должен положительно ответить.
NOOP ничего не делает и никак не влияет на указанные до этого
данные.