7.7 KiB
DHL Tracking E-Mails - Erweiterte Funktionen
📧 Mehrere Sendungen in einer E-Mail
Problem gelöst:
Wenn eine Bestellung in mehrere Pakete aufgeteilt wird, erhalten Kunden jetzt eine gesammelte E-Mail mit allen Tracking-Nummern, statt mehrere einzelne E-Mails.
✨ Neue Features
1. Automatische Zusammenfassung
Alle Sendungen einer Bestellung werden automatisch in einer E-Mail zusammengefasst:
┌─────────────────────────────────────┐
│ Deine 3 Sendungen sind unterwegs! │
├─────────────────────────────────────┤
│ │
│ Paket 1 │
│ Sendungsnummer: 00340433333... │
│ [Sendung bei DHL verfolgen] │
│ │
│ Paket 2 │
│ Sendungsnummer: 00340433334... │
│ [Sendung bei DHL verfolgen] │
│ │
│ Paket 3 │
│ Sendungsnummer: 00340433335... │
│ [Sendung bei DHL verfolgen] │
└─────────────────────────────────────┘
2. Intelligente Versand-Logik
- ✅ Sammelt alle Sendungen einer Bestellung
- ✅ Versendet eine E-Mail pro Bestellung (nicht pro Paket)
- ✅ Markiert alle Sendungen als versendet
- ✅ Verhindert doppelte E-Mails
3. Manuelle Versand-Option
Im Admin unter DHL Cockpit oder Bestelldetails:
- Button "Tracking-E-Mail senden" klicken
- Sendet automatisch alle Sendungen der Bestellung
- Zeigt Anzahl der Sendungen in der Bestätigung
4. Test-Modus für Cronjob
Testen Sie E-Mails, bevor sie an Kunden gehen!
🚀 Verwendung
Manuelle E-Mail versenden (Admin)
Option 1: Aus Bestelldetails
- Bestellung öffnen
- DHL Sendungen-Block scrollen
- Button "📧" klicken
- Alle Sendungen dieser Bestellung werden versendet
Option 2: Aus DHL Cockpit
- DHL Cockpit öffnen
- Sendung finden
- Button "📧" klicken
- Alle Sendungen dieser Bestellung werden versendet
Automatischer Cronjob
Standard (täglich 06:00 Uhr)
# Läuft automatisch via Cron
# Definiert in: app/Console/Kernel.php
Manuell ausführen
# Normale Ausführung
php artisan dhl:update-tracking --send-emails
# Mit Test-E-Mail
php artisan dhl:update-tracking --send-emails --test-email=admin@example.com
# Für bestimmte Bestellung
php artisan dhl:update-tracking --send-emails --order=45078
# Dry-Run (keine Änderungen)
php artisan dhl:update-tracking --send-emails --dry-run
🧪 Test-Optionen
Option 1: Test-E-Mail an eigene Adresse
php artisan dhl:update-tracking --send-emails --test-email=meine@email.de
✅ Sendet E-Mails an angegebene Adresse statt an Kunden ✅ Perfekt zum Testen des Layouts und Inhalts ✅ Markiert Sendungen TROTZDEM als versendet
Option 2: Dry-Run (Simulation)
php artisan dhl:update-tracking --send-emails --dry-run
✅ Simuliert alle Aktionen ✅ Sendet KEINE E-Mails ✅ Markiert Sendungen NICHT als versendet ✅ Zeigt was passieren würde
Option 3: Bestimmte Bestellung testen
php artisan dhl:update-tracking --send-emails --order=45078 --test-email=test@example.com
✅ Nur für eine Order-ID ✅ An Test-Adresse ✅ Perfekt für gezielte Tests
📊 Versand-Status in Bestelldetails
Anzeige
Für jede Sendung wird angezeigt:
| Sendung | Status | Tracking | Aktionen | |
|---|---|---|---|---|
| #11 | created | - | ✅ 23.01.2026 🤖 Automatisch |
👁️ 📥 📧 |
| #12 | in_transit | ... | ✅ 23.01.2026 👤 Manuell |
👁️ 📥 🔄 📧 |
| #13 | created | - | ⏳ Nicht gesendet | 👁️ 📥 📧 |
Informationen
- ✅ Datum: Wann wurde E-Mail versendet
- 🤖 Automatisch: Via Cronjob versendet
- 👤 Manuell: Über Admin-Button versendet
- ⏳ Nicht gesendet: Noch keine E-Mail
⚙️ Technische Details
Datenbank-Felder
-- dhl_package_shipments Tabelle
tracking_email_sent_at TIMESTAMP NULL -- Wann versendet
tracking_email_type VARCHAR(20) -- 'auto' oder 'manual'
Mail-Klasse
// Unterstützt jetzt Collection von Shipments
new MailDhlTracking($shipments, $order)
// Oder einzelne Sendung (backward compatible)
new MailDhlTracking($shipment, $order)
Logik
// Sammelt alle Sendungen einer Bestellung
$allShipments = DhlShipment::where('order_id', $order->id)
->whereNotNull('dhl_shipment_no')
->whereIn('status', ['created', 'in_transit', 'out_for_delivery'])
->get();
// Sendet eine E-Mail mit allen Sendungen
Mail::to($email)->send(new MailDhlTracking($allShipments, $order));
// Markiert alle als versendet
foreach ($allShipments as $shipment) {
$shipment->markTrackingEmailSent('manual');
}
🎯 Anwendungsfälle
Fall 1: Mehrere Pakete bei Erstellung
1. Admin erstellt 3 Labels für Order #45078
2. Alle 3 Labels werden erstellt (Status: created)
3. Cronjob läuft (06:00 Uhr)
4. Status wird aktualisiert (created → in_transit)
5. EINE E-Mail mit allen 3 Sendungen wird versendet
Fall 2: Nachträgliches Label
1. Order #45078 hat bereits 2 Labels (E-Mail bereits versendet)
2. Admin erstellt 3. Label
3. Admin klickt "📧" Button
4. NEUE E-Mail mit allen 3 Sendungen wird versendet
Fall 3: Test vor Produktiv-Einsatz
# 1. Test mit eigener E-Mail
php artisan dhl:update-tracking --send-emails --test-email=admin@firma.de
# 2. Prüfen der E-Mail
# 3. Bei OK: Cronjob aktivieren (läuft automatisch)
🔧 Konfiguration
Cronjob-Einstellung
// app/Console/Kernel.php
$schedule->command('dhl:update-tracking --days=14 --send-emails')
->dailyAt('06:00')
->withoutOverlapping()
->runInBackground();
Anpassungen
// Andere Uhrzeit
->dailyAt('08:00')
// Nur Werktage
->weekdays()->at('06:00')
// Nur wenn Sendungen vorhanden
->when(function() {
return DhlShipment::active()->count() > 0;
})
📝 Übersetzungen
Neue Übersetzungs-Keys in resources/lang/{de,en,es}/email.php:
'dhl_tracking_subject_multiple' => 'Deine :count Sendungen sind unterwegs'
'dhl_tracking_message_multiple' => 'Deine Bestellung wurde in :count Paketen versendet'
'dhl_tracking_package_label' => 'Paket :number'
✅ Vorteile
| Vorher | Nachher |
|---|---|
| 3 Pakete = 3 E-Mails | 3 Pakete = 1 E-Mail |
| Kunde verwirrt | Kunde hat Überblick |
| Einzelne Tracking-Nummern | Alle Nummern auf einen Blick |
| Manuell testen schwierig | Test-Modus integriert |
| Kein Überblick über Versand | Klare Anzeige in Admin |
🐛 Troubleshooting
Problem: E-Mail wird nicht versendet
# Prüfen ob Sendungen vorhanden
php artisan tinker
>>> Acme\Dhl\Models\DhlShipment::active()->count()
# Prüfen ob E-Mail-Adresse vorhanden
>>> $order = App\Models\ShoppingOrder::find(45078);
>>> $order->shopping_user->email
Problem: Mehrfache E-Mails
# Prüfen welche Sendungen noch keine E-Mail haben
php artisan tinker
>>> Acme\Dhl\Models\DhlShipment::whereNull('tracking_email_sent_at')->count()
Problem: Test-E-Mail kommt nicht an
# Queue prüfen
php artisan queue:work --once
# Logs prüfen
tail -f storage/logs/laravel.log
📞 Support
Bei Fragen zur Implementierung siehe:
/dev/22-01-2026/next-steps.md- Vollständige Dokumentationapp/Console/Commands/DhlUpdateTracking.php- Command-Codeapp/Mail/MailDhlTracking.php- Mail-Klasseresources/views/emails/dhl_tracking.blade.php- E-Mail Template