@bobfrankston/rmfmail 1.2.290 → 1.2.291
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.commitmsg +26 -34
- package/client/android-bootstrap.bundle.js +11 -0
- package/client/android-bootstrap.bundle.js.map +2 -2
- package/client/app.bundle.js +1 -1
- package/client/app.bundle.js.map +2 -2
- package/client/components/message-viewer.js +5 -1
- package/client/components/message-viewer.js.map +1 -1
- package/client/components/message-viewer.ts +6 -2
- package/npmchanges.md +42 -0
- package/package.json +5 -5
- package/packages/mailx-imap/package-lock.json +2 -2
- package/packages/mailx-imap/package.json +1 -1
- package/packages/mailx-settings/package.json +1 -1
- package/packages/mailx-store/package.json +1 -1
- package/packages/mailx-store/store.d.ts.map +1 -1
- package/packages/mailx-store/store.js +15 -5
- package/packages/mailx-store/store.js.map +1 -1
- package/packages/mailx-store/store.ts +15 -5
- package/packages/mailx-store-web/package.json +1 -1
- package/packages/mailx-types/package.json +1 -1
- package/packages/mailx-types/trust.d.ts +11 -0
- package/packages/mailx-types/trust.d.ts.map +1 -1
- package/packages/mailx-types/trust.js +18 -0
- package/packages/mailx-types/trust.js.map +1 -1
- package/packages/mailx-types/trust.ts +29 -0
- /package/packages/mailx-imap/{node_modules.npmglobalize-stash-27100 → node_modules.npmglobalize-stash-27960}/.package-lock.json +0 -0
package/.commitmsg
CHANGED
|
@@ -1,39 +1,31 @@
|
|
|
1
|
-
|
|
1
|
+
An approved sender, proved, says nothing at all
|
|
2
2
|
|
|
3
|
-
Bob 2026-08-28
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
before acting on it / Links and attachments here should not be opened".
|
|
3
|
+
Bob 2026-08-28, having just clicked "Always: *@icecer.com" on a conference call
|
|
4
|
+
for papers that still showed a bulk-mail note: "I accepted the server so
|
|
5
|
+
shouldn't this be considered safe?" Yes — and this is the half of C165 that was
|
|
6
|
+
still open. `allowlist.jsonc` has been the approved-sender store all along, and
|
|
7
|
+
nothing consulted it when computing trust.
|
|
9
8
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
Unscored rules (no X-Spam-Report) leave the sum unknown, and unknown stays
|
|
17
|
-
cautious.
|
|
9
|
+
`assessMessageTrust` and `spamScoreOf` now take `senderTrusted`, and store.ts
|
|
10
|
+
fills it from the sender and domain lists the reader maintains. When the sender
|
|
11
|
+
is approved AND proved AND nothing accuses it of forgery, the server-spam
|
|
12
|
+
finding is not rendered at all and the score chip goes with it: the score
|
|
13
|
+
answers "is this bulk", the reader has already answered "is it wanted", and
|
|
14
|
+
repeating the first after the second is how a banner becomes furniture.
|
|
18
15
|
|
|
19
|
-
|
|
20
|
-
sender across the store:
|
|
16
|
+
Three boundaries, deliberate:
|
|
21
17
|
|
|
22
|
-
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
18
|
+
- **Trust never silences forgery evidence.** SPF_FAIL, a DMARC failure, a
|
|
19
|
+
FORGED_* rule, self-spoof, relay-auth mismatch — all still render, at full
|
|
20
|
+
severity, on a trusted sender.
|
|
21
|
+
- **Trust counts only where the sender is PROVED** (DMARC, DKIM_VALID_AU, or
|
|
22
|
+
ALL_TRUSTED). Otherwise the approved-sender list would be a switch a forger
|
|
23
|
+
flips by typing a trusted address into From. A trusted address that cannot be
|
|
24
|
+
proved now gets a SHARPER warning than an untrusted one: "This claims to be a
|
|
25
|
+
sender you trust, but nothing proves it is."
|
|
26
|
+
- **senderTrusted is narrower than allowRemote.** The recipient-alias list says
|
|
27
|
+
mail reached an address of the reader's, which permits images; it is not a
|
|
28
|
+
statement about who sent it, and the trust banner asks about the sender.
|
|
32
29
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
sender is now almost entirely content-scam rules: ADVANCE_FEE, DEAR_BENEFICIARY,
|
|
36
|
-
KAM_CRIM, UNDISC_MONEY, BITCOIN_DIRECT. The two false positives left in that
|
|
37
|
-
set — a Substack news digest about displacement tripping KAM_CRIM, a Qatar
|
|
38
|
-
Airways statement tripping BITCOIN_DIRECT — are exactly what sender trust is
|
|
39
|
-
for, and are deliberately NOT being fixed by inventing more rule exceptions.
|
|
30
|
+
The measurement is unchanged — spamScoreOf still reports the score, kind and
|
|
31
|
+
reasons, with `trusted: true` alongside. Only the display goes.
|
|
@@ -2350,6 +2350,9 @@ function serverSpamVerdict(input) {
|
|
|
2350
2350
|
const a = analyzeServerSpam(input);
|
|
2351
2351
|
if (!a || !a.flagged)
|
|
2352
2352
|
return null;
|
|
2353
|
+
const trustedAndProved = input.senderTrusted && a.proved;
|
|
2354
|
+
if (trustedAndProved && a.kind !== "forgery" && !a.authFailures.length)
|
|
2355
|
+
return null;
|
|
2353
2356
|
const numbers = Number.isFinite(a.score) && Number.isFinite(a.threshold) ? `SpamAssassin score ${a.score} of ${a.threshold}` : "flagged by SpamAssassin";
|
|
2354
2357
|
const why = a.reasons.length ? ` \u2014 ${a.reasons.join("; ")}` : "";
|
|
2355
2358
|
const bayes = a.bayesHam ? "; your own trained filter puts it at 0-1% spam (BAYES_00)" : "";
|
|
@@ -2375,6 +2378,13 @@ function serverSpamVerdict(input) {
|
|
|
2375
2378
|
detail: `${numbers}${why}${bayes}`
|
|
2376
2379
|
};
|
|
2377
2380
|
const proof = a.proved ? `${provedNote(a)} ` : "";
|
|
2381
|
+
if (input.senderTrusted && !a.proved)
|
|
2382
|
+
return {
|
|
2383
|
+
id: "server-spam-verdict",
|
|
2384
|
+
severity: "caution",
|
|
2385
|
+
text: "This claims to be a sender you trust, but nothing proves it is.",
|
|
2386
|
+
detail: `No DMARC pass, no valid signature from the sending domain, and it passed through hosts your server does not trust. ${numbers}${why}`
|
|
2387
|
+
};
|
|
2378
2388
|
return {
|
|
2379
2389
|
id: "server-spam-verdict",
|
|
2380
2390
|
severity: "caution",
|
|
@@ -2534,6 +2544,7 @@ function spamScoreOf(input) {
|
|
|
2534
2544
|
kind: a.kind,
|
|
2535
2545
|
proved: a.proved,
|
|
2536
2546
|
provedBy: a.provedBy,
|
|
2547
|
+
trusted: !!input.senderTrusted && a.proved && a.kind !== "forgery" && !a.authFailures.length,
|
|
2537
2548
|
reasons: a.reasons
|
|
2538
2549
|
};
|
|
2539
2550
|
}
|