| Основная задача
протокола SMTP (Simple Mail Transfer Protocol) заключается
в том, чтобы обеспечивать передачу электронных сообщений (почту).
Для работы через протокол SMTP клиент создаёт TCP соединение
с сервером через порт 25. Затем клиент и SMTP сервер обмениваются
информацией пока соединение не будет закрыто или прервано.
Основной процедурой в SMTP является передача почты (Mail Procedure).
Далее идут процедуры форвардинга почты (Mail Forwarding),
проверка имён почтового ящика и вывод списков почтовых групп.
Самой первой процедурой является открытие канала передачи,
а последней - его закрытие.

Команды SMTP указывают серверу, какую операцию
хочет произвести клиент. Команды состоят из ключевых слов,
за которыми следует один или более параметров. Ключевое слово
состот из 4-х символов и разделено от аргумента одним или
несколькими пробелами. Каждая командная строка заканчивается
символами CRLF. Вот синтаксис всех команд протокола SMTP (SP
- пробел):
HELO <SP> <domain> <CRLF>
MAIL <SP> FROM:<reverse-path> <CRLF>
RCPT <SP> TO:<forward-path> <CRLF>
DATA <CRLF>
RSET <CRLF>
SEND <SP> FROM:<reverse-path> <CRLF>
SOML <SP> FROM:<reverse-path> <CRLF>
SAML <SP> FROM:<reverse-path> <CRLF>
VRFY <SP> <string> <CRLF>
EXPN <SP> <string> <CRLF>
HELP <SP> <string> <CRLF>
NOOP <CRLF>
QUIT <CRLF>
Обычный ответ 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
S: 250 OK
C: From: Drozd <drozd@mail.ru>
C: To: Drol <drol@mail.ru>
C: Subject: Hello
между заголовком письма и его текстом не
одна пара 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 ничего не делает и никак не влияет на указанные
до этого данные.
Пошаговое
прохождение электронной почты от отправителя получателю: 1)
Создание письма 2) Соединение почтового клиента с smtp-сервером
3) Передача smtp-серверу информации о том, кому предназначается
почта и кто является отправителем 4) Проверка smtp-сервером
валидности данных об адресате и адресанте и принятие письма
(с заголовками и телом письма) 5) Постановка письма в очередь
доставки 6) DNS запрос о почтовых серверах (MX записи) для
домена адресата 7) попытка соединения с почовыми серверами,
имеющими наибольший приоритет, если не удалось, то попытка
передать письмо на резервные почтовые сервера домена 8) Передача
письма в случае удачного соединения с почтовым сервером домена
адресата, либо попытки переслать письмо позже, в случае неудачи
9) Прием почтовым сервером домена адресата письма, передача
его модулю, который занимается хранением писем и выдачей их
адресатам по протоколу POP3, IMAP или другим 10) соединение
адресата с POP3 или IMAP сервером, аутентификация и получение
письма адресатом |