Print added-on dates in local time; add List-Id (1.5.2) #13

Merged
joeyr merged 1 commit from fix/list-id-and-local-dates into main 2026-10-05 22:37:18 -05:00
Owner

Two things found by sending a real newsletter into a local Mailpit and scoring it with SpamAssassin offline (no email left the machine).

  • "Added on" showed tomorrow's date for evening additions: Jellyfin's dates are UTC and were printed as is. template/builder.go now formats them with Local(), which the container's TZ sets. The new test swaps time.Local, since tests run in UTC.
  • LIST_PARTIAL (+1.0): SpamAssassin scores a List-Unsubscribe without a List-Id. smtp/mime_message.go now adds List-Id: Jellyfin newsletter <jellyfin-newsletter.<sender domain>> beside it. Local score: 0 (the old upstream format scored 3.2).
  • VERSION 1.5.2, CHANGELOG, CLAUDE.md.

🤖 Generated with Claude Code

Two things found by sending a real newsletter into a local Mailpit and scoring it with SpamAssassin offline (no email left the machine). - **"Added on" showed tomorrow's date** for evening additions: Jellyfin's dates are UTC and were printed as is. `template/builder.go` now formats them with `Local()`, which the container's `TZ` sets. The new test swaps `time.Local`, since tests run in UTC. - **LIST_PARTIAL (+1.0):** SpamAssassin scores a `List-Unsubscribe` without a `List-Id`. `smtp/mime_message.go` now adds `List-Id: Jellyfin newsletter <jellyfin-newsletter.<sender domain>>` beside it. Local score: 0 (the old upstream format scored 3.2). - VERSION 1.5.2, CHANGELOG, CLAUDE.md. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Print added-on dates in local time; add List-Id (1.5.2)
All checks were successful
CI / gate (pull_request) Successful in 1m1s
CI / lint (pull_request) Successful in 55s
CI / image (pull_request) Has been skipped
6bad245e7d
Jellyfin's DateCreated is UTC and the template formatted it as is, so a
movie added at 9 PM Central showed "Added on" the next day. Movie and
series dates are now converted with Local(), which the container's TZ
sets. The new test swaps time.Local, since tests run in UTC.

A local SpamAssassin run on a real newsletter captured in Mailpit gave
LIST_PARTIAL (+1.0) for a List-Unsubscribe without a List-Id. The
message now carries both, the List-Id named after the sender's domain
(RFC 2919), and scores 0 (1.1.0's message scored 3.2: MISSING_DATE,
MIME_HTML_ONLY, MSGID_FROM_MTA_HEADER). Neither header is sent without
an unsubscribe address.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
joeyr merged commit 2443a362e4 into main 2026-10-05 22:37:18 -05:00
joeyr deleted branch fix/list-id-and-local-dates 2026-10-05 22:37:18 -05:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
joeyr/jellyfin-newsletter!13
No description provided.