Основная задача протокола 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
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
ничего не делает и никак не влияет на указанные до этого данные.