feat: Weitergeleitete Bank-Mails erkennen und Uebergangenes zeigen
Wer Bank-Mails in ein Sammelpostfach weiterleitet, hat im From je nach Methode die eigene Adresse stehen. Geprueft werden deshalb auch Reply-To, Return-Path, Sender und X-Forwarded-For – bei automatischer Weiterleitung bleibt der Originalabsender dort erhalten. Ausserdem meldet der Abruf jetzt, welche Mails er uebergangen hat, mit Absender und Betreff. Beim Einrichten war das sonst Raten: Man sah nur "3 uebersprungen" und wusste nicht, was in den Filter gehoert. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -213,3 +213,39 @@ def test_verschieben_statt_nur_markieren(admin, fake_imap):
|
||||
|
||||
admin.post(f"/api/mail/sources/{quelle['id']}/fetch")
|
||||
assert server.kopiert and "Belege" in server.kopiert[0][1]
|
||||
|
||||
|
||||
def test_weitergeleitete_mail_wird_am_originalabsender_erkannt(admin, fake_imap, monkeypatch):
|
||||
"""Leitet man Bank-Mails in ein Sammelpostfach weiter, steht die eigene
|
||||
Adresse im ``From``. Der Originalabsender bleibt aber in den
|
||||
Weiterleitungs-Koepfen erhalten – daran muss die Zuordnung greifen."""
|
||||
konto = _konto(admin)
|
||||
quelle = _postfach(admin)
|
||||
admin.post(f"/api/mail/sources/{quelle['id']}/senders", json={
|
||||
"from_contains": "raiffeisen.ch", "account_id": konto["id"]})
|
||||
|
||||
roh = (MUSTER / "raiffeisen_zahlungsstatus.eml").read_bytes()
|
||||
weitergeleitet = roh.replace(
|
||||
b"From: noreply@ebanking.raiffeisen.ch",
|
||||
b"From: ich@gmail.com\nX-Forwarded-For: noreply@ebanking.raiffeisen.ch ich@gmail.com",
|
||||
).replace(b"<raiffeisen-muster-1@", b"<weitergeleitet-1@")
|
||||
|
||||
server = FakeImap([weitergeleitet])
|
||||
monkeypatch.setattr(mail_import, "_verbinden", lambda q: server)
|
||||
assert admin.post(f"/api/mail/sources/{quelle['id']}/fetch").json()["neu"] == 1
|
||||
|
||||
|
||||
def test_uebergangene_mails_nennen_absender_und_betreff(admin, monkeypatch):
|
||||
"""Beim Einrichten muss man sehen, was in den Filter gehoert."""
|
||||
quelle = _postfach(admin)
|
||||
admin.post(f"/api/mail/sources/{quelle['id']}/senders", json={"from_contains": "passt.nie"})
|
||||
# Eigene Message-ID: die Testdatenbank lebt ueber den ganzen Lauf, sonst
|
||||
# gilt die Mail als bereits erfasst und die Zuordnung wird nie geprueft.
|
||||
roh = (MUSTER / "raiffeisen_zahlungsstatus.eml").read_bytes().replace(
|
||||
b"<raiffeisen-muster-1@", b"<ohne-zuordnung-1@")
|
||||
monkeypatch.setattr(mail_import, "_verbinden", lambda q: FakeImap([roh]))
|
||||
|
||||
ergebnis = admin.post(f"/api/mail/sources/{quelle['id']}/fetch").json()
|
||||
assert ergebnis["uebersprungen"] == 1
|
||||
assert "raiffeisen.ch" in ergebnis["ohne_zuordnung"][0]["from"]
|
||||
assert "Zahlungsstatus" in ergebnis["ohne_zuordnung"][0]["subject"]
|
||||
|
||||
Reference in New Issue
Block a user