Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:
реклама
Заказать корпоратив в Horseka Resort https://horseka.ru/korporativ-v-podmoskove/.

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Описание протокола SMTP

Введение

Александр Бельбаков, HiProg.com "Технологии программирования"

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

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 

Комментарии

1.
99K
14 мая 2017 года
Николай Черней
0 / / 14.05.2017
+0 / -1
Мне нравитсяМне не нравится
14 мая 2017, 20:53:58
Eto na kakom izike eti komandi?
2.
85K
12 сентября 2012 года
Ferrari
0 / / 12.09.2012
+3 / -2
Мне нравитсяМне не нравится
12 сентября 2012, 23:31:35
У кого выдаёт - Узел 'SMTP' не найден, попробуйте через порт 587.
3.
73K
14 июня 2011 года
NevaDA
0 / / 14.06.2011
+1 / -4
Мне нравитсяМне не нравится
14 июня 2011, 21:46:49
На тему апи, это вряд ли реально.
Сначала надо написать кодер-декодер Base64 для авторизации на большинстве серверов
Почитайте на википедии
4.
53K
17 сентября 2009 года
Максим САМОЙЛОВ
0 / / 17.09.2009
+1 / -3
Мне нравитсяМне не нравится
18 сентября 2009, 00:11:03
КОМЕНТАРИЙ НЕТ -ТА ЖЕ ПРОБЛЕМА ЧТО И У ОСТАЛЬНЫХ. НЕ МОГУ ПЕРЕДАТЬ СНИМКИ С КОМПА НА КОМП. узел SMTR-е найден и т.д.как и у остальных. в чем дело? почему у всех все одинаково? что-то с системой повидимому-или инструкции не то говорят что нужно делать. делаю все так как написано в книге -виндовс для чайников- но все бестолку. не могу ничего передать.langer@mail.ru
5.
19K
24 января 2007 года
пакахондас
21 / / 24.01.2007
+2 / -3
Мне нравитсяМне не нравится
6 мая 2007, 05:30:32
Для прохождения авторизации набирайте не HELO ,а EHLO:
потом AUTH LOGIN ;
6.
Аноним
+2 / -2
Мне нравитсяМне не нравится
28 апреля 2006, 19:50:23
У меня такие же проблему как у Антона
7.
Аноним
+1 / -2
Мне нравитсяМне не нравится
18 апреля 2006, 21:28:00
Узел 'SMTP' не найден. Проверьте введенное имя сервера. Учетная запись: 'IMAR', Сервер: 'SMTP', Протокол: SMTP, Порт: 25, Защита (SSL): Нет, Ошибка сокета: 11001, Код ошибки: 0x800CCC0D
8.
Аноним
+11 / -2
Мне нравитсяМне не нравится
16 апреля 2006, 17:41:47
Узел "SMTP" не найден.Проверьте введенное имя сервера. Учетная запись: "POP3",Сервер:"SVNP". Протокол; SMTP, ПОРТ:25, Защита(SSL):Нет. Ошибка сокета 11001, код ошибки:Oх800СССОD
9.
Аноним
+5 / -1
Мне нравитсяМне не нравится
20 марта 2006, 13:41:39
теперь smtp.mail.ru требует авторизации
10.
Аноним
+0 / -1
Мне нравитсяМне не нравится
21 января 2006, 14:22:59
aa, чтобы файл отправлять - он кодируеться в базу64 и такжепередаеться....
11.
Аноним
+1 / -2
Мне нравитсяМне не нравится
21 января 2006, 14:21:23
каму там на винапи нада..
дам тока кусок кода
данные
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
12.
Аноним
Мне нравитсяМне не нравится
29 декабря 2005, 14:05:29
Интересно было бы посмотреть на примере исходника (желательно на WinAPI), как отправлять прикрепленный файл. А то в данной статье нету ни одного слова про это.
13.
Аноним
Мне нравитсяМне не нравится
25 декабря 2005, 04:08:23
Узел "SMTP" не найден.Проверьте введенное имя сервера. Учетная запись: "POP3",Сервер:"SVNP". Протокол; SMTP, ПОРТ:25, Защита(SSL):Нет. Ошибка сокета 11001, код ошибки:Oх800СССОD
14.
Аноним
+1 / -0
Мне нравитсяМне не нравится
25 декабря 2005, 03:49:38
Возникла такая же проблема, как у Марины 05.06.2005г.
Вы бы подсказали, что делать?
15.
Аноним
+2 / -1
Мне нравитсяМне не нравится
23 ноября 2005, 01:59:24
zdrastuvyte, ia jochu razobratsa s SMTP , tochno uznat chto eto y zachem eto........y s chem ego iediat.....


