Count a catch-all address as the user's only for a mail it arrived by

76bf97c8 made every address at a catch-all domain the account's own.
A catch-all catches what has no mailbox, and on a shared domain other
people have one: with shop.test declared, anna@shop.test was dropped
from a reply-all, a reply to her mail could open with her address in
From, and her mail was read as the user's own sent mail.

OwnAddressHelper answers per message instead:

  caughtRecipients()  the catch-all addresses in Delivered-To,
                      X-Original-To or Envelope-To; only where the server
                      left none, those in To and Cc
  sentByAccount()     an alias in From, or a catch-all address in From
                      on a message filed under Sent or Drafts
  forMessage()        the aliases plus caughtRecipients()

ReplyFromResolver and ReplyDraftBuilder use it, and Account::ownsAddress()
is gone with its one caller.

Invitations use it too, which they did not before at all: an invite to
yo@shop.test named no address the account knew, so the card had no "me",
no answer buttons, and the event was treated as naming nobody here
(InviteReader, EventReconciler, EventProposer). The reply already goes
out from the attendee address.

With no delivery header and two catch-all addresses in To, both are
still taken for the user's; the docs say so.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Paul LütznerandClaude Opus 5.5 committed 2026-10-13 12:52:31 +02:00
1 parent f954c4d69d
commit cadab57a9b
14 files changed
+556 -91

No files matched your search

+10 -1
View File
@@ -226,9 +226,18 @@ Smith". The From selector shows the same name the mail goes out with.
If your provider delivers **every** address at a domain to this mailbox, add the domain under
**Catch-all domains**. plMail then treats any address at that domain as yours for answering: a
reply to mail sent to `anything@example.com` goes out from `anything@example.com`, with the
account's name and signature, and you are left out of your own reply-all. No alias has to be added
account's name and signature, and you are left out of your own reply-all. A meeting invitation sent
to such an address is yours to answer, and the answer goes back from it. No alias has to be added
first, and nothing changes for mail that arrives.
**Not every address at the domain is treated as you.** A catch-all catches what has no mailbox of
its own, and on a family or company domain other people have one: `anna@example.com` is at your
catch-all domain and is somebody else. So an address counts as yours only for a mail it reached you
by — the address your server recorded delivering it to, or, where the server recorded none, the
addresses at that domain in To and Cc. Anna stays in your reply-all, her mail is answered to her
rather than as her, and an invitation naming her is not offered to you. Where a mail names both of
you and carries no delivery record, plMail cannot tell which was yours and treats both as you.
Three things it does not do. It is one domain exactly — `example.com` does not cover
`mail.example.com`. It applies to replies and forwards; a new message is still sent from an address
on the list above. And it is not offered for Gmail or Outlook accounts, which send only as addresses