Кафедра ИСиТ УО ВГТУ
  • Специальности
    • Экономика электронного бизнеса
    • Информационные системы
    • Information Control Systems
  • Каталог
  • Сайт кафедры
  • Сервисы
    • GitLab
    • ownCloud
    • JupyterHub
    • JupyterHub 2
    • VNC
    • Soft
  1. ИСиТ
  2. ПСП
  3. Практика
  4. Лаб. работа “Почтовые протоколы”
  • ИСиТ
    • АОС
      • Теория
        • Введение в операционные системы
        • Управление памятью
        • Управление процессами
        • Система ввода-вывода
        • Информационная безопасность
        • Виртуализация
      • Практика
    • РВПсИПП
      • Теория
        • Настройка среды разработки для PHP
        • Разработка web-приложений на базе фреймворков
        • Основы Laravel
        • Шаблоны в Laravel
        • Модели и базы данных в Laravel
        • Формы и валидация в Laravel
        • Аутентификация и авторизация в Laravel
        • Создание REST API в Laravel
        • Работа с файлами и изображениями в Laravel
        • Тестирование и отладка в Laravel
        • Введение в фреймворк Symfony
        • Маршруты и контроллеры в Symfony
        • Шаблоны и Twig в Symfony
        • Формы и валидация в Symfony
        • Доступ к базам данных в Symfony
        • Аутентификация и авторизация в Symfony
        • Сервисы и зависимости в Symfony
        • Создание REST API в Symfony
        • Работа с файлами и медиа в Symfony
        • Сравнение и выбор фреймворка
        • Развертывание веб-приложения
      • Практика
        • Лаб. работа 1 “Создание нового приложения Laravel”
        • Лаб. работа 2 “Добавление главной страницы и базовых маршрутов”
        • Лаб. работа 3 “Создание моделей, миграций и сидеров”
        • Лаб. работа 4 “Создание индексных страниц и пагинация”
        • Лаб. работа 5 “Создание форм для работы с сущностями”
        • Лаб. работа 6 “Работа с файлами (эмуляция S3-хранилища)”
        • Лаб. работа “Создание маршрутов в Laravel”
        • Лаб. работа “Работа с базами данных в Laravel”
        • Лаб. работа “Работа с формами в Laravel”
        • Лаб. работа “Аутентификация и авторизация в Laravel”
        • Лаб. работа “Работа с файлами в Laravel”
        • Лаб. работа “Тестирование и оптимизация в Laravel”
        • Лаб. работа “Создание REST API в Laravel”
        • Лаб. работа “Основы Symfony”
        • Лаб. работа “Шаблоны и представления в Symfony”
        • Лаб. работа “Работа с базами данных в Symfony”
        • Лаб. работа “Фомы и аутентификация в Symfony”
        • Лаб. работа “Сервисы и зависимости в Symfony”
        • Лаб. работа “REST API в Symfony”
        • Лаб. работа “Работа с медиа контентом в Symfony”
        • Лаб. работа “Создание и развертывание проекта”
    • ПСП
      • Теория
        • Введение
        • Протокол HTTP
        • Программирование с использованием сокетов
        • Введение в PHP
        • Работа с базами данных в PHP
        • Объектно-ориентированные возможности PHP
        • Настройка среды разработки для PHP
        • Разработка web-приложений на базе фреймворков
      • Практика
        • Программное обеспечение
        • Регистрация в JupyterHub
        • Лаб. работа “Почтовые протоколы”
        • Лаб. работа “Протокол FTP”
        • Лаб. работа “Протокол HTTP”
        • Лаб. работа “Программирование сетевых приложений с использованием сокетов”
        • Лаб. работа “Основы PHP”
        • Лаб. работа “Массивы в PHP”
        • Лаб. работа “Создание веб-приложений с использованием Slim”
    • Компьютерные сети
      • Теория
        • Введение в компьютерные сети
        • Топологии сетей
        • Кодирование и мультиплексирование
        • Стеки протоколов
        • Адресация в компьютерных сетях
        • Система доменных имен (DNS)
        • Программирование с использованием сокетов
        • Введение в PHP
        • Протокол HTTP
        • Введение в компьютерные сети
      • Практика
        • Программное обеспечение
        • Регистрация в JupyterHub
        • Лаб. работа “Почтовые протоколы”
        • Лаб. работа “Протокол FTP”
        • Лаб. работа “Протокол HTTP”
        • Лаб. работа “Программирование сетевых приложений с использованием сокетов”
        • Лаб. работа “Основы PHP”
        • Лаб работа “Массивы в PHP”
    • РиОИИС
      • Теория
        • Классификация оптимизационных задач
        • Генетические алгоритмы
        • Системы массового обслуживания
        • Теория игр
        • Машинное обучение
        • Глубокое обучение (Deep learning)
        • Основы функционального программирования
        • Основы программирования на Haskell
        • Введение в логическое программирование
        • Инференция и рассуждения в логическом программировании
        • Разработка экспертных систем
        • Интеллектуальные системы и их архитектура
        • Веб-скрэйпинг
        • Сбор данных с открытых API
      • Практика
        • JupyterHub
        • Лаб. работа “Методы одномерной оптимизации”
        • Лаб. работа “Методы многомерной оптимизации”
        • Лаб. работа “Функции в Python”
        • Лаб. работа “Рекурсия в Python”
        • Лаб. работа “Итераторы в Python”
        • Лаб. работа “Генетические алгоритмы”
        • Лаб. работа “Haskell”
        • Лаб. работа “Логическое программирование”
        • Лаб. работа “Сбор данных с помощью веб-скрейпинга”
    • КСКР
      • Практика
        • Лаб. работа “Одномерные и двумерные массивы в C#”
        • Лаб. работа “Обращение матриц в C#”
    • Системное программирование
      • Теория
        • Управление памятью в Windows
        • Файловые операции в Windows
        • Управление процессами в Windows
        • Графический интерфейс Windows
        • ОС Unix
      • Практика
        • Лаб. работа “Работа с динамической памятью в Windows”
        • Лаб. работа “Операции с файлами в Windows”
        • Лаб. работа “Управление процессами в Windows”
        • Лаб. работа “Работа с виртуальной машиной Linux”
        • Лаб. работа “Язык командного энтерпритатора Shell”
        • Лаб. работа “Работа с файлами в Linux”
        • Лаб. работа “Работа с процессами в Linux”

