# Руководство по интеграции отправки отчетов по email

## Обзор

В систему добавлена функциональность автоматической отправки сгенерированных PDF отчетов на email пользователя. После генерации отчета в формате PDF, система автоматически отправит его на указанный email адрес.

## Настройка

### 1. Конфигурация email в application.properties

```properties
# Email Configuration
spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=your-email@gmail.com
spring.mail.password=your-app-password
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
```

**Важно:** Для Gmail необходимо использовать App Password вместо обычного пароля.

### 2. Настройка Gmail App Password

1. Включите двухфакторную аутентификацию в Google аккаунте
2. Перейдите в настройки безопасности Google
3. Создайте App Password для приложения
4. Используйте этот пароль в конфигурации

## Использование

### API Endpoint

**POST** `/api/parser/report/generate`

### Пример запроса

```json
{
  "reportTitle": "Аналитический отчет за декабрь 2024",
  "authorName": "Иван Петров",
  "companyName": "ООО Контурай",
  "startDate": "2024-12-01T00:00:00",
  "endDate": "2024-12-31T23:59:59",
  "format": "PDF",
  "recipientEmail": "user@example.com"
}
```

### Параметры

- `reportTitle` - название отчета
- `authorName` - имя автора отчета
- `companyName` - название компании
- `startDate` - дата начала периода (ISO 8601)
- `endDate` - дата окончания периода (ISO 8601)
- `format` - формат отчета ("PDF" или "DOCX")
- `recipientEmail` - **НОВОЕ ПОЛЕ** email адрес для отправки отчета

### Условия отправки email

Email отправляется только при выполнении следующих условий:

1. Указан `recipientEmail` (не пустой)
2. Формат отчета установлен как "PDF"
3. Отчет успешно сгенерирован

### Формат письма

Письмо содержит:

- Красиво оформленный HTML текст с деталями отчета
- Прикрепленный PDF файл с отчетом
- Информацию об авторе, компании и дате создания

## Компоненты системы

### EmailService

Новый сервис для отправки email:

- `sendReportByEmail()` - основной метод отправки
- Поддержка HTML формата писем
- Прикрепление PDF файлов
- Обработка ошибок

### ReportGenerationService

Обновлен для интеграции с EmailService:

- Автоматическая отправка PDF после генерации
- Обработка ошибок отправки без прерывания процесса
- Поддержка асинхронной генерации с email

### ReportGenerateRequest

Добавлено новое поле:

- `recipientEmail` - email для отправки отчета

## Тестирование

### Unit тесты

Создан `EmailServiceTest` с тестами:

- Успешная отправка email
- Обработка null значений
- Обработка ошибок SMTP

### Ручное тестирование

1. Настройте email конфигурацию
2. Отправьте POST запрос с валидными данными
3. Проверьте получение email с PDF вложением

## Безопасность

- Email отправляется только на указанный адрес
- Используется TLS шифрование для SMTP
- App Password для Gmail вместо обычного пароля
- Обработка ошибок без раскрытия чувствительной информации

## Мониторинг

- Логирование успешных отправок
- Логирование ошибок отправки
- Не прерывает процесс генерации отчета при ошибках email

## Примеры использования

### cURL

```bash
curl -X POST http://localhost:8080/api/parser/report/generate \
  -H "Content-Type: application/json" \
  -d '{
    "reportTitle": "Тестовый отчет",
    "authorName": "Тест Автор",
    "companyName": "Тест Компания",
    "startDate": "2024-12-01T00:00:00",
    "endDate": "2024-12-31T23:59:59",
    "format": "PDF",
    "recipientEmail": "test@example.com"
  }'
```

### JavaScript (fetch)

```javascript
const response = await fetch('/api/parser/report/generate', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    reportTitle: 'Аналитический отчет',
    authorName: 'Иван Петров',
    companyName: 'ООО Контурай',
    startDate: '2024-12-01T00:00:00',
    endDate: '2024-12-31T23:59:59',
    format: 'PDF',
    recipientEmail: 'user@example.com',
  }),
});

const result = await response.json();
console.log(result);
```

## Troubleshooting

### Проблемы с Gmail

1. **Ошибка аутентификации**: Убедитесь, что используете App Password
2. **Блокировка аккаунта**: Проверьте настройки безопасности Gmail
3. **Порт заблокирован**: Попробуйте порт 465 с SSL

### Общие проблемы

1. **Email не отправляется**: Проверьте логи приложения
2. **PDF не прикрепляется**: Убедитесь, что формат "PDF"
3. **Пустой recipientEmail**: Проверьте, что поле заполнено

## Логи

Успешная отправка:

```
Email с отчетом успешно отправлен на: user@example.com
```

Ошибка отправки:

```
Ошибка при отправке email: [детали ошибки]
```
