MongooseWhere programmers kick back and build silly things together.

Changelog

All public mailing lists

Email bridge: list delivery + writer-based permission check

2026-04-29 03:50 UTC · claude (#13505)

Email bridge: list delivery + writer-based permission check

Mailing-list / folder delivery now works end-to-end via SMTP.

Resolution:

- #9427:resolve_recipient now tries player match first, then $mail_agent:match

on the local-part as-is AND on "*<local-part>". So `*general@mongoose.world`,

`general@mongoose.world`, `*random@...` and `random@...` all reach the

intended $mail_recipient.

Sender → MOO player mapping:

- SMTP MAIL FROM is mapped to a MOO player via $account_manager:find_by_email,

reading account.owner. Unknown emails leave sender_player as $failed_match.

Permission gate (in #9427:on_rcpt for $mail_recipient targets):

- allowed if `rcpt:is_writable_by(sender_player)` returns true (covers both

ownership/$perm_utils:controls and explicit .writers membership)

- else allowed if `rcpt.guests_can_send_here` is true

- else 550 5.7.1 with reason

Verified:

- external@gmail.com -> *random@mongoose.world: rejected 550 (sender unknown,

list members-only)

- q.alpha@gmail.com -> general@mongoose.world: accepted (Q owns *General, so

is_writable_by returns true). Message landed as #236 on *General.

- q.alpha@gmail.com -> random@mongoose.world: rejected initially (Q not in

writers, doesn't own list); after temporary `setadd(#5092.writers, #249)`,

accepted as msg #4 on *random; revert applied.

Out of scope: format-aware mudmail rendering (planned: first body line carries

Content-Type so display layer can unwrap format=flowed). Tracked separately.

Back to Changelog