Опис протоколу smtp

Основне завдання протоколу SMTP (Simple Mail Transfer Protocol) полягає в тому, щоб забезпечувати передачу електронних повідомлень (пошту). Для роботи через протокол SMTP клієнт створює TCP з'єднання з сервером через порт 25. Потім клієнт і SMTP сервер обмінюються інформацією поки з'єднання не буде закрито або перервано. Основною процедурою в SMTP є передача пошти (Mail Procedure). Далі йдуть процедури форвардинга пошти (Mail Forwarding), перевірка імен поштової скриньки і висновок списків поштових груп. Найпершою процедурою є відкриття каналу передачі, а останній - його закриття.

Команди SMTP вказують серверу, яку операцію хоче зробити клієнт. Команди складаються з ключових слів, за якими слід один чи кілька критеріїв. Ключове слово состот з 4-х символів та розділене від аргументу одним або декількома пропусками. Кожна командний рядок закінчується символами CRLF. Ось синтаксис всіх команд протоколу SMTP (SP - пробіл):

Звичайний відповідь SMTP сервера складається з номера відповіді, за яким через пробіл слід додатковий текст. Номер відповіді служить індикатором стану сервера.

Відправка пошти

При відправці пошти передаємо деякі потрібні дані (відправник, отримувач і сам лист):

передачу листа необхідно завершити символами CRLF.CRLF

між заголовком листи і його текстом не одна пара CRLF, а дві.

закінчуємо передачу символами CRLF.CRLF

Тепер завершуємо роботу, відправляємо команду QUIT:

> Інші команди

каму там на ВІНАП нада ..
дам струму шматок коду
дані
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

КОД
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 годі й юзати, це так для налагодження.
ну з либой сокетов розберетеся
якщо че мильте [email protected]

Можу дещо додати про аутентифікацію
1 Команда EHLO.
За цією командою сервер, що підтримує розширений SMTP (ESMTP) видає різну інформацію, в т.ч. і про способи аутентифікації. напр:
C: EHLO
S: 250-
S: 250-SIZE
S: 250-8BITMIME
S: 250-AUTH = PLAIN LOGIN
S: 250 HELP
Як видно, у відповідь на EHLO сервер видає набір рядків, які починаються з 250 (останній рядок буде без дефіса). Тут сервер наказує використовувати аутентифікацію типу PLAIN LOGIN, використовуючи кодування 8BITMIME. Часто замість AUTH =<тип> передається рядок AUTH <список поддерживаемых типов>. Напр AUTH LOGIN CRAM-MD5
У цьому випадку клієнт може вибрати тип аутентифікації сам