Как работает электронная почта через почтовый протокол

Почтовый протокол (POP), используемый для получения почты с удаленного сервера, является очень простым протоколом. Он определяет основные функциональные возможности простым способом и прост в реализации. Конечно, это также легко понять.

Давайте выясним, что происходит за кулисами, когда ваше почтовое приложение получает почту в учетной записи POP. Во-первых, необходимо подключиться к серверу. Большая часть этого скрыта за кулисами в считанные секунды, и вы никогда этого не увидите. Вы просто входите в приложение и видите свою электронную почту.

Привет, это я

Обычно POP-сервер прослушивает порт 110 для входящих соединений. При подключении от POP-клиента (вашей почтовой программы) он, вероятно, ответит + OK, pop.philo.org готов или что-то подобное. + OK означает, что все в порядке. Его отрицательным эквивалентом является -ERR, что означает, что что-то пошло не так. Возможно, ваш почтовый клиент уже показал вам один из этих отрицательных ответов сервера.

Залогиниться

Теперь, когда сервер приветствовал нас, нам нужно войти в систему, используя наше имя пользователя (предположим, имя пользователя «взвод»; то, что говорит сервер, напечатано курсивом):

+ОК pop.philo.org готов
USER взвод

Так как пользователь с таким именем существует, POP-сервер отвечает + OK, и, возможно, какой-то бред, который нас не особо волнует. Если бы на сервере не было такого пользователя, это, конечно, заставило бы нас паниковать с неизвестным пользователем -ERR.

Для завершения аутентификации нам также нужно указать наш пароль. Это делается с помощью команды «pass»:

+ОК отправь свой пароль
пройти ноплато

Если мы введем пароль правильно, сервер ответит + OK, отличный пароль или все, что имел в виду программист POP-сервера. Важной частью снова является + OK. К сожалению, пароли также могут быть неправильными. Сервер отмечает это сухим именем пользователя -ERR, и пароль не совпадает (как если бы вы использовали свое имя пользователя в качестве пароля).

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

У вас новое сообщение!

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

Команда, используемая для получения этой основной статистики почтового ящика, является STAT.

Возможный ответ сервера: + OK 18 67042. В этом случае имеет значение, что следует за знаком + OK. Сразу после этого следует количество сообщений в почтовом ящике, затем, разделенных пробелами, указывается размер почтового ящика в октетах (октет 8 бит).

STAT
+ОК 18 67042

Если почты нет, сервер отвечает + OK 0 0. Поскольку на сервере 18 новых сообщений, мы можем перечислить их с помощью команды LIST. В ответ сервер перечисляет сообщения в следующем формате:

СПИСОК
+OK 18 сообщений (67042 октета)
1 2552
2 3297

18 3270
.

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

Команда LIST может принять номер сообщения в качестве необязательного аргумента, например, LIST 2. Ответ сервера на этот запрос будет + OK 2 3297, номер сообщения, за которым следует размер сообщения. Если вы попытаетесь перечислить несуществующее сообщение, например, СПИСОК 23, сервер не проявит воображения и скажет: -ERR нет такого сообщения.

Большое извлечение (и удаление)

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

Теперь, узнав, есть ли у нас новая почта, приходит реальная вещь. Сообщения извлекаются одно за другим с номером сообщения в качестве аргумента команды RETR.

Сервер отвечает + OK и сообщением, как оно есть, в несколько строк. Сообщение заканчивается точкой на строке само по себе. Например:

RETR 1
+ОК 2552 октета
Мля!
.

Если мы пытаемся получить сообщение, которое не существует, мы получаем -ERR нет такого сообщения.

Теперь мы можем удалить сообщение с помощью команды DELE. (Конечно, мы можем также удалить сообщение, не получив его, если это один из тех дней).

Хорошо знать, что сервер не удалит сообщение немедленно. Это просто отмечено для удаления. Фактическое удаление происходит только в том случае, если мы регулярно завершаем соединение с сервером. Так что никакая почта никогда не будет потеряна, например, если соединение внезапно прекратится.

Ответ сервера на команду DELE: сообщение «ОК» удалено:

DELE 1
+ОК сообщение 1 удалено

Если это действительно один из этих дней, и мы отметили сообщение для удаления, которое мы не хотим удалять, можно восстановить все сообщения, сбросив метки удаления. Команда RSET возвращает почтовый ящик в состояние, в котором он находился до нашего входа.

Сервер отвечает + OK и, возможно, количеством сообщений:

RSET
+ОК 18 сообщений

После того, как мы получили и удалили все сообщения, пришло время попрощаться с помощью команды QUIT. Это удалит сообщения, помеченные для удаления, и закроет соединение. Сервер отвечает + OK и прощальным сообщением:

УВОЛИТЬСЯ
+Нормально до свидания

Возможно, серверу не удалось удалить сообщение. Затем он ответит с ошибкой, как -ERR сообщение 2 не удалено.

Ссылка на основную публикацию