Описание протокола SMTP
Введение
Основная задача протокола 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 ничего не делает и никак не влияет на указанные до этого данные.
Оставить комментарий
Комментарии
Сначала надо написать кодер-декодер Base64 для авторизации на большинстве серверов
Почитайте на википедии
потом AUTH LOGIN ;
дам тока кусок кода
данные
msgHELO db 'HELO host',13,10
msgFROM db 'mail from: milo@mail.ru',13,10
msgRCPT db 'RCPT TO: LAMERDEATH15@mail.ru',0dh,0ah
msgDATA DB 'DATA',0dh,0ah
msgDATA2 db 'this is the test mail message from
myself',0dh,0ah,0dh,0ah,'.',0dh,0ah
КОД
ush offset wsd
mov eax, 0
mov ax, 0202h
push eax
call wsastartup
invoke htons,25
mov sin2.sin_port, ax
mov sin2.sin_family, 2
push 0
push 1
push 2
call socket
mov s1, eax
push sizeof (sockaddr_in)
push offset sin2
push s1
call connect
push sizeof msgrecv
push offset msgrecv
push s1
call recv
push 0
push sizeof msgHELO
push offset msgHELO
push s1
call send
push 0
push sizeof msgrecv
push offset msgrecv
push s1
call recv
push 0
push sizeof msgFROM
push offset msgFROM
push s1
call send
push 0
push sizeof msgrecv
push offset msgrecv
push s1
call recv
push 0
push sizeof msgRCPT
push offset msgRCPT
push s1
call send
push 0
push sizeof msgrecv
push offset msgrecv
push s1
call recv
push 0
push sizeof msgDATA
push offset msgDATA
push s1
call send
push 0
push sizeof msgDATA2
push offset msgDATA2
push s1
call send
push 0
push sizeof msgrecv
push offset msgrecv
push s1
call recv
push 0
push 0
push sizeof msgQUIT
push offset msgQUIT
push s1
call send
собственна recv можна не юзать, это так для отладки...
ну с либой сокетов разберетесь
если че мыльте LAMERDEATH15@mail.ru
Вы бы подсказали, что делать?
spasibo.
Узел 'SMTP' не найден. Проверьте введенное имя сервера. Учетная запись: 'POP3', Сервер: 'SMTP', Протокол: SMTP, Порт: 25, Защита (SSL): Нет, Ошибка сокета: 11001, Код ошибки: 0x800CCC0D
Но по-англицки...
Узел 'SMTP' не найден. Проверьте введенное имя сервера. Учетная запись: 'POP3', Сервер: 'SMTP', Протокол: SMTP, Порт: 25, Защита (SSL): Нет, Ошибка сокета: 11001, Код ошибки: 0x800CCC0D
c>EHLO
s<команды среди которых строка AUTH LOGIN
c>AUTH LOGIN
s<334 bG9naW46 (это строчка Base64-Login:)
c> имя пользователя в BASE 64
s> cGFzd29yZDo= (это строчка Base64-pasword:)
c> c> пароль пользователя в BASE 64
s> 250 типо авторизация успешно пройдена...
если кто знает как проходить авторизацию через команду AUTH PLAIN LOGIN то пишите сдесь или черкните на мыло denishome123NOSPAM@mail.ru слово NOSPAM удалите
Допустим, я послал команду AUTH PLAIN...
Мне на неё пришёл набор символов.
Ну и как на него ответить?..
1 Команда EHLO.
По этой команде сервер, поддерживающий расширенный SMTP (ESMTP) выдает различную информацию, в т.ч. и о способах аутентификации. Напр:
C: EHLO <clientname>
S: 250-<servername>
S: 250-SIZE <maxsize>
S: 250-8BITMIME
S: 250-AUTH=PLAIN LOGIN
S: 250 HELP
Как видно, в ответ на EHLO сервер выдает набор строк, которые начинаются с 250- (последняя строка будет без дефиса). Здесь сервер предписывает использовать аутентификацию типа PLAIN LOGIN, используя кодировку 8BITMIME. Часто вместо AUTH=<тип> передается строка AUTH <список поддерживаемых типов>. Напр AUTH LOGIN CRAM-MD5
В этом случае клиент может выбрать тип аутентификации сам
telnet www.server.ru 25
КАК???