Fix email poll: search all recent emails (not just UNSEEN) on manual trigger

The manual "Jetzt abrufen" button now runs synchronously and searches all
emails from the last 30 days instead of only unread ones. This fixes the
issue where already-read emails in IMAP were invisible to the poll task.
Duplicate detection (by sender+date+subject) prevents re-imports.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
SysAdmin Agent
2026-03-11 21:00:50 +00:00
parent c3c6755027
commit 96204c04dd
2 changed files with 37 additions and 20 deletions

View File

@@ -689,18 +689,22 @@ def email_eingang_detail(request, pk):
@login_required
def email_eingang_poll_trigger(request):
"""Löst den IMAP-Poll-Task manuell aus (für Tests und manuelle Verarbeitung)."""
"""Löst den IMAP-Poll manuell aus sucht alle E-Mails der letzten 30 Tage."""
if request.method == "POST":
from stiftung.tasks import poll_destinataer_emails
try:
task = poll_destinataer_emails.delay()
messages.success(
request,
f"E-Mail-Abruf wurde gestartet (Task-ID: {task.id}). "
"Bitte Seite in ca. 30 Sekunden neu laden.",
)
# Synchron ausführen für sofortiges Feedback; sucht auch bereits
# gelesene E-Mails der letzten 30 Tage (Duplikate werden übersprungen).
result = poll_destinataer_emails.apply(kwargs={"search_all_recent_days": 30}).get(timeout=60)
processed = result.get("processed", 0) if isinstance(result, dict) else 0
if result and result.get("status") == "skipped":
messages.warning(request, "IMAP ist nicht konfiguriert. Bitte Einstellungen unter Administration → E-Mail / IMAP prüfen.")
elif processed > 0:
messages.success(request, f"{processed} neue E-Mail(s) importiert.")
else:
messages.info(request, "Keine neuen E-Mails gefunden.")
except Exception as exc:
messages.error(request, f"Fehler beim Starten des Tasks: {exc}")
messages.error(request, f"Fehler beim E-Mail-Abruf: {exc}")
return redirect("stiftung:email_eingang_list")