Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР_7_Электронная_почта_ПОСЛЕДНИЙ_вариант.doc
Скачиваний:
2
Добавлен:
09.11.2019
Размер:
269.82 Кб
Скачать

4.3 Протокол smtp

SMTP (англ. Simple Mail Transfer Protocol - простий протокол передачі пошти) - це мережевий протокол, призначений для передачі електронної пошти в мережах TCP / IP.

ESMTP (англ. Extended SMTP) - масштабоване розширення протоколу SMTP. В даний час під "протоколом SMTP», як правило, мають на увазі ESMTP і його розширення.

SMTP використовується для відправки пошти від користувачів до серверів і між серверами для подальшої пересилки до одержувача. Для прийому пошти поштовий клієнт повинен використовувати протоколи POP3 або IMAP.

Щоб доставити повідомлення до адресата, необхідно переслати його поштовому серверу домену, в якому знаходиться адресат. Для цього використовується запис типу MX (англ. Mail eXchange - обмін поштою) системи DNS. Якщо MX запис відсутній, то для тієї ж мети може бути використаний запис типу A. Деякі сучасні реалізації SMTP-серверів (наприклад, Exim [1]) для визначення сервера, що обслуговує пошту в домені адресата, також можуть задіяти SRV-запис (RFC 2782).

Широке поширення SMTP отримав на початку 1980-х років. До нього використовувався протокол UUCP, який вимагав від відправника знання повного маршруту до одержувача і явної вказівки цього маршруту в адресі одержувача, або наявності прямого комутованого або постійного з'єднання між комп'ютерами відправника і одержувача.

Sendmail був одним з перших (якщо не першим) агентом відправки повідомлень, який почав працювати з SMTP. На сьогодні протокол SMTP є стандартним для електронної пошти і його використовують всі клієнти і сервери.

Протокол був розроблений для передачі тільки тексту в кодуванні ASCII, крім того, перші специфікації вимагали обнулення старшого біта кожного переданого байта. Це не дає можливості відсилати текст на національних мовах (наприклад, кирилиці), а також відправляти двійкові файли (наприклад, зображення, відеофайли, програми або архіви). Для зняття цього обмеження був розроблений стандарт MIME, який описує спосіб перетворення двійкових файлів у текстові. Зараз більшість серверів підтримують 8BITMIME, що дозволяє відправляти двійкові файли так само просто, як і текст.

Сервер SMTP - це кінцевий автомат з внутрішнім станом. Клієнт передає на сервер рядок команда <пробіл> параметри <переклад рядка>. Сервер відповідає на кожну команду рядком, що містить код відповіді і текстове повідомлення, відокремлене пропуском. Код відповіді – число від 100 до 999, представлене у вигляді рядка, який трактується таким чином:

  2ХХ - команда успішно виконана

  3XX - очікуються додаткові дані від клієнта

  4хх - тимчасова помилка, клієнт повинен зробити наступну спробу через деякий час

  5хх - невиправна помилка

Текстова частина відповіді носить довідковий характер і призначений для людини, а не програми.

ESMTP - розширюваний протокол, на відміну від SMTP. При встановленні з'єднання сервер оголошує про набір підтримуваних розширень (як відповідь на команду EHLO). Відповідні розширення можуть бути використані клієнтом при роботі. Необхідно пам'ятати, що якщо сесія починається з команди HELO (яка використовується в «класичному» SMTP, RFC 821), то перелік розширень виводитися не буде.

Безпека SMTP і спам

Спочатку SMTP не підтримував єдиної схеми авторизації. У результаті цього спам став практично нерозв'язною проблемою, так як було неможливо визначити, хто насправді є відправником повідомлення - фактично можна відправити лист від імені будь-якої людини. В даний час проводяться спроби вирішити цю проблему за допомогою специфікацій SPF, Sender ID, Yahoo Domain Keys. Єдиної специфікації на сьогодні не існує.

Команди SMTP

HELO <SP> <string><CRLF> — ідентифікує SMTP-сервер відправника, відкриває сеанс

QUIT<CRLF> — Завершує SMTP-сеанс

MAIL <SP> FROM:<reverse-path> <CRLF> — Задає адреса відправника. Адресу слід вказувати в кутових дужках. Деякі сервери можуть проігнорувати те, що їм передають адресу без кутових дужок, але ті сервери, що неухильно слідують опису RFC, відхилять таку адресу.

RCPT <SP> TO:<forward-path> <CRLF> — Визначає адресу одержувача. Адресу слід вказувати в кутових дужках. Деякі сервери можуть проігнорувати те, що їм передають адреса без кутових дужок, але ті сервери, що неухильно слідують опису RFC, відхилять таку адресу.

DATA <CRLF> — Вказує на початок повідомлення. Для закінчення повідомлення вказується <CRLF>.<CRLF>

VRFY <SP> <string><CRLF> — перевіряє існування одержувача.

EXPN <SP> <string><CRLF> — показує список адрес для списку розсилки.

NOOP<CRLF> — пуста операція

TURN<CRLF> — сервер і клієнт міняються ролями після відповіді сервера 200 OK

RSET<CRLF> — скидання сесії в початковий стан

HELP<CRLF> — інформація про підтримувані командах. Деякі сервера підтримують довідку за окремим командам, наприклад, HELP MAIL (sendmail), деякі виводять по цій команді лише список доступних команд без їх пояснення (Microsoft Exchange Server)

Через проблеми зі спамом, майже всі сучасні сервера ігнорують команди VRFY і EXPN, як розкривають інформацію про користувача.

Розширення ESMTP

RFC 1869 наказує починати сесію не командою HELO, а командою EHLO. У випадку, якщо сервер не підтримує розширень, то він відповість на EHLO помилкою, в цьому випадку клієнт повинен послати команду HELO і не використовувати розширення протоколу.

Якщо ж сервер підтримує ESMTP, то крім привітання він повідомить список підтримуваних розширень протоколу SMTP.

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

HELO

MAIL FROM:

RCPT TO:

DATA

RSET

SEND FROM:

SOML FROM:

SAML FROM:

VRFY

EXPN

HELP

NOOP

QUIT

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

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

Насамперед підключаємося до SMTP серверу через порт 25. Тепер треба передати серверу команду HELLO і наш IP адреса:

C: HELLO 195.161.101.33

S: 250 smtp.mail.ru is ready

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

C: MAIL FROM: 'указуємо відправника

S: 250 OK

C: RCPT TO: 'указуємо одержувача

S: 250 OK

указуємо серверу, що передаватимемо зміст листа (заголовок і тіло листа)

C: DATA

S: 354 Start mail input; end with .

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

S: 250 OK

C: From: Drozd

C: To: Drol

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 нічого не робить і ніяк не впливає на вказаних до цього дані.