Приходишь ты такой в офис, уже налил чашечку кофе, поболтал у кулера, садишься за рабочее место и начинаешь писать: “уважаемые коллеги, бла бла бла”, и тут, после того, как все коллеги уважены в твоем обращении, ты вдруг задумываешься - а как это работает? Почему моя почта доходит до уважаемых коллег? Очень просто - сейчас расскажем как.
Для начала разделим работу электронной почты на две части - отправка и получение.
Отправка
Начнём с отправки. Как только ты дописал своё письмо и нажал на кнопку “Отправить”, твой почтовый клиент (Outlook, Thunderbird, Gmail или Yandex Mail) отправит его на сервер по протоколу SMTP - Simple Mail Transfer Protocol, что переводится как простой протокол передачи почты. И тут начинаются первые проблемы. Дело в том, что этот протокол действительно “простой”. Он увидел свет аж в 1982 году, а как ты помнишь, тогда на безопасность было вообще пофиг, поэтому все письма отправлялись в открытом виде, пользователи никак не аутентифицировались, а хакеры успешно применяли его для рассылки спама.
Поэтому, в 2008 году ему решили добавить фич в виде поддержки шифрования, авторизации, 8-битных наборов символов и ещё много всего полезного и назвали это все ESMTP, где Е означает extended, то есть расширенный. Но даже после этого протокол называют просто - SMTP.
Короче, SMTP работает по клиент серверной модели. Он передает на почтовый сервер команды и получает от него ответы с результатами их обработки.
Ответы от сервера - это кодовые значения, которые делятся на 5 типов. Те у которых код 200
, означают что всё ок, а те что с кодом 500
- не ок.
При стандартной отправке письма происходит следующее:
- Твой клиент подключается к серверу
- Сервер выдаёт ему список доступных команд
- Твой клиент отправляет команды, которые содержат адрес отправителя, получателя и собственно само сообщение
- Сервер помещает твоё сообщение в очередь на отправку и если всё ок - отправляет его.
- А в случае если ты сын маминой подруги и позаботился о безопасности, клиент также пройдёт процедуру аутентификации и шифрования, прежде чем отправить письмо.
Кстати, ты можешь указать в адресе отправителя что угодно и тебе за это ничего не будет. Дело в том, что в 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 ты можешь настроить под себя папки, помечать письма как важные, запрашивать статус о прочтении письма, выполнять сложные поиски по письмам и многое другое.
Но в этом есть и недостатки. Из-за того, что с IMAP всё слишком сложно, обработка писем серваком происходит гораздо дольше и “вообще то место на нём не резиновое”. Если постоянно хранить все письма без ротации, то рано или поздно почтовый ящик забьётся.