spasibo.
16.
Аноним
+0 / -1
Мне нравитсяМне не нравится
17 ноября 2005, 21:47:58
Узел 'SMTP' не найден. Проверьте введенное имя сервера. Учетная запись: 'студент', Сервер: 'SMTP', Протокол: SMTP, Порт: 25, Защита (SSL): Нет, Ошибка сокета: 11001, Код ошибки: 0x800CCC0D
17.
Аноним
+2 / -0
Мне нравитсяМне не нравится
15 сентября 2005, 19:35:52
Высвечивается ошибка:
Узел 'SMTP' не найден. Проверьте введенное имя сервера. Учетная запись: 'POP3', Сервер: 'SMTP', Протокол: SMTP, Порт: 25, Защита (SSL): Нет, Ошибка сокета: 11001, Код ошибки: 0x800CCC0D
18.
Аноним
+3 / -0
Мне нравитсяМне не нравится
5 июня 2005, 01:07:23
Возникли проблемы при отсылке сообщений на форум через SMTP. Система работает больше года и вдруг перестали отсылаться сообщения. Где искать проблему? Может быть есть ограничение на длину списка получателей? Сообщение посылается всем зарегистрированным пользователям форума, а их больше 100.Спасибо.
19.
Аноним
+2 / -0
Мне нравитсяМне не нравится
16 мая 2005, 19:33:44
Подробнее и с аутентификацией http://www.faqs.org/rfcs/rfc821.html
Но по-англицки...
20.
Аноним
Мне нравитсяМне не нравится
19 апреля 2005, 17:00:20
Высвечивается ошибка:
Узел 'SMTP' не найден. Проверьте введенное имя сервера. Учетная запись: 'POP3', Сервер: 'SMTP', Протокол: SMTP, Порт: 25, Защита (SSL): Нет, Ошибка сокета: 11001, Код ошибки: 0x800CCC0D
21.
Аноним
+0 / -1
Мне нравитсяМне не нравится
1 апреля 2005, 07:40:07
Авторизация на 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 удалите
22.
Аноним
+1 / -0
Мне нравитсяМне не нравится
23 декабря 2004, 17:39:05
Гм, касаемо аутентификации...
Допустим, я послал команду AUTH PLAIN...
Мне на неё пришёл набор символов.
Ну и как на него ответить?..
23.
Аноним
Мне нравитсяМне не нравится
9 декабря 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
В этом случае клиент может выбрать тип аутентификации сам
24.
Аноним
Мне нравитсяМне не нравится
26 ноября 2004, 15:51:54
Только не HELLO, а HELO
25.
Аноним
+1 / -0
Мне нравитсяМне не нравится
5 ноября 2004, 00:39:14
Ну например Пуск -> Выполнить:

telnet www.server.ru 25
26.
Аноним
+2 / -0
Мне нравитсяМне не нравится
4 ноября 2004, 20:23:53
"Первым делом подключаемся к SMTP серверу через порт 25."............

КАК???
27.
Аноним
+6 / -1
Мне нравитсяМне не нравится
28 июля 2004, 18:47:19
Полезная инфа. Жаль нет про аутентификацию.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог