2444 subscribers

Как работает электронная почта: про SMTP, POP3 и IMAP

<100 full reads
177 story viewsUnique page visitors
<100 read the story to the endThat's 55% of the total page views
3 minutes — average reading time

Приходишь ты такой в офис, уже налил чашечку кофе, поболтал у кулера, садишься за рабочее место и начинаешь писать: “уважаемые коллеги, бла бла бла”, и тут, после того, как все коллеги уважены в твоем обращении, ты вдруг задумываешься - а как это работает? Почему моя почта доходит до уважаемых коллег? Очень просто - сейчас расскажем как.

Для начала разделим работу электронной почты на две части - отправка и получение.

Отправка

Начнём с отправки. Как только ты дописал своё письмо и нажал на кнопку “Отправить”, твой почтовый клиент (Outlook, Thunderbird, Gmail или Yandex Mail) отправит его на сервер по протоколу SMTP - Simple Mail Transfer Protocol, что переводится как простой протокол передачи почты. И тут начинаются первые проблемы. Дело в том, что этот протокол действительно “простой”. Он увидел свет аж в 1982 году, а как ты помнишь, тогда на безопасность было вообще пофиг, поэтому все письма отправлялись в открытом виде, пользователи никак не аутентифицировались, а хакеры успешно применяли его для рассылки спама.

Почтовые клиенты
Почтовые клиенты

Поэтому, в 2008 году ему решили добавить фич в виде поддержки шифрования, авторизации, 8-битных наборов символов и ещё много всего полезного и назвали это все ESMTP, где Е означает extended, то есть расширенный. Но даже после этого протокол называют просто - SMTP.

Короче, SMTP работает по клиент серверной модели. Он передает на почтовый сервер команды и получает от него ответы с результатами их обработки.

Ответы от сервера - это кодовые значения, которые делятся на 5 типов. Те у которых код 200, означают что всё ок, а те что с кодом 500 - не ок.

Ничего не напоминает? Да, очень похоже на HTTP

При стандартной отправке письма происходит следующее:

  • Твой клиент подключается к серверу
  • Сервер выдаёт ему список доступных команд
  • Твой клиент отправляет команды, которые содержат адрес отправителя, получателя и собственно само сообщение
  • Сервер помещает твоё сообщение в очередь на отправку и если всё ок - отправляет его.
  • А в случае если ты сын маминой подруги и позаботился о безопасности, клиент также пройдёт процедуру аутентификации и шифрования, прежде чем отправить письмо.

Кстати, ты можешь указать в адресе отправителя что угодно и тебе за это ничего не будет. Дело в том, что в SMTP нет встроенных проверок подлинности отправителя, для этого используются внешние механизмы. Самый простой - это сопоставление домена и IP-адреса отправителя через DNS-запрос. Так что если ты решишь прикинуться Илоном Маском и написать кому нибудь письмо с просьбой отсыпать немножко биткоинов, то скорее всего оно попадёт в спам.

SMTP используется не только для отправки писем от клиента к серверу, но и для передачи твоего письма между почтовыми серверами.

Допустим, если ты напишешь Илону, то сначала твоё письмо попадёт на твой локальный сервер, который скорее всего не находится в домене spacex.com, поэтому твой сервер будет по тому же DNS искать в Интернетах почтовый сервер, отвечающий за маршрутизацию электронной почты домена Space X. Это кстати называется MX-запись. Когда эта информация будет найдена, то сервер пульнёт туда твоё письмо по протоколу SMTP.

Для работы SMTP был зарезервирован TCP порт 25, но есть ещё 2 порта - это 465 и 587, оба они предназначены для связи клиента с сервером по защищенным механизмам, а 25 предназначался только для связи между собой почтовых серверов.

Отлично, теперь твоё письмо, пройдя все системы антиспама и проверки лежит на почтовом сервере получателя и дожидается когда же его прочитают, а мы переходим ко второму действию - получение.

Получение

Тут возможны 2 варианта. Либо твой клиент будет получать почту по протоколу IMAP - Internet Message Access Protocol, либо по протоколу с не очень приличным названием POP3 - Post Office Protocol 3.

Для POP3 почтовый сервак выступает в роли временного хранилища писем. Клиент, настроенный на работу с POP3, будет периодически обращаться на сервак и спрашивать: - “Есть чё по письмам?”, Сервер ответит ему: - “Ага есть”, тогда клиент ответит: - “Зашибись, а ну гони всё сюда и удали все копии, чтоб письма были только у меня”

Именно так, в случае POP3 клиент будет хранить все письма только у себя, но в этом есть плюс - даже если у тебя пропадёт Интернет, ты всё равно сможешь получить доступ к своим письмам. Надо сказать, что с помощью самого клиента (но не POP3), можно попросить сервер всё таки хранить копии писем.

А вот тебе ещё несколько неприятных фактов про POP3:

  • Он работает только на одном клиенте, то есть если ты открыл клиент с POP3 на компе, то с мобильного телефона уже не сможешь посмотреть свою почту.
  • А ещё нельзя разнести письма по папкам, настроить фильтры, пометить важность и т.д.

А? Ну как тебе, удобно? Ладно, давай посмотрим какие ещё есть варианты.

Ты можешь настроить свой клиент на работу с протоколом IMAP, тогда всем движем будет управлять почтовый сервак. В этом случае, твой почтовый клиент будет нужен только как интерфейс для работы с почтой. Зато ты сможешь получить доступ к своему почтовому ящику откуда угодно и с чего угодно. Сидишь за рабочим местом - читаешь почту с компа, отошёл в уборную - с мобилки, можно использовать веб-клиент и заходить через Интернет.

IMAP vs POP3
IMAP vs POP3

Ах да, приятным бонусом будет то, что с помощью IMAP ты можешь настроить под себя папки, помечать письма как важные, запрашивать статус о прочтении письма, выполнять сложные поиски по письмам и многое другое.

Но в этом есть и недостатки. Из-за того, что с IMAP всё слишком сложно, обработка писем серваком происходит гораздо дольше и “вообще то место на нём не резиновое”. Если постоянно хранить все письма без ротации, то рано или поздно почтовый ящик забьётся.