Консультация № 159627
04.02.2009, 19:34
0.00 руб.
0 2 2
Доброго времени суток!
Преамбула:
1. частью некоего приложения является служба отправки почтовых сообщений. Эта необходимость диктуется требованием не использовать сторонние программы.
2. сервер SMTP требует авторизации.

Амбула:
в какой момент передавать серверу имя/пароль?

Примечания:
1. в принципе желателен сценарий взаимодействия клиент/сервер.
2. если будет конкретная реализация вопроса, то я с удовольствием увижу ее, не только на дельфях.

Обсуждение

Неизвестный
05.02.2009, 01:20
общий
это ответ
Здравствуйте, Karlson!

Схема работы для SMTP (каждая строка должна завершаться CRLF):
1. Посылаем "EHLO"
1а. Ждем ответ
2. Посылаем "AUTH LOGIN"
3. Посылаем Base64Encoded(Login)
4. Посылаем Base64Encoded(Pass)
4а. Ждем ответ
5. Далее формируем заголовок и тело сообщения как положено в RFC (номера не помню правда, но найти в Инете не сложно)
...
Неизвестный
05.02.2009, 08:41
общий
это ответ
Здравствуйте, Karlson!
Отправка почты
Стандартный порт smtp-сервера: 25.

будем использовать программу Telnet.

Программа Telnet входит в поставку всех операционных систем которые поддерживают tcp/ip.
Для пользователей Windows: Start(Пуск)->Run(Выполнить).
В окошке набираем: telnet smtp.mail.ru 25
Должна запуститься программа и сразу подсоединиться к серверу. Об удачном подключении будет свидетельствовать сообщение от сервера (что-нибудь в таком роде):

220 mx7.port.ru ESMTP MAIL.RU Mon, 2 Apr 2001 03:56:38 +0400

Это сообщение говорит нам что сервер готов к работе. Теперь можно вводить команды.
Для начала можно ввести команду HELP. На эту команду сервер ответит:

214-Commands supported:
214- HELO EHLO MAIL RCPT DATA
214 NOOP QUIT RSET HELP

это список команд, которые поддерживает сервер.
пример отправки сообщения.

Для начала нужно представиться серверу, набираем команду HELO [domain]. Domain - это имя домена, но для нас это непринципиально, вместо domain пишем все что угодно:

HELO 12345

ответ сервера:

250 mx7.port.ru Hello dialup16-45.iptelecom.net.ua [212.9.229.237]

сервер показал нам наше имя хоста и ip-адрес (dialup16-45.iptelecom.net.ua [212.9.229.237]). Эта информация потом будет добавлена в заголовок письма и получатель письма если его заинтересует дополнительная информация может запросто увидеть ее, заглянув в свойства письма. Следующая команда - MAIL, эта команда обязательна, используем ее для указания адреса отправителя. Синтаксис:

MAIL FROM: siraxxx@mail.ru

ответ сервера:

250 <siraxxx@mail.ru> is syntactically correct

Обратный адрес (адрес отправителя) можно придумать и указать любой.
Тепрь необходимо указать адрес получателя сообщения:

RCPT TO: siraxxx@mail.ru

ответ сервера:

250 <siraxxx@mail.ru> verified

здесь указан свой собственный адрес, т.е. письмо, прийдет отправителю. Я вам рекомендую сделать также, тогда вы будете уверены, что все сделали правильно - после того, как получите свое собственное сообщение.

И последняя основная команда:

DATA

ответ сервера:

354 Enter message, ending with "." on a line by itself

Это вход в режим набора письма. Здесь нельзя вводить команды smtp. чтобы закончить ввод и выйти обратно в командный режим, нужно нажать [Enter] (перейти на новую строку), набрать символ [.] (просто ввести точку без скобок) и опять нажать [Enter]. Проще говоря, конец письма - это ввод точки с новой строки.

А теперь о теле письма.
Можно конечно сразу после входа в режим набора сообщения, начинать набирать текст. Но такое сообщение будет даже без поля Subject (то есть без темы). Хотя знать стоит только об одном поле: [reply-to].
После того как вы набрали команду DATA, для начала укажите поле reply-to:

reply-to: dr_stark@chat.ru

Зачем это поле?
это поле не команда smtp, а просто сообщение для почтового клиента (вспомогательная информация, типа того же subject). Многие почтовые клиенты показывают в пришедшем письме только адрес отправителя указанный командой [mail from] а адрес указанный в поле [reply-to] не показывает. Но если ответить на такое сообщение (например: нажать кнопку ответить) ответ пойдет по адресу указанному в поле [reply-to]

Дополнительная информация.
Если вы хотите, чтобы в отправленных вами письмах присутствовала "тема", то после ввода поля [reply-to], введите поле [subject].

subject: subj of message

после этого можете приступать к набору сообщения. Когда закончите - вводите точку с новой строки, и вы вернетесь в командный режим. Там вам сервер сообщит, что ваше сообщение принято:

250 OK id=11oivl-0000hm-00

Теперь можно ввести еще сообщения или отключиться, набрав команду QUIT.

Итого: как все это выглядит на экране Telnet-а:

220 mx7.port.ru ESMTP MAIL.RU Mon, 2 Apr 2001 03:56:38 +0400
HELP
214-Commands supported:
214- HELO EHLO MAIL RCPT DATA
214 NOOP QUIT RSET HELP
HELO 12345
250 mx7.port.ru Hello dialup16-45.iptelecom.net.ua [212.9.229.237]
MAIL FROM: siraxxx@mail.ru
250 is syntactically correct
RCPT TO: siraxxx@mail.ru
250 verified
DATA
354 Enter message, ending with "." on a line by itself
reply-to: dr_stark@chat.ru
subject: subj of message
this message content line1
content line2
.
250 OK id=14oivl-0000hm-00
QUIT
221 mx7.port.ru closing connection

все ответы сервера начинаются с какого-то числа. Это "коды ответов" сервера. Только эти цифры являются обязательными ответами, текст, который идет после них, предназначен для упрощения понимания, и на разных серверах этот текст может быть разным, а на некоторых, возможно, вообще могут быть цифры без текста.
Форма ответа