Mail agent added

This commit is contained in:
2025-10-28 23:10:48 +03:00
parent 6b87bd226e
commit 1ef4271137
9 changed files with 525 additions and 2 deletions

View File

@@ -0,0 +1,95 @@
# Работа с переменными окружения в Python
## Основные способы
### 1. Через `os.environ` (стандартная библиотека)
```python
import os
# Чтение с безопасным значением по умолчанию
email = os.environ.get('EMAIL_ADDRESS', 'default@example.com')
# Чтение обязательной переменной
password = os.environ.get('EMAIL_PASSWORD')
if not password:
raise ValueError("EMAIL_PASSWORD not set")
# Прямой доступ (вызовет KeyError, если переменной нет)
email = os.environ['EMAIL_ADDRESS']
```
### 2. С использованием python-dotenv (рекомендуется для разработки)
```python
import os
from dotenv import load_dotenv
# Загрузить переменные из .env файла
load_dotenv()
# Теперь работаем с переменными
email = os.environ.get('EMAIL_ADDRESS')
```
## Установка python-dotenv
```bash
pip install python-dotenv
```
Или добавьте в зависимости проекта (уже добавлено в `pyptoject.toml`):
```toml
dependencies = [
"python-dotenv>=1.0.0"
]
```
## Настройка .env файла
1. Скопируйте `example.env` в `.env`:
```bash
cp example.env .env
```
2. Отредактируйте `.env` и добавьте свои данные:
```env
EMAIL_ADDRESS=your_email@gmail.com
EMAIL_PASSWORD=your_app_password
IMAP_HOST=imap.gmail.com
IMAP_PORT=993
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
```
3. Убедитесь, что `.env` добавлен в `.gitignore` (уже добавлено)
## Пример использования в MailOrderBot
```python
import os
from dotenv import load_dotenv
from mail_order_bot.email_client import EmailClient
# Загрузить переменные из .env файла
load_dotenv()
# Чтение переменных
EMAIL = os.environ.get('EMAIL_ADDRESS')
PASSWORD = os.environ.get('EMAIL_PASSWORD')
# Создание клиента
client = EmailClient(
imap_host='imap.gmail.com',
smtp_host='smtp.gmail.com',
email=EMAIL,
password=PASSWORD
)
```
## Безопасность
- НЕ коммитьте `.env` файл в git
- Используйте `.env.example` как шаблон
- Храните реальные пароли только в `.env` (уже добавлено в `.gitignore`)