Linus Rath
cf0eb03c4a
feat: show the sender's BIMI logo as the sender icon when the message passes DMARC
...
Stalwart does no BIMI, so sender icons were only ever favicons, which
anyone controls for any domain. The webmail server now does the
receiver side itself at /api/bimi, and avatars ask it only for
messages whose own Authentication-Results say dmarc=pass for the exact
From domain.
- `lib/bimi/`: DMARC policy check (quarantine or reject, pct=100, the
parent domain's sp and p for subdomains), the assertion record with
fallback to the parent domain, mark certificate validation (chain to
pinned DigiCert, GlobalSign and SSL.com VMC roots, BIMI key purpose,
validity, SAN, SCTs present, CRL revocation, logo from the logotype
extension), SVG Tiny PS checks and rendering to PNG, caching
- logos backed only by the DNS record show by default; the admin
setting "Require a mark certificate" (`BIMI_REQUIRE_CERTIFICATE`)
limits them to VMC and CMC backed ones
- a check mark beside the sender's name for certificate-backed logos
- avatars try contact photo, BIMI logo, plugin avatar, favicon; the
sender warning shield still wins, and logos follow the sender icons
setting and the no-third-party-traffic mode
- the two-label public suffix list moved to `lib/root-domain.ts`
SCT signatures are not verified and only the default selector is used.
2026-10-30 00:12:24 +01:00
..
2026-10-30 00:12:24 +01:00
2026-10-30 00:12:24 +01:00
2026-10-29 20:47:18 +01:00
2026-10-30 00:12:24 +01:00
2026-10-20 15:16:05 +02:00
2026-10-28 06:28:02 +01:00
2026-10-28 11:10:56 +01:00
2026-10-29 12:26:04 +01:00
2026-10-28 07:17:16 +01:00
2026-10-26 14:58:31 +01:00
2026-10-29 21:13:36 +01:00
2026-10-29 17:53:46 +01:00
2026-10-29 20:47:18 +01:00
2026-10-28 04:57:09 +01:00
2026-10-28 08:07:55 +01:00
2026-10-29 20:27:00 +01:00
2026-10-26 14:52:04 +01:00
2026-10-28 05:20:37 +01:00
2026-10-28 09:08:44 +01:00
2026-10-26 20:35:53 +01:00
2026-10-28 03:53:56 +01:00
2026-10-26 11:48:38 +01:00
2026-10-28 09:55:39 +01:00
2026-10-28 03:42:19 +01:00
2026-10-28 02:19:06 +01:00
2026-10-29 17:53:44 +01:00
2026-10-28 04:30:32 +01:00
2026-08-25 19:16:20 +02:00
2026-10-29 00:01:13 +01:00
2026-10-29 17:53:32 +01:00
2026-10-29 17:53:32 +01:00
2026-10-18 14:39:59 +02:00
2026-10-09 10:54:38 +02:00
2026-10-16 05:46:46 +02:00
2026-10-05 10:36:20 +02:00
2026-10-27 10:31:54 +01:00
2026-10-13 13:36:51 +02:00
2026-10-15 00:12:59 +02:00
2026-10-29 17:53:57 +01:00
2026-10-29 18:58:11 +01:00
2026-10-28 12:34:27 +01:00
2026-10-16 20:48:28 +02:00
2026-10-26 11:22:10 +01:00
2026-10-19 01:32:30 +02:00
2026-06-19 12:31:07 +02:00
2026-09-19 00:53:53 +02:00
2026-10-29 19:38:45 +01:00
2026-10-29 20:06:16 +01:00
2026-10-29 20:24:27 +01:00
2026-08-16 21:18:57 +02:00
2026-10-02 22:56:16 +02:00
2026-10-05 23:09:48 +02:00
2026-09-03 22:12:15 -07:00
2026-10-17 19:17:50 +02:00
2026-10-26 15:15:58 +01:00
2026-10-26 12:25:32 +01:00
2026-10-29 14:20:44 +01:00
2026-10-12 08:35:08 +02:00
2026-10-28 21:08:20 +01:00
2026-09-09 18:27:01 +02:00
2026-10-29 17:53:34 +01:00
2026-10-15 22:31:07 +02:00
2026-10-15 23:54:37 +02:00
2026-09-26 20:47:13 +02:00
2026-10-25 14:17:59 +01:00
2026-09-25 19:41:00 +02:00
2026-10-25 02:09:37 +02:00
2026-10-29 19:38:45 +01:00
2026-10-28 02:00:31 +01:00
2026-10-28 03:53:56 +01:00
2026-10-29 20:47:18 +01:00
2026-10-28 04:28:09 +01:00
2026-09-25 20:05:19 +02:00
2026-09-25 20:05:19 +02:00
2026-10-29 17:53:51 +01:00
2026-09-25 17:35:56 +02:00
2026-04-12 01:10:28 +02:00
2026-09-25 22:16:19 +02:00
2026-10-26 20:01:11 +01:00
2026-10-13 13:36:51 +02:00
2026-09-26 04:32:25 +02:00
2026-10-29 17:53:47 +01:00
2026-10-11 18:04:26 +00:00
2026-10-17 19:17:52 +02:00
2026-10-25 12:39:28 +01:00
2026-08-25 19:36:04 +02:00
2026-09-23 19:41:44 +02:00
2026-10-19 00:54:24 +02:00
2026-10-30 00:12:24 +01:00
2026-10-15 01:17:39 +02:00
2026-10-29 17:53:56 +01:00
2026-09-25 19:24:30 +02:00
2026-05-06 20:07:36 +02:00
2026-10-17 19:17:58 +02:00
2026-09-24 10:00:01 +02:00
2026-10-19 01:04:45 +02:00
2026-10-19 01:32:24 +02:00
2026-10-28 08:07:55 +01:00
2026-08-20 16:49:31 +02:00
2026-09-25 22:16:19 +02:00
2026-09-25 18:37:41 +02:00
2026-10-26 11:22:10 +01:00
2026-10-28 03:51:27 +01:00
2026-10-28 03:35:46 +01:00
2026-10-28 03:44:34 +01:00
2026-10-17 19:18:16 +02:00
2026-10-15 01:03:02 +02:00
2026-08-20 14:21:41 +02:00
2026-10-15 14:50:31 +08:00
2026-10-29 18:28:06 +01:00
2026-10-29 17:53:57 +01:00
2026-10-29 17:53:43 +01:00
2026-09-25 19:30:58 +02:00
2026-09-24 21:15:22 +02:00
2026-05-18 16:01:29 +02:00
2026-10-13 14:53:23 +02:00
2026-10-13 13:36:51 +02:00
2026-10-29 17:53:35 +01:00
2026-08-06 18:44:14 +02:00
2026-07-29 17:18:38 +02:00
2026-09-25 19:24:30 +02:00
2026-10-28 12:50:59 +01:00
2026-09-26 20:24:23 +02:00
2026-10-29 20:47:18 +01:00
2026-09-18 22:16:57 +02:00
2026-09-19 00:53:53 +02:00
2026-09-17 23:54:33 +02:00
2026-09-19 00:53:53 +02:00
2026-02-16 18:51:30 +01:00
2026-10-29 17:53:54 +01:00
2026-10-26 20:35:53 +01:00
2026-10-29 17:53:59 +01:00
2026-10-29 17:53:48 +01:00
2026-06-24 19:32:13 +02:00
2026-10-17 21:01:34 +02:00
2026-09-17 20:55:39 +02:00
2026-09-25 18:37:41 +02:00
2026-10-12 08:35:08 +02:00
2026-10-17 19:18:23 +02:00
2026-10-02 23:04:28 +02:00
2026-10-17 19:18:20 +02:00
2026-10-15 21:50:08 +02:00
2026-07-04 14:52:26 +02:00
2026-10-29 17:53:37 +01:00
2026-10-28 03:48:28 +01:00
2026-10-28 04:30:23 +01:00
2026-08-29 18:11:50 +02:00
2026-10-27 23:03:41 +01:00
2026-10-14 03:58:58 +02:00
2026-10-14 04:05:43 +02:00
2026-10-14 03:50:55 +02:00
2026-10-25 15:22:38 +01:00
2026-10-14 04:05:43 +02:00
2026-10-29 10:25:59 +01:00
2026-10-25 02:24:08 +01:00
2026-10-17 19:18:25 +02:00
2026-10-14 03:04:17 +02:00
2026-10-26 15:15:58 +01:00
2026-10-29 14:11:34 +01:00
2026-10-14 02:21:45 +02:00
2026-10-28 17:02:42 +01:00
2026-10-25 02:18:18 +02:00
2026-10-14 03:39:13 +02:00
2026-10-29 10:03:27 +01:00
2026-10-14 01:47:58 +02:00
2026-10-22 04:14:54 +03:00
2026-10-28 09:48:49 +01:00
2026-10-26 20:35:52 +01:00
2026-10-20 12:23:55 +02:00
2026-10-28 02:19:06 +01:00
2026-10-15 14:31:09 +02:00
2026-10-26 11:22:10 +01:00
2026-06-25 00:25:28 +02:00
2026-10-29 17:53:58 +01:00
2026-04-09 22:13:08 +02:00
2026-10-29 17:53:38 +01:00
2026-10-18 18:23:45 +02:00
2026-10-12 08:35:08 +02:00
2026-09-26 02:48:11 +02:00
2026-09-23 13:40:01 +02:00
2026-09-26 00:25:27 +02:00
2026-10-16 01:41:48 +02:00
2026-10-29 19:38:45 +01:00
2026-10-19 00:07:04 +02:00
2026-09-09 19:27:08 +02:00
2026-10-17 20:31:25 +02:00
2026-08-06 19:19:18 +02:00
2026-10-30 00:12:24 +01:00
2026-10-29 14:34:00 +01:00
2026-10-11 19:50:40 +02:00
2026-09-29 20:15:14 +02:00
2026-10-16 01:41:48 +02:00
2026-08-25 20:09:18 +02:00
2026-10-28 10:35:53 +01:00
2026-10-13 13:36:51 +02:00
2026-10-25 02:15:13 +02:00
2026-10-29 17:53:32 +01:00
2026-05-09 17:37:41 +02:00
2026-10-29 14:35:22 +01:00
2026-10-13 15:55:54 +02:00
2026-10-28 08:58:11 +01:00
2026-10-28 02:00:31 +01:00
2026-09-19 13:32:41 +02:00
2026-10-28 07:34:25 +01:00
2026-10-11 19:41:48 +02:00
2026-10-28 04:00:25 +01:00
2026-10-29 17:53:34 +01:00
2026-10-17 19:17:55 +02:00
2026-09-26 15:31:05 +02:00
2026-05-06 20:07:36 +02:00
2026-08-18 15:48:05 +02:00
2026-10-07 08:26:51 +03:00
2026-10-28 06:13:47 +01:00
2026-10-19 18:41:44 +02:00
2026-10-28 07:34:25 +01:00
2026-08-06 18:23:21 +02:00
2026-09-26 14:36:02 +02:00
2026-10-28 05:02:38 +01:00
2026-09-26 14:36:02 +02:00
2026-10-28 04:30:32 +01:00
2026-08-16 02:19:04 +02:00
2026-10-26 12:26:58 +01:00
2026-10-26 10:14:12 +01:00
2026-10-29 17:53:49 +01:00
2026-09-26 14:15:10 +02:00
2026-10-29 17:53:45 +01:00
2026-10-15 00:41:07 +02:00
2026-10-06 23:29:42 +02:00
2026-10-29 17:53:46 +01:00
2026-10-26 10:14:12 +01:00
2026-10-25 13:13:46 +01:00
2026-08-23 19:44:56 +06:00
2026-10-25 02:09:37 +02:00
2026-09-26 14:41:14 +02:00
2026-10-29 20:06:16 +01:00
2026-10-19 00:54:24 +02:00
2026-05-21 23:35:58 +02:00
2026-10-28 04:30:33 +01:00