Що таке 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). Відповідні розширення можуть бути використані клієнтом при роботі. Необхідно пам'ятати, що якщо сесія починається з команди HELORFC 821 (використовуваної в «класичному» SMTP), то список розширень виводитися не буде.

Безпека SMTP

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

Приклад SMTP сесії

C: – клієнт, S: – сервер

S: (очікує з'єднання)
C: (Підключається до порту 25 сервера)
S: 220 mail.company.tld ESMTP CommuniGate Pro 5.1.4i is glad to see you!
C: HELO
S: 250 domain name should be qualified
C: MAIL FROM:
S: 250 someusername@somecompany.ru sender accepted
C: RCPT TO:
S: 250 user1@company.tld ok
C: RCPT TO:
S: 550 user2@company.tld unknown user account
C: DATA
S: 354 Enter mail, end with "." on a line by itself
C: from: someusername@somecompany.ru / / щоб лист
C: to: user1@company.tld / / не було додано
C: subject: tema / / в категорію спам
C: Hi!
C:.
S: 250 769947 message accepted for delivery
C: QUIT
S: 221 mail.company.tld CommuniGate Pro SMTP closing connection
S: (закриває з'єднання)

В результаті такої сесії лист буде доставлено адресату user1@company.tld, але не буде доставлено адресату user2@company.tld, тому що такої адреси не існує.

Розширення ESMTP

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

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

ehlo office.company1.tld
250-mail.company2.tld is pleased to meet you
250-DSN
250-SIZE
250-STARTTLS
250-AUTH LOGIN PLAIN CRAM-MD5 DIGEST-MD5 GSSAPI MSN NTLM
250-ETRN
250-TURN
250-ATRN
250-NO-SOLICITING
250-HELP
250-PIPELINING
250 EHLO

Джерело:

  • Вікіпедія – матеріали про SMPT.

Додатково:

  • codenet.ru – опис протоколу SMTP;
  • RFC-1870 – специфікація протоколу SMTP;
  • opds.sut.ru – опис команд SMTP і ESMTP.

Category: Інтернет

Comments (Прокоментуй!)

There are no comments yet. Why not be the first to speak your mind.

Leave a Reply