Never send a message twice; two small composer and sidebar fixes #38

Merged
jcoffey-dev merged 1 commits from fix/send-no-duplicates into main 2026-10-05 20:28:35 +00:00
Owner

Never send twice after a lost reply. When a send's request went out and
no answer came back, the composer said "Send failed" and offered the
draft back; if Stalwart had in fact accepted it, sending the draft again
delivered it twice. Each send now carries its own Message-ID (RFC 5322
§3.6.4), kept on the draft if it comes back, and an unanswered send asks
the server what it did before calling it a failure:

  • submitted (EmailSubmission/query by emailIds, RFC 8621 §7.3): it was
    sent, and the composer says so;
  • created but never submitted: removed from Sent, and the failure stands;
  • not there: the failure stands;
  • the server can't be asked either: the composer says it couldn't
    confirm and to check Sent, instead of a plain "Send failed".

A refusal (4xx) is not checked: the server did not run it. Sending again
a draft that came back asks first, and sends nothing if a message with
its Message-ID already exists. Stalwart expunges submissions after its
hold period, so later on any surviving copy counts as sent.

Also:

  • Suggestions no longer offer an address that is already in To, Cc or
    Bcc while typing in one of the other two.
  • The collapsed sidebar no longer draws a cut-off "FOLDERS": the rule
    hiding section headings lost to a later one of the same weight.

New strings: 3, in all ten catalogs (1633 -> 1636, no new fallbacks).

Tests: 12 new (send-no-duplicates, recipient-exclude); full suite 1469 passed; typecheck clean; i18n literals clean.

Never send twice after a lost reply. When a send's request went out and no answer came back, the composer said "Send failed" and offered the draft back; if Stalwart had in fact accepted it, sending the draft again delivered it twice. Each send now carries its own Message-ID (RFC 5322 §3.6.4), kept on the draft if it comes back, and an unanswered send asks the server what it did before calling it a failure: - submitted (EmailSubmission/query by emailIds, RFC 8621 §7.3): it was sent, and the composer says so; - created but never submitted: removed from Sent, and the failure stands; - not there: the failure stands; - the server can't be asked either: the composer says it couldn't confirm and to check Sent, instead of a plain "Send failed". A refusal (4xx) is not checked: the server did not run it. Sending again a draft that came back asks first, and sends nothing if a message with its Message-ID already exists. Stalwart expunges submissions after its hold period, so later on any surviving copy counts as sent. Also: - Suggestions no longer offer an address that is already in To, Cc or Bcc while typing in one of the other two. - The collapsed sidebar no longer draws a cut-off "FOLDERS": the rule hiding section headings lost to a later one of the same weight. New strings: 3, in all ten catalogs (1633 -> 1636, no new fallbacks). Tests: 12 new (send-no-duplicates, recipient-exclude); full suite 1469 passed; typecheck clean; i18n literals clean.
jcoffey-dev added 1 commit 2026-10-05 19:38:11 +00:00
Never send a message twice; two small composer and sidebar fixes
ci / github (pull_request) Skipped
ci / version (pull_request) Skipped
ci / node (pull_request) Successful in 3m4s
ci / publish (pull_request) Skipped
ci / docker-build (pull_request) Successful in 51s
f8d282e714
Never send twice after a lost reply. When a send's request went out and
no answer came back, the composer said "Send failed" and offered the
draft back; if Stalwart had in fact accepted it, sending the draft again
delivered it twice. Each send now carries its own Message-ID (RFC 5322
§3.6.4), kept on the draft if it comes back, and an unanswered send asks
the server what it did before calling it a failure:

- submitted (EmailSubmission/query by emailIds, RFC 8621 §7.3): it was
  sent, and the composer says so;
- created but never submitted: removed from Sent, and the failure stands;
- not there: the failure stands;
- the server can't be asked either: the composer says it couldn't
  confirm and to check Sent, instead of a plain "Send failed".

A refusal (4xx) is not checked: the server did not run it. Sending again
a draft that came back asks first, and sends nothing if a message with
its Message-ID already exists. Stalwart expunges submissions after its
hold period, so later on any surviving copy counts as sent.

Also:
- Suggestions no longer offer an address that is already in To, Cc or
  Bcc while typing in one of the other two.
- The collapsed sidebar no longer draws a cut-off "FOLDERS": the rule
  hiding section headings lost to a later one of the same weight.

New strings: 3, in all ten catalogs (1633 -> 1636, no new fallbacks).
jcoffey-dev merged commit 20c32ed73c into main 2026-10-05 20:28:35 +00:00
jcoffey-dev deleted branch fix/send-no-duplicates 2026-10-05 20:28:35 +00:00
Sign in to join this conversation.