Основная
задача протокола SMTP (Simple Mail Transfer Protocol) заключается в
том, чтобы обеспечивать передачу электронных сообщений (почту). Для
работы через протокол SMTP клиент создаёт TCP соединение с сервером
через порт 25. Затем клиент и SMTP сервер обмениваются информацией пока
соединение не будет закрыто или прервано. Основной процедурой в SMTP
является передача почты (Mail Procedure). Далее идут процедуры
форвардинга почты (Mail Forwarding), проверка имён почтового ящика и
вывод списков почтовых групп. Самой первой процедурой является открытие
канала передачи, а последней - его закрытие.
Команды SMTP
указывают серверу, какую операцию хочет произвести клиент. Команды
состоят из ключевых слов, за которыми следует один или более
параметров. Ключевое слово состот из 4-х символов и разделено от
аргумента одним или несколькими пробелами. Каждая командная строка
заканчивается символами CRLF. Вот синтаксис всех команд протокола SMTP
(SP - пробел):
HELO MAIL FROM: RCPT TO: DATA RSET SEND FROM: SOML FROM: SAML FROM: VRFY EXPN HELP NOOP QUIT
Обычный
ответ SMTP сервера состоит из номера ответа, за которым через пробел
следует дополнительный текст. Номер ответа служит индикатором состояния
сервера.
Отправка почтыду HELL
Первым делом подключаемся к SMTP серверу через порт
25. Теперь надо передать серверу команO и наш IP
адрес:
C: HELLO 195.161.101.33 S: 250 smtp.mail.ru is ready
При отправке почты передаём некоторые нужные данные (отправитель, получатель и само письмо):
C: MAIL FROM: 'указываем отправителя S: 250 OK
C: RCPT TO: 'указываем получателя S: 250 OK
указываем серверу, что будем передавать содержание письма (заголовок и тело письма)
C: DATA S: 354 Start mail input; end with .
передачу письма необходимо завершить символами CRLF.CRLF
S: 250 OK
C: From: Drozd C: To: Drol 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
ничего не делает и никак не влияет на указанные до этого данные.