Описание протокола 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 ничего не делает и никак не влияет на указанные до этого данные.
Оставить комментарий
Оставлять комментарии могут только зарегистрированные пользователи.
Если вы не являетесь зарегистрированным пользователем, то вам необходимо зарегистрироваться. Регистрация бесплатна. Если вы уже зарегистрированы на CodeNet, то вам необходимо ввести логин и пароль в верхней (Alt-U) части страницы.
Комментарии
1. NevaDA / 14 июня 2011, 21:46:49+0 / -1

На тему апи, это вряд ли реально.

Сначала надо написать кодер-декодер Base64 для авторизации на большинстве серверов
Почитайте на википедии
2. Максим САМОЙЛОВ / 18 сентября 2009, 00:11:03+0 / -1

КОМЕНТАРИЙ НЕТ -ТА ЖЕ ПРОБЛЕМА ЧТО И У ОСТАЛЬНЫХ. НЕ МОГУ ПЕРЕДАТЬ СНИМКИ С КОМПА НА КОМП. узел SMTR-е найден и т.д.как и у остальных. в чем дело? почему у всех все одинаково? что-то с системой повидимому-или инструкции не то говорят что нужно делать. делаю все так как написано в книге -виндовс для чайников- но все бестолку. не могу ничего передать.langer@mail.ru


3. пакахондас / 06 мая 2007, 05:30:32+0 / -1

Для прохождения авторизации набирайте не HELO ,а EHLO: 

потом AUTH LOGIN ;
4. Zanna / 28 апреля 2006, 19:50:23+1 / -0

У меня такие же проблему как у Антона

5. Григорий / 18 апреля 2006, 21:28:00+1 / -1

Узел 'SMTP' не найден. Проверьте введенное имя сервера. Учетная запись: 'IMAR', Сервер: 'SMTP', Протокол: SMTP, Порт: 25, Защита (SSL): Нет, Ошибка сокета: 11001, Код ошибки: 0x800CCC0D


6. ольга / 16 апреля 2006, 17:41:47+9 / -2

Узел "SMTP" не найден.Проверьте введенное имя сервера. Учетная запись: "POP3",Сервер:"SVNP". Протокол; SMTP, ПОРТ:25, Защита(SSL):Нет. Ошибка сокета 11001, код ошибки:Oх800СССОD


7. Любитель / 20 марта 2006, 13:41:39+5 / -1

теперь smtp.mail.ru требует авторизации


8. Ламердед / 21 января 2006, 14:22:59+0 / -1

aa, чтобы файл отправлять - он кодируеться в базу64 и такжепередаеться....


9. Ламердед / 21 января 2006, 14:21:23+0 / -1

каму там на винапи нада..

дам тока кусок кода
данные
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
10. Тимур / 29 декабря 2005, 14:05:29

Интересно было бы посмотреть на примере исходника (желательно на WinAPI), как отправлять прикрепленный файл. А то в данной статье нету ни одного слова про это.


11. ЮЛЯ / 25 декабря 2005, 04:08:23

Узел "SMTP" не найден.Проверьте введенное имя сервера. Учетная запись: "POP3",Сервер:"SVNP". Протокол; SMTP, ПОРТ:25, Защита(SSL):Нет. Ошибка сокета 11001, код ошибки:Oх800СССОD


12. юля / 25 декабря 2005, 03:49:38+1 / -0

Возникла такая же проблема, как у Марины 05.06.2005г.

Вы бы подсказали, что делать?
13. pablo / 23 ноября 2005, 01:59:24+2 / -0

zdrastuvyte, ia jochu razobratsa s SMTP , tochno uznat chto eto y zachem eto........y s chem ego iediat.....

spasibo.
14. антон / 17 ноября 2005, 21:47:58+0 / -1

Узел 'SMTP' не найден. Проверьте введенное имя сервера. Учетная запись: 'студент', Сервер: 'SMTP', Протокол: SMTP, Порт: 25, Защита (SSL): Нет, Ошибка сокета: 11001, Код ошибки: 0x800CCC0D


15. C / 15 сентября 2005, 19:35:52+2 / -0

Высвечивается ошибка:

Узел 'SMTP' не найден. Проверьте введенное имя сервера. Учетная запись: 'POP3', Сервер: 'SMTP', Протокол: SMTP, Порт: 25, Защита (SSL): Нет, Ошибка сокета: 11001, Код ошибки: 0x800CCC0D
16. Marina / 05 июня 2005, 01:07:23+3 / -0

Возникли проблемы при отсылке сообщений на форум через SMTP. Система работает больше года и вдруг перестали отсылаться сообщения. Где искать проблему? Может быть есть ограничение на длину списка получателей? Сообщение посылается всем зарегистрированным пользователям форума, а их больше 100.Спасибо.


17. rufn / 16 мая 2005, 19:33:44+2 / -0

Подробнее и с аутентификацией http://www.faqs.org/rfcs/rfc821.html

Но по-англицки...
18. Mario / 19 апреля 2005, 17:00:20

Высвечивается ошибка:

Узел 'SMTP' не найден. Проверьте введенное имя сервера. Учетная запись: 'POP3', Сервер: 'SMTP', Протокол: SMTP, Порт: 25, Защита (SSL): Нет, Ошибка сокета: 11001, Код ошибки: 0x800CCC0D
19. Денис / 01 апреля 2005, 07:40:07+0 / -1

Авторизация на smtp.yandex.ru проходит так:

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 удалите
20. --==SS==-- / 23 декабря 2004, 17:39:05+1 / -0

Гм, касаемо аутентификации...

Допустим, я послал команду AUTH PLAIN...
Мне на неё пришёл набор символов.
Ну и как на него ответить?..
21. way3 / 09 декабря 2004, 18:53:22

Могу кое-что добавить про аутентификацию

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
В этом случае клиент может выбрать тип аутентификации сам
22. Алексей / 26 ноября 2004, 15:51:54

Только не HELLO, а HELO


23. mike / 05 ноября 2004, 00:39:14

Ну например Пуск -> Выполнить:

telnet www.server.ru 25
24. чайник / 04 ноября 2004, 20:23:53

"Первым делом подключаемся к SMTP серверу через порт 25."............

КАК???
25. Detonator / 28 июля 2004, 18:47:19+1 / -0

Полезная инфа. Жаль нет про аутентификацию.



