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:
@@ -529,6 +529,8 @@
|
||||
"secNone": "keine",
|
||||
"secNoneWarn": "Ohne Verschlüsselung gehen Benutzername und Passwort im Klartext über das Netz. Nur sinnvoll, wenn der Mailserver auf demselben Rechner läuft.",
|
||||
"addSender": "Absender zuordnen",
|
||||
"edit": "Postfach bearbeiten"
|
||||
"edit": "Postfach bearbeiten",
|
||||
"skippedTitle": "Diese Mails wurden übergangen",
|
||||
"skippedHint": "Für sie passt keine Absender-Zuordnung. Trag einen Teil der Adresse oder des Betreffs unten ein, dann werden sie beim nächsten Abruf übernommen."
|
||||
}
|
||||
}
|
||||
|
||||
@@ -529,6 +529,8 @@
|
||||
"secNone": "none",
|
||||
"secNoneWarn": "Without encryption the username and password travel in clear text. Only sensible when the mail server runs on the same machine.",
|
||||
"addSender": "Map sender",
|
||||
"edit": "Edit mailbox"
|
||||
"edit": "Edit mailbox",
|
||||
"skippedTitle": "These emails were skipped",
|
||||
"skippedHint": "No sender mapping matched them. Enter part of the address or the subject below and they will be picked up on the next fetch."
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,6 +32,9 @@ export default function Postfaecher() {
|
||||
const [ordner, setOrdner] = useState(null); // Ergebnis des Verbindungstests
|
||||
const [absender, setAbsender] = useState({});
|
||||
const [busy, setBusy] = useState(false);
|
||||
// Was beim letzten Abruf durchgefallen ist – beim Einrichten die einzige
|
||||
// Möglichkeit zu sehen, was in den Absender-Filter gehört.
|
||||
const [uebergangen, setUebergangen] = useState([]);
|
||||
|
||||
async function laden() {
|
||||
try {
|
||||
@@ -85,6 +88,7 @@ export default function Postfaecher() {
|
||||
try {
|
||||
const r = await api.fetchMailSource(quelle.id);
|
||||
toast(t("mailbox.fetched", { neu: r.neu, unklar: r.unklar }));
|
||||
setUebergangen(r.ohne_zuordnung || []);
|
||||
laden();
|
||||
} catch (e) {
|
||||
toast(e.message, "error");
|
||||
@@ -134,6 +138,17 @@ export default function Postfaecher() {
|
||||
}).join(" · ")}
|
||||
</div>
|
||||
<SenderForm konten={konten} onAdd={(d) => absenderAnlegen(q, d)} t={t} />
|
||||
{uebergangen.length > 0 && (
|
||||
<div className="alert" style={{ display: "block", marginTop: "var(--sp-2)" }}>
|
||||
<strong className="small">{t("mailbox.skippedTitle")}</strong>
|
||||
<p className="muted small">{t("mailbox.skippedHint")}</p>
|
||||
<ul className="muted small" style={{ paddingLeft: "1.2em", margin: 0 }}>
|
||||
{uebergangen.map((m, i) => (
|
||||
<li key={i} className="selectable">{m.from} — {m.subject}</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
)}
|
||||
<div className="mail-actions">
|
||||
<button className="btn sm" disabled={busy} onClick={() => testen(q)}>{t("mailbox.test")}</button>
|
||||
<button className="btn sm primary" disabled={busy} onClick={() => abrufen(q)}>{t("mailbox.fetchNow")}</button>
|
||||
|
||||
Reference in New Issue
Block a user