Содержание

  • Протокол SMTP
    • Описание команд протокола SMTP
  • Протокол POP3
    • Описание команд протокола POP3
  • Задания
  1. ИСиТ
  2. ПСП
  3. Практика
  4. Лаб. работа “Почтовые протоколы”

Лаб. работа “Почтовые протоколы”

Программирование сетевых приложений
Практика
Автор

Бизюк Андрей

Дата публикации

29 февраля 2024 г.

Протокол SMTP

Основным протоколом работы с электронной почтой является SMTP (Simple Mail Transfer Protocol, простой протокол передачи почты). Протокол SMTP поддерживает передачу сообщений электронной почты между произвольными узлами сети Internet.

Протокол SMTP работает поверх транспортного протокола TCP (обычно используется порт 25). Соединение с SMTP-сервером устанавливается по инициативе клиента и прекращается сервером после получения от клиента команды завершения соединения.

Полное описание протокола SMTP находится в RFC 2821.

 

Описание команд протокола SMTP

 

HELO домен – начало сеанса SMTP. Ответом на эту команду является код 250 с именем отвечающего домена.

MAIL FROM:<имя@домен> - начать новую транзакцию передачи сообщения (знаки «<» и «>» указывать обязательно!). Код подтверждения – «250 ОК».

RCPT TO:<имя@домен> - задать адрес получателя сообщения. Данная команда может повторяться несколько раз для отправки сообщения нескольким адресатам. Код ошибки – 550.

DATA – начало передачи сообщения. После получения кода подтверждения 354 отправитель должен передать заголовок сообщения и тело сообщения. Заголовок сообщения отделяется от тела сообщения пустой строкой (если заголовок отсутствует, перед телом сообщения должна быть хотя бы одна пустая строка). Для обозначения конца сообщения служит строка, содержащая одну точку «.». в заголовке сообщения обычно указываются адреса получателя и отправителя сообщения, дата и время отправки сообщения, тема и идентификатор сообщения, информация о способе представления данных, сведения о промежуточных узлах и т.д. почтовые программы и сервера обычно самостоятельно заполняют поля заголовка сообщения. Некоторые поля (From, Subject) заголовка впоследствии отображаются при работе с почтовыми программами.

QUIT – завершить сеанс SMTP.

Пример работы с SMTP-сервером:

220 isit ESMTP
HELO isit
250 isit
MAIL FROM: <stud1@isit>
250 2.1.0 Ok
RCPT TO: <stud2@isit>
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
FROM: "STUD 1" <stud1@isit>
TO: "STUD 2" <stud2@isit>
SUBJECT: Моё первое письмо

Привет! Это мое первое тестовое письмо.
Если ты его читаешь, это значит я правильно использовал   
команды протокола SMTP для отправки электронного письма.
До свидания.
.
250 2.0.0 Ok: queued as BE98220111
QUIT
221 2.0.0 Bye

Протокол POP3

 

POP3- это простейший протокол для работы пользователя с содержимым своего почтового ящика. Он позволяет только забрать почту из почтового ящика сервера на рабочую станцию клиента и удалить её из почтового ящика на сервере. Всю дальнейшую обработку почтовое сообщение проходит на компьютере клиента.

POP3-сервер не отвечает за отправку почты, он работает только как универсальный почтовый ящик для группы пользователей. Когда пользователю необходимо отправить сообщение, он должен установить соединение с каким-либо SMTP-сервером и отправить туда своё сообщение по SMTP. Этот SMTP-сервер может быть тем же хостом, где работает POP3-сервер, а может располагаться совсем в другом месте (в другом домене или, вообще говоря, где угодно в Internet).

Протокол POP3 работает поверх транспортного протокола TCP (обычно используется порт 110). Соединение с POP3-сервером устанавливается по инициативе клиента и прекращается сервером после получения от клиента команды завершения соединения.

Полное описание протокола POP3 находится в RFC 1939.

 

Описание команд протокола POP3

 

Отыеты POP3-сервера на команды состоят из статус-индикатора (положительный ответ «+ОК» и отрицательный ответ «-ERR»), ключевого слова и дополнительной информации. Если ответ POP3-сервера состоит из нескольких строк, то окончание ответа обозначается строкой, содержащей только один символ – точку «.».

 

USER имя – ввод имени пользователя

PASS пароль – ввод пароля, используется после положительного ответа на команду USER

STAT – используется для просмотра состояния текущего почтового ящика. Возвращает количество сообщений в почтовом ящике и их общий объём.

LIST – просмотр информации об объёме каждого сообщения в почтовом ящике. Возвращает для каждого сообщения его номер (постоянный в течение всего сеанса) и размер в байтах

RETR номер – получение сообщения с указанным номером

TOP номер_письма  количество_строк – получить только заголовок и первые несколько строк указанного письма.

DELE номер – удалить сообщение с указанным номером из почтового ящика. Письма на самом деле не удаляются до завершения сессии, а только помечаются как удалённые.

RSET – отменить удаление писем. Если в текущей сессии некоторые письма помечены как удалённые, пометка снимается.

QUIT – закрыть POP3-сессию

Пример работы с POP3-сервером:

+OK Dovecot (Debian) ready.
USER stud2
+OK
PASS stud
+OK Logged in.
list
+OK 1 messages:
1 633
.
RETR 1
+OK 633 octets
Return-Path: <stud1@isit>
X-Original-To: stud2@isit
Delivered-To: stud2@isit
Received: from isit (unknown [192.168.50.94])
        by isit (Postfix) with SMTP id BE98220111
        for <stud2@isit>; Sun, 28 May 2023 00:25:12 +0300 (+03)
FROM: "STUD 1" <stud1@isit>
TO: "STUD 2" <stud2@isit>
SUBJECT: Моё первое письмо

Привет! Это мое первое тестовое письмо.
Если ты его читаешь, это значит я правильно использовал
команды протокола SMTP для отправки электронного письма.
До свидания.
.
DELE 1
+OK Marked to be deleted.
quit
+OK Logging out, messages deleted.

Задания

  1. Изучить информацию о протоколах SMTP и POP3.

  2. Подключиться к SMTP-серверу с помощью программы PuTTY или Netcat. Адрес SMTP-сервера 192.168.11.119, порт 25. Отослать письмо на свой ящик (имя пользователя: “stud[номер_компьютера]@isit”).

  3. Подключиться к POP3-серверу (адрес 192.168.11.119, порт 110, имя пользователя “stud[номер_компьютера]”, пароль “stud”). Получить ранее посланное письмо (команды LIST и RETR). Выделить из полученной информации заголовок и текст письма. Объяснить содержимое заголовка.

  4. Отослать письмо соседу слева, указав дополнительную информацию в заголовке письма (заполнить поля «From:», «To:», «Date:», «Subject»).

  5. Получить заголовок нового письма. Определить, от кого получено письмо и размер письма.

  6. Получить письмо полностью.

  7. Отослать письмо нескольким адресатам одновременно.

  8. Определить сколько новых писем получено (команда STAT). Просмотреть все новые письма. Очистить ящик (команда DELE).

Наверх
Регистрация в JupyterHub
Лаб. работа “Протокол FTP”