Backend-сервис для автоматического получения, хранения и категоризации электронной почты с почтовых ящиков через протокол IMAP. Работа с внешними сервисами, реляционной базой данных и веб-интерфейсом в одном приложении.
Система управления электронной почтой, которая автоматизирует процесс получения, хранения и организации писем из почтовых ящиков mail.ru.
- ✅ Получение писем через протокол IMAP — работа с почтовыми серверами на сетевом уровне
- ✅ Хранение в реляционной базе данных — структурированное хранение писем, вложений, категорий
- ✅ Категоризация и фильтрация — гибкая система тегов и меток для организации корреспонденции
- ✅ Поиск и статистика — аналитика по письмам, отправителям, временным периодам
- ✅ Веб-интерфейс — удобный доступ к почте через браузер
- ✅ Многопользовательская архитектура — поддержка нескольких почтовых ящиков
┌─────────────────────────────────────────────────────────────┐ │ Пользователь │ └───────────────────────┬─────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ FastAPI (Backend) │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │ │ │ IMAP Client │ │ API Routes │ │ Jinja2 Templates│ │ │ │ (mail.ru) │ │ (/emails, │ │ (HTML Pages) │ │ │ └──────┬───────┘ │ /stats, │ └────────┬─────────┘ │ │ │ │ /categories)│ │ │ │ ▼ └──────┬───────┘ │ │ │ ┌──────────────┐ │ │ │ │ │ Email Parser│◄────────┼───────────────────┘ │ │ │ (MIME, Body)│ │ │ │ └──────┬───────┘ │ │ │ │ │ │ └─────────┼─────────────────┼────────────────────────────────┘ │ │ ▼ ▼ ┌─────────────────────────────────────────────────────────────┐ │ SQLAlchemy ORM Layer │ │ ┌─────────────┐ ┌─────────────┐ ┌────────────────────┐ │ │ │ Emails │ │Attachments │ │ Categories │ │ │ │ Model │ │ Model │ │ Model │ │ │ └──────┬──────┘ └──────┬──────┘ └──────────┬─────────┘ │ │ │ │ │ │ │ └────────────────┴────────────────────┘ │ └──────────────────────────┬─────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ SQLite Database │ │ emails ── attachments ── categories ── email_categories │ └─────────────────────────────────────────────────────────────┘
| Таблица | Описание | Ключевые поля |
|---|---|---|
| emails | Основная таблица писем | id, email_id, subject, sender, date, body, is_processed |
| attachments | Вложения писем | id, email_id, filename, content_type, data |
| categories | Категории для сортировки | id, name, description |
| email_categories | Связь многие-ко-многим | email_id, category_id |
Ручное управление электронной почтой требует значительных временных затрат:
- Скачивание и сохранение важных писем
- Организация корреспонденции по категориям
- Поиск информации в архиве писем
Автоматизированная система управления почтой:
- Экономия времени: Автоматическое получение и сохранение писем
- Организация данных: Структурированное хранение с возможностью категоризации
- Удобный доступ: Веб-интерфейс для просмотра и поиска
- Масштабируемость: Поддержка нескольких почтовых ящиков
| Метрика | Значение |
|---|---|
| Время получения 100 писем | ~15-20 секунд |
| Объём данных на 1000 писем | ~50-100 МБ (в зависимости от вложений) |
| Поддерживаемые форматы | MIME, текст, HTML, вложения |
| Совместимость | mail.ru (IMAP), расширяемо для других провайдеров |
| Слой | Технология | Версия | Назначение |
|---|---|---|---|
| Язык | Python | 3.10+ | Основной язык разработки |
| Web Framework | FastAPI | 0.104.1 | Создание веб-API и сервера |
| ASGI Server | uvicorn | 0.24.0 | Запуск асинхронного приложения |
| ORM | SQLAlchemy | 2.0.23 | Работа с реляционной базой данных |
| Валидация | Pydantic | 2.4.2 | Валидация данных и сериализация |
| База данных | SQLite | — | Локальное хранение данных |
| Протокол | IMAP | — | Получение почты с сервера mail.ru |
| Шаблонизатор | Jinja2 | — | Рендеринг веб-страниц |
| Конфигурация | python-dotenv | — | Управление переменными окружения |
| Функция | Статус | Описание |
|---|---|---|
| Получение писем через IMAP | ✅ Реализовано | Подключение к mail.ru, скачивание писем |
| Парсинг писем (MIME) | ✅ Реализовано | Извлечение темы, отправителя, тела, вложений |
| База данных SQLite | ✅ Реализовано | Таблицы для писем, вложений, категорий |
| ORM (SQLAlchemy) | ✅ Реализовано | Модели данных и отношения |
| FastAPI сервер | ✅ Реализовано | Веб-сервер с роутингом |
| Веб-интерфейс (шаблоны) | ✅ Реализовано | Страницы: главная, детали письма, категории, статистика |
| Категоризация писем | ✅ Реализовано | Связь многие-ко-многим, теги |
| Поиск по письмам | 🟡 В разработке | Фильтрация по отправителю, теме, дате |
| Статистика | 🟡 В разработке | Аналитика по корреспонденции |
| Поддержка нескольких ящиков | ⬜ Планируется | Расширение для нескольких аккаунтов |
- Python 3.10 или выше
- Учётная запись mail.ru с включённым IMAP
- Специальный пароль приложения (не основной пароль)
# 1. Клонировать репозиторий
git clone https://github.com/Nicemice13/Sort_emails.git
cd Sort_emails
# 2. Активировать виртуальное окружение
python -m venv venv
source venv/bin/activate # Linux/Mac
# venv\Scripts\activate # Windows
# 3. Установить зависимости
pip install -r requirements.txt
# 4. Создать файл .env с учётными данными
# Создайте файл .env в корне проекта:
cat > .env << EOF
EMAIL_RU=ваш_email@mail.ru
PASSWORD_RU=ваш_пароль_приложения
EOF
# 5. Создать базу данных
python create_database.py
# 6. Получить письма с почтового ящика
python mail_to_json.py
# 7. Запустить веб-сервер
uvicorn test1:app --reload
# 8. Открыть в браузере
# http://localhost:8000
Настройка почтового ящика mail.ru
Войдите в аккаунт на mail.ru
Перейдите в Настройки → Почтовые программы
Включите Протокол IMAP
Создайте Пароль для почтовых программ
Скопируйте пароль в файл .env
📚 Используемые ресурсы
FastAPI Documentation: https://fastapi.tiangolo.com
SQLAlchemy Documentation: https://docs.sqlalchemy.org
IMAP Protocol: https://datatracker.ietf.org/doc/html/rfc3501
Mail.ru IMAP Settings: https://help.mail.ru/mail-help/imap
📝 Лицензия
Проект распространяется под лицензией MIT.