Folders and files
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Repository files navigation
# Автоматическая рассылка файлов через Outlook Win32
Это приложение на WINDOWS автоматизирует процесс отправки файлов (например, отчетов) через Microsoft Outlook на основе заданного расписания и конфигурации. Оно состоит из двух основных компонентов:
1. **`auto_sender.py`**: Веб-интерфейс на Streamlit для настройки параметров, предварительного просмотра файлов и ручной отправки.
2. **`sender_service.py`**: Фоновый сервис, который выполняет автоматическую отправку файлов по расписанию.
> **ВАЖНО:** Приложение предназначено **только для работы на компьютерах под управлением Microsoft Windows** с установленным **Microsoft Outlook**. Оно использует библиотеку `pywin32` для взаимодействия с Outlook через COM API. Приложение **не будет работать** на Linux, macOS или в облачных средах (например, Hugging Face Spaces), где нет доступа к Outlook/COM.
## Возможности
****************************** автоматический поиск онлайн файлов в папке и отправка "налету"*******************************
* **Конфигурация по складам**: Настройка email адресов и правил отправки для каждого склада отдельно.
* **Правила дат файлов**: Возможность указать, файлы с какой датой должны отправляться для каждого склада (например, "файлы за завтрашнюю дату" или "файлы за пятницу - за 3 дня вперёд").
* **Фильтрация файлов**: Отправка файлов только соответствующего склада (имя файла начинается с кода склада).
* **Веб-интерфейс**: Удобный интерфейс для управления настройками и просмотра логов.
* **Логирование**: Подробное логирование всех действий сервиса и интерфейса.
## Требования
* **Операционная система**: Microsoft Windows (7/8/10/11)
* **Microsoft Outlook**: Установлен и настроен на компьютере. Outlook **должен быть запущен** во время работы сервиса.
* **Python**: Python 3.8 или выше.
* **Зависимости Python**: См. файл `requirements.txt`.
## Установка
1. **Клонируйте или скачайте репозиторий**:
* Вы можете клонировать репозиторий с помощью Git:
```bash
git clone <URL_вашего_репозитория>
```
* Или скачать архив с кодом и распаковать его в папку на вашем компьютере.
2. **Откройте командную строку или PowerShell** и перейдите в папку проекта:
```bash
cd путь\к\вашему\проекту
```
3. **(Рекомендуется) Создайте виртуальное окружение Python**:
```bash
python -m venv venv
# Активируйте виртуальное окружение
# На Windows (cmd):
venv\Scripts\activate.bat
# На Windows (PowerShell):
venv\Scripts\Activate.ps1
```
4. **Установите необходимые библиотеки Python**:
```bash
pip install -r requirements.txt
```
## Настройка
1. **Запустите веб-интерфейс**:
```bash
streamlit run auto_sender.py
```
Откроется окно браузера с интерфейсом приложения.
2. **Перейдите на страницу "Конфигурация"** в интерфейсе.
3. **Настройте параметры**:
* **Путь к папке с файлами**: Укажите полный путь к папке, где находятся файлы для отправки.
* **Время отправки**: Укажите одно или несколько времен отправки в формате `ЧЧ:ММ`, разделенных запятыми (например, `09:00, 12:00, 16:00`).
* **Email отправителя**: Укажите email адрес, от имени которого будут отправляться письма (должен быть настроен в вашем Outlook).
* **Конфигурация email адресов**: Для каждого кода склада укажите email адрес получателя.
* **Конфигурация дат файлов**: Для каждого склада укажите:
* **Дней к сегодняшней дате**: Сколько дней нужно добавить к сегодняшней дате, чтобы получить дату файла для отправки (например, `1` для "файлы за завтра").
* **Отправка в пятницу**: Сколько дней нужно добавить к сегодняшней дате в пятницу (например, `3` для "в пятницу отправлять файлы за понедельник").
4. **Нажмите "Сохранить конфигурацию"**.
## Использование
1. **Запустите сервис отправки**:
* В веб-интерфейсе на странице "Отправка файлов" или в боковой панели нажмите кнопку **"▶️ Запустить сервис отправки"**.
* Откроется новое окно командной строки, в котором будет работать `sender_service.py`. Это окно можно свернуть или закрыть, сервис продолжит работать в фоне.
2. **Проверьте статус сервиса**:
* На странице "Отправка файлов" или в боковой панели должен отображаться статус **"🟢 Сервис отправки запущен"**.
3. **Предварительный просмотр файлов**:
* На странице "Отправка файлов" вы можете увидеть список файлов, которые *должны быть* отправлены в ближайшее запланированное время, согласно настройкам `date_config`.
4. **Ручная отправка**:
* На странице "Отправка файлов" нажмите кнопку **"🚀 Отправить сейчас"**, чтобы немедленно отправить файлы, соответствующие текущей дате и настройкам `date_config`.
5. **Просмотр логов**:
* Перейдите на страницу "Логи" в интерфейсе или откройте файл `logs/sender.log` (для сервиса) и `logs/sender.log` (для интерфейса) в текстовом редакторе, чтобы увидеть подробную информацию о работе приложения.
6. **Остановка сервиса**:
* В веб-интерфейсе на странице "Отправка файлов" или в боковой панели нажмите кнопку **"⏹️ Остановить сервис отправки"**.
## Формат файлов
Файлы должны находиться в папке, указанной в настройках. Имя файла должно соответствовать следующему формату:
[КодСклада][ГГГГММДД][ЛюбоеДругоеИмя].xlsx
* `[КодСклада]`: Код склада (например, `7210`, `7220`).
* `[ГГГГММДД]`: Дата в формате `YYYYMMDD` (например, `20250813`). - без точек
* `[ЛюбоеДругоеИмя]`: Любое другое имя файла.
* `.xlsx`: Расширение файла Excel.
**Примеры**:
* `7210_20250814_СД00-014490_ЗаданиеНаОтгрузку.XLSX`
* `7220_20250815_report.xlsx`
Сервис будет искать файлы для отправки, соответствующие правилам `date_config`. Например, если для склада `7210` установлено "Дней к сегодняшней дате: 1", то в понедельник сервис будет искать файлы с именем, содержащим `7210_20250813_...` (если сегодня 2025-08-12).
## Решение проблем
* **Outlook не подключается**:
* Убедитесь, что Outlook **запущен**.
* Проверьте права доступа к Outlook для Python/Streamlit.
* Перезапустите Outlook и приложение.
* **Файлы не находятся**:
* Проверьте путь к папке в конфигурации.
* Убедитесь, что файлы имеют правильный формат имени и дату.
* Проверьте настройки `date_config` для соответствующего склада.
* **Отправка не работает**:
* Проверьте логи на странице "Логи" или в файлах `logs/*.log`.
* Убедитесь, что сервис `sender_service.py` запущен.
* Убедитесь, что антивирус или брандмауэр не блокируют отправку.
* **Ошибка `AttributeError: st.session_state has no attribute ...`**:
* Убедитесь, что вы используете последнюю версию кода, предоставленную в этом репозитории.
* **Окно командной строки сервиса мешает работе**:
* Это окно можно просто свернуть. Оно отображает логи сервиса. Закрытие окна не останавливает сам сервис, но прекращает вывод логов в это окно. Для полной остановки используйте кнопку в веб-интерфейсе.