# E-Mail Hintergrund-Synchronisation

## 🚀 **Automatische Hintergrund-Synchronisation**

### **1. Symfony Messenger (Empfohlen)**

#### **Messenger Worker starten:**
```bash
# Worker im Hintergrund starten
php bin/console messenger:consume async -vv

# Oder als Service (Linux)
sudo systemctl start symfony-messenger-worker
```

#### **Hintergrund-Synchronisation starten:**
```bash
# Über Command
php bin/console app:background-email-sync

# Mit Optionen
php bin/console app:background-email-sync --max-emails=100 --since="2024-01-01 00:00:00"
```

#### **Web-Interface:**
- Gehen Sie zu `/public/appointments/admin/emails`
- Klicken Sie auf **"Hintergrund-Sync"** (grüner Button)
- Die Synchronisation läuft asynchron im Hintergrund

### **2. Cronjob für regelmäßige Synchronisation**

#### **Crontab einrichten:**
```bash
# Crontab bearbeiten
crontab -e

# Alle 5 Minuten synchronisieren
*/5 * * * * cd /path/to/project && php bin/console app:auto-email-sync >> /var/log/email-sync.log 2>&1

# Alle 15 Minuten synchronisieren
*/15 * * * * cd /path/to/project && php bin/console app:auto-email-sync >> /var/log/email-sync.log 2>&1

# Täglich um 6:00 Uhr synchronisieren
0 6 * * * cd /path/to/project && php bin/console app:auto-email-sync >> /var/log/email-sync.log 2>&1
```

#### **Systemd Service (Linux):**
```ini
# /etc/systemd/system/email-sync.service
[Unit]
Description=Email Sync Service
After=network.target

[Service]
Type=simple
User=www-data
WorkingDirectory=/path/to/project
ExecStart=/usr/bin/php bin/console app:auto-email-sync
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
```

```bash
# Service aktivieren
sudo systemctl enable email-sync.service
sudo systemctl start email-sync.service
```

### **3. Docker Compose (Empfohlen für Docker)**

#### **docker-compose.yml erweitern:**
```yaml
version: '3.8'
services:
  # ... bestehende Services ...
  
  messenger-worker:
    build: .
    command: php bin/console messenger:consume async -vv
    volumes:
      - .:/var/www/html
    depends_on:
      - database
    restart: unless-stopped
    
  email-sync-cron:
    build: .
    command: php bin/console app:auto-email-sync
    volumes:
      - .:/var/www/html
    depends_on:
      - database
    restart: "no"
    # Läuft alle 15 Minuten
    deploy:
      restart_policy:
        condition: none
```

#### **Cronjob in Docker:**
```bash
# In Docker-Container
docker-compose exec app bash
crontab -e

# Cronjob hinzufügen
*/15 * * * * php bin/console app:auto-email-sync
```

### **4. Windows Task Scheduler**

#### **Task erstellen:**
1. **Task Scheduler** öffnen
2. **"Create Basic Task"** wählen
3. **Name:** "Email Sync"
4. **Trigger:** "Daily" oder "At startup"
5. **Action:** "Start a program"
6. **Program:** `C:\path\to\php.exe`
7. **Arguments:** `C:\path\to\project\bin\console app:auto-email-sync`

### **5. Überwachung und Logs**

#### **Logs anzeigen:**
```bash
# Symfony Logs
tail -f var/log/dev.log | grep "EmailSync"

# Cronjob Logs
tail -f /var/log/email-sync.log

# Messenger Logs
tail -f var/log/dev.log | grep "messenger"
```

#### **Status prüfen:**
```bash
# Messenger Queue Status
php bin/console messenger:stats

# E-Mails in Datenbank
php bin/console doctrine:query:sql "SELECT COUNT(*) FROM email_messages"

# Letzte Synchronisation
php bin/console doctrine:query:sql "SELECT MAX(received_at) FROM email_messages"
```

### **6. Konfiguration**

#### **Umgebungsvariablen (.env):**
```bash
# IMAP-Konfiguration
IMAP_HOST=mx2f92.netcup.net
IMAP_PORT=993
IMAP_USERNAME=terminbuchung@dpohl-engineering.de
IMAP_PASSWORD=meinpasswort
IMAP_SSL=true

# Messenger-Konfiguration
MESSENGER_TRANSPORT_DSN=doctrine://default
```

#### **Messenger-Konfiguration (config/packages/messenger.yaml):**
```yaml
framework:
    messenger:
        transports:
            async: doctrine://default
        routing:
            'App\Message\SyncEmailsMessage': async
```

### **7. Performance-Optimierung**

#### **Batch-Synchronisation:**
```bash
# Nur 10 E-Mails pro Sync
php bin/console app:background-email-sync --max-emails=10

# Nur E-Mails der letzten 7 Tage
php bin/console app:background-email-sync --since="7 days ago"
```

#### **Rate Limiting:**
```bash
# Alle 30 Sekunden
*/30 * * * * * cd /path/to/project && php bin/console app:auto-email-sync
```

### **8. Troubleshooting**

#### **Häufige Probleme:**

**Messenger Worker läuft nicht:**
```bash
# Worker Status prüfen
ps aux | grep messenger

# Worker neu starten
php bin/console messenger:consume async -vv
```

**Cronjob läuft nicht:**
```bash
# Cronjob testen
php bin/console app:auto-email-sync

# Cron-Logs prüfen
grep CRON /var/log/syslog
```

**IMAP-Verbindung fehlgeschlagen:**
```bash
# Verbindung testen
php bin/console app:sync-emails
```

## 📊 **Zusammenfassung**

### **Verfügbare Commands:**
- `app:sync-emails` → Sofortige Synchronisation
- `app:background-email-sync` → Hintergrund-Synchronisation
- `app:auto-email-sync` → Automatische Synchronisation (Cronjob)

### **Web-Interface:**
- **Sofortige Sync** → Blauer Button
- **Hintergrund-Sync** → Grüner Button
- **Verbindung testen** → Info-Button

### **Empfohlene Einrichtung:**
1. **Messenger Worker** für asynchrone Verarbeitung
2. **Cronjob alle 15 Minuten** für regelmäßige Synchronisation
3. **Logs überwachen** für Fehlerbehandlung
