Пришелец-прораб
Покинул форум
Сообщений всего: 219
Дата рег-ции: Июль 2004
Карма 16
|
Hi All,
Интересующимся тем, как работает сервер для отправки почты (SMTP) рекомендую прочесть этот текст, остальным будет скучно.
Буду краток. Для отправки почты используется протокол SMTP (simple mail transfer protocol), который описывается в таких документах, как RFC 821, RFC 1869 и т.д. RFC - это request for comments, так обозначаются сетевые стандарты. Кому интересно, наберите RFC в Яндексе или Гугле, остальные читают дальше.
Для того, чтобы отправить письмо, нужно соединиться с сервером. Для этого используется протокол TCP, номера портов 25 и 993 (порт - это, грубо говоря, некий сервис или служба, и все сервисы пронумерованы). Порт 25 используется, когда работаем без шифрования, 993-й порт нужен, когда применяется шифрование SSL.
После того, как соединились с сервером, нужно отдавать ему команды в виде простого текста, и он будет их выполнять. Есть специальная команда (см. ниже), после которой сервер будет ждать, что больше команд не будет, пойдет текст письма. И наоборот, дождавшись конца текста письма, сервер вновь начнет ждать команды. Прикрепленный файл – это тоже текст, только специальным образом закодированный и поэтому нечитаемый.
С каким сервером можно соединиться? Обычно с сервером вашего провайдера. Обычно почтовые сервера не разрешают соединяться клиентам не из своей сети. Однако в принципе это возможно, если серверу сообщить имя и пароль. Для ясности предположим, что сервер находится в той же сети ,что и пользователь, и ввода пароля не требуется.
Итак, работа с почтовым сервером (с последующим разоблачением). Возьмем программу telnet. Она есть на любом компьютере с установленной Windows (Или не на любом? Поиск телнета на своем компе предлагаю считать самостоятельным упражнением). Телнетом управлять очень просто – надо в командной строке ему указать адрес или имя сервера и номер порта, в данном случае – 25. Далее я буду жирным шрифтом давать команду, а за ней – ответ сервера (то и другое с комментариями, они даны обычным шрифтом). Предупреждение: telnet – не редактор, и изменить однажды набранное нельзя, при ошибке следует жать Enter и набирать снова. Все команды надо набирать точно, как они приведены здесь, иначе будут ошибки.
C:\>telnet smtp.myserver.ru 25 Соединяемся с сервером
220 smtp.myserver.ru ESMTP CommuniGate Pro 4.1.5 is glad to see you Это ответ - приглашение к работе. Вообще если ответ сервера начинается с двойки или тройки, все хорошо, а если с пятерки – наоборот, произошла ошибка.
helo vasya Представимся. Обычно нужно имя домена, которое обычно с успехом заменяется именем компьютера (Vasya). Можно попробовать подсунуть серверу его собственный домен myserver.ru.
250 smtp.myserver.ru domain name should be qualified vasya Сервер принимает имя домена. На самом деле сервер не может отказаться передать письмо, если даже домен неправильный. Однако, он может добавить в письмо информацию, что домен какой-то странный. В любом случае, в письмо попадает IP адрес клиента, по которому можно попытаться его вычислить. Обратный адрес отправителя может быть любым, см. ниже.
mail from: vasya@myserver.ru Заполняем поле From (обратный адрес отправителя). Можно писать, что угодно, однако домен (все, что после значка «@») должен совпадать с доменом сервера, т.е. входить в его зону ответственности, иначе сервер решит, что пришел спамер. Серверы, которыми пользуются спамеры, позволяют вместо имени писать, что угодно. Двоеточие после команды MAIL FROM: обязательно.
250 vasya@myserver.ru sender accepted Сервер принимает имя отправителя. Текстовый ответ может быть произвольным, главное, что он начинается на двойку.
rcpt to: masha@myserver.ru Отправляем другому юзеру. Можно самому себе. Двоеточие после команды обязательно.
250 vasya @myserver.ru will forward Сервер принимает имя получателя. Опять же, текстовый ответ может быть произвольным, главное, что он начинается на двойку.
data Теперь говорим серверу, что хотим набрать само письмо. DATA - это команда, сообщаюцая серверу, что далее пойдет текст.
354 Enter mail, end with "." on a line by itself Сервер сообщает, что готов получить письмо. Вводите текст, когда закончите – на новой строке поставьте точку и нажмите Enter. Единственная точка на строке говорит серверу, что ввод закончен, и можно отправлять письмо. Набираем текст:
Masha! I love you!
Vasya
.
250 6338807 message accepted for delivery Сервер сообщает, что письмо отправлено.
quit Прощаемся
221 smtp.myserver.ru CommuniGate Pro SMTP closing connection Сервер сообщает, что разрывает соединение.
Connection to host lost. Телнет сообщает, что соединение с сервером потеряно, и заканчивает работу.
Вот так это работает. В результате адресату приходит простейшее письмо - без указания темы, отправителя и проч.
Если нужно добавить, например, тему письма, то нужно добавлять прямо в текст письма дополнительные строки, например:
data
Subject: For Masha
Masha! I love you!
Vasya
.
В результате Маша получит письмо следующего содержания:
CODE:
Subject: For Masha
Masha! I love you!
Vasya
Вот таким образом оно и работает. |