YAML Metadata Warning:empty or missing yaml metadata in repo card
Check out the documentation for more information.
Corporate Mail — корпоративная почта на Django
Веб-приложение внутренней корпоративной почты: сотрудники компании переписываются между собой в привычном «гмейл-подобном» интерфейсе. Письма хранятся в базе данных, внешний почтовый сервер для внутренней переписки не нужен.
Содержание
- Возможности
- Технологии
- Быстрый старт
- Тестовые аккаунты
- Как пользоваться
- Настройка через .env
- Структура проекта
- Полезные команды
- Частые проблемы
- Лицензия
Возможности
| Раздел | Что умеет |
|---|---|
| Письма | Входящие, отправленные, черновики, избранное, спам, корзина, архив |
| Написание | Получатели / копия / скрытая копия, вложения, простое форматирование текста |
| Цепочки | Письма группируются в переписки (thread), ответ и пересылка |
| Метки | Цветные метки, фильтрация писем по метке |
| Папки | Свои папки и вложенные подпапки |
| Контакты | Адресная книга, группы контактов, импорт и экспорт CSV |
| Шаблоны | Заготовки писем, в том числе общие для всех сотрудников |
| Фильтры | Правила автоматической обработки входящих (метка, архив, звезда и т.д.) |
| Поиск | Быстрый поиск и расширенный поиск по дате, адресату, вложениям |
| Настройки | Подпись, автоответчик (отпуск), квота почтового ящика |
| Печать | Версия письма для печати |
| Админка | Полное управление данными через /admin/ |
Форматирование в тексте письма: **жирный**, *курсив*, __подчёркнутый__,
# Заголовок, > цитата, - список, [ссылка](https://example.com).
Технологии
- Python 3.10+ и Django 5.2
- SQLite по умолчанию (можно переключить на PostgreSQL одной строкой в
.env) - Bootstrap 5 + Font Awesome 6 для интерфейса
- Django REST Framework — API для AJAX-запросов
- Celery + Redis — необязательно, только для отложенной отправки писем
Быстрый старт
Нужен установленный Python 3.10 или новее (скачать) и Git. При установке Python обязательно поставьте галочку «Add Python to PATH».
1. Скачать проект
git clone https://github.com/imomzoda-dev/corporate-mail-django.git
cd corporate-mail-django
2. Создать виртуальное окружение
Windows (PowerShell или CMD):
python -m venv venv
venv\Scripts\activate
Linux / macOS:
python3 -m venv venv && source venv/bin/activate
После активации в начале строки терминала появится (venv).
3. Установить зависимости
pip install -r requirements.txt
4. Создать базу данных
cd corporate_mail
python manage.py migrate
5. Загрузить демонстрационные данные (по желанию)
python manage.py seed_demo
Команда создаст двух тестовых сотрудников, переписку между ними, контакты, метки, папки, шаблон письма и правило фильтрации. Запускать её можно сколько угодно раз — существующие данные не дублируются и не удаляются.
6. Создать администратора (по желанию)
python manage.py createsuperuser
7. Запустить сервер
python manage.py runserver
Откройте в браузере http://127.0.0.1:8000/
Остановить сервер — Ctrl + C в терминале.
Тестовые аккаунты
После команды python manage.py seed_demo доступны два готовых аккаунта:
| Логин | Пароль | Роль | |
|---|---|---|---|
alisher |
demo12345 |
alisher@company.com | Руководитель отдела продаж |
malika |
demo12345 |
malika@company.com | Менеджер проектов |
Чтобы увидеть, как работает переписка, откройте два разных браузера (или обычное окно и окно в режиме инкогнито) и войдите под разными пользователями — письмо, отправленное одним, сразу появится у другого.
Это демонстрационные пароли. Для реального использования смените их или создайте своих пользователей через регистрацию либо
/admin/.
Как пользоваться
Регистрация и вход
- Вход — http://127.0.0.1:8000/login/
- Регистрация — http://127.0.0.1:8000/register/
- Админка — http://127.0.0.1:8000/admin/ (только для суперпользователя)
При регистрации автоматически создаётся почтовый профиль и системные метки.
Отправить письмо
- Нажмите синюю кнопку «Написать» слева вверху.
- В поле «Кому» укажите email получателя (несколько адресов — через запятую).
- Заполните тему и текст, при необходимости прикрепите файлы.
- Нажмите «Отправить».
Письмо появляется у вас в «Отправленных», а у получателя — во «Входящих». Если адрес не принадлежит ни одному пользователю системы, письмо просто сохранится у вас в отправленных.
Кнопка «Сохранить черновик» откладывает письмо в «Черновики».
Работа со списком писем
- Клик по письму — открыть, оно автоматически отмечается прочитанным.
- Звёздочка слева — добавить в избранное.
- Внутри письма доступны: ответить, переслать, в архив, в спам, удалить, печать.
Метки и папки
- Метки (левое меню → «Метки») — цветные ярлыки, у письма их может быть несколько.
- Папки (левое меню → «Папки») — привычная древовидная структура, поддерживаются подпапки.
Фильтры (автоматическая обработка)
Настройки → Правила фильтрации → Создать правило. Например:
«если отправитель содержит partner.com → добавить метку Клиенты».
Правила применяются к каждому новому входящему письму сверху вниз.
Контакты
Контакты → Импорт CSV. Формат файла (первая строка — заголовки):
email,first_name,last_name,company
ivanov@company.com,Иван,Иванов,Отдел продаж
Обязательна только колонка email. Экспорт выгружает контакты в CSV с поддержкой
кириллицы в Excel.
Подпись и автоответчик
Настройки → Подпись — текст, который добавляется в конец письма. Настройки → Автоответчик — сообщение на время отпуска.
Настройка через .env
Все настройки читаются из переменных окружения, поэтому менять код не нужно.
cp .env.example .env
(в Windows: copy .env.example .env)
Файл .env в git не попадает — в нём хранятся секреты.
| Переменная | По умолчанию | Назначение |
|---|---|---|
DJANGO_SECRET_KEY |
ключ для разработки | Секретный ключ. Обязательно смените на продакшене |
DJANGO_DEBUG |
True |
Режим отладки. На боевом сервере — False |
DJANGO_ALLOWED_HOSTS |
* |
Разрешённые домены через запятую |
DB_ENGINE |
sqlite |
sqlite или postgres |
DB_NAME / DB_USER / DB_PASSWORD / DB_HOST / DB_PORT |
— | Параметры PostgreSQL |
EMAIL_BACKEND |
console | Куда отправлять внешнюю почту (по умолчанию — в терминал) |
CORPORATE_DOMAIN |
company.com |
Домен компании |
MAIL_STORAGE_QUOTA_MB |
1024 |
Квота ящика в мегабайтах |
MAX_ATTACHMENT_SIZE_MB |
25 |
Максимальный размер вложения |
Переключение на PostgreSQL
В .env:
DB_ENGINE=postgres
DB_NAME=corporate_mail_db
DB_USER=postgres
DB_PASSWORD=ваш_пароль
DB_HOST=localhost
DB_PORT=5432
Затем снова python manage.py migrate.
Структура проекта
Mail_django/
├── README.md
├── requirements.txt
├── .env.example
├── .gitignore
└── corporate_mail/
├── manage.py
├── corporate_mail/ # настройки проекта
│ ├── settings.py
│ ├── urls.py
│ ├── wsgi.py / asgi.py
│ └── celery.py
└── mail/ # основное приложение
├── models.py # 11 моделей: письма, метки, папки, контакты…
├── forms.py
├── admin.py
├── urls.py
├── tasks.py # фоновые задачи Celery
├── views/ # представления, разбитые по темам
│ ├── auth.py # регистрация, вход, выход
│ ├── messages.py # письма, написание, действия
│ ├── contacts.py # контакты и группы
│ ├── labels.py # метки
│ ├── folders.py # папки
│ ├── templates.py # шаблоны писем
│ ├── filters.py # правила фильтрации
│ ├── settings.py # настройки, подпись, автоответчик
│ ├── search.py # поиск
│ └── api.py # JSON API для AJAX
├── management/commands/
│ ├── seed_demo.py # демо-данные
│ └── create_missing_profiles.py # починка профилей
├── templates/mail/ # HTML-шаблоны
└── migrations/
Модели данных
UserProfile — профиль сотрудника (подпись, квота, автоответчик) ·
Message — письмо · Attachment — вложение · Label — метка ·
EmailFolder — папка · Contact / ContactGroup — адресная книга ·
EmailTemplate — шаблон · FilterRule — правило фильтрации ·
ScheduledEmail — отложенная отправка · MessageRead — отметка о прочтении ·
EmailLog — журнал отправки.
Полезные команды
Все команды выполняются из папки corporate_mail при активном виртуальном окружении.
python manage.py runserver
python manage.py migrate
python manage.py createsuperuser
python manage.py seed_demo
python manage.py create_missing_profiles
python manage.py collectstatic
Отложенная отправка писем (нужен запущенный Redis) — в отдельном терминале:
celery -A corporate_mail worker -l info
Частые проблемы
python не является внутренней или внешней командой
Python не добавлен в PATH. Переустановите Python с галочкой «Add Python to PATH»
или используйте команду py вместо python.
venv\Scripts\activate не запускается в PowerShell
Выполните один раз:
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
ModuleNotFoundError: No module named 'django'
Не активировано виртуальное окружение (нет (venv) в строке терминала)
или не установлены зависимости — повторите шаги 2 и 3.
Порт 8000 занят
python manage.py runserver 8080
Письмо не дошло до получателя
Убедитесь, что адрес получателя точно совпадает с email зарегистрированного
пользователя. Проверить список можно в админке: /admin/auth/user/.
Нужно начать с чистой базы
Удалите файл corporate_mail/db.sqlite3 и выполните python manage.py migrate.
Все данные при этом будут потеряны.
Лицензия
MIT — используйте, изменяйте и распространяйте свободно. См. файл LICENSE.