Files
sharedinbox/LATER.md
T
Thomas GüttlerandClaude Opus 4.7 da383d0957 feat: ManageSieve STARTTLS + clearer TLS-mismatch errors + broader connection test
The "Email filters" screen was failing with WRONG_VERSION_NUMBER because the
ManageSieve client was opening implicit-TLS sockets on port 4190, while RFC
5804 servers (Stalwart, Dovecot, Cyrus) listen plaintext on 4190 and expect
STARTTLS. ManageSieveClient.connect now opens plaintext, reads the capability
greeting, sends STARTTLS, hands the socket to SecureSocket.secure(), and
re-reads capabilities on the encrypted stream.

The same WRONG_VERSION_NUMBER error can hit IMAP/SMTP when the SSL toggle and
the chosen port disagree (e.g. SSL=on with SMTP port 587). New helper
lib/data/imap/tls_error.dart translates that BoringSSL error into a
TlsModeMismatchException naming the host/port and suggesting which port goes
with which TLS mode. connectImap, connectSmtp, and the ManageSieve TLS
upgrade all funnel through rethrowAsTlsHint so the same readable message
reaches the UI regardless of which protocol failed.

ConnectionTestService previously only verified IMAP/JMAP, so SMTP and
ManageSieve misconfig silently passed the "Try connection" button on the
edit-account screen and only surfaced when the user later tried to send
mail or open Email filters. After IMAP succeeds, the service now also
verifies SMTP (always — sending mail requires it) and ManageSieve (only
when manageSieveHost is explicitly set, since the section is collapsed by
default). Failures are prefixed with "SMTP:" or "ManageSieve:" so the
user can tell which leg of the connection is broken.

connectionTestServiceProvider now also watches smtpConnectProvider so the
E2E integration tests' plaintext SMTP override applies to the connection
check as well.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-29 10:31:55 +02:00

2.6 KiB

Later

Are errors written to syncLog ?


Error and Crash reporting to central server.

But this needs a central service at sharedinbox.de

Data will be sent only after confirmation.

The user must decide: send crash report, or accept select "I prefer not to send crash report".


Taskfile: Debug logs with start+end timestamp for debugging. Each stdout/stderr in one file. How to get this?


ChangeLog with undo.

Every action should be easily undoable.

Example: I delete an email. An undo should be doable. There are three scenearios: Sync from DB to Server is currently in action (then wait), Sync from DB to server was not done yet, Sync from DB to server was done.


Goal: When an unhandled exception occurs on a real device, show the user the full error text so they can copy and send it.

Plan:

  1. Wrap main() in runZonedGuarded — catches async exceptions that escape Flutter's framework (e.g. in isolates, timers, stream callbacks).

  2. Install FlutterError.onError — catches widget build errors, assertion failures, and other framework errors.

  3. Show a full-screen error dialog — when an exception is caught, call a global function that uses a NavigatorKey to push an error screen on top of whatever is showing. The screen shows:

    • The exception message
    • The stack trace (scrollable)
    • A "Copy to clipboard" button (Clipboard.setData)
    • A "Dismiss" button
  4. Keep it always-on since you want manual reporting from real users.

Key files to change:

  • lib/main.dart — add runZonedGuarded, FlutterError.onError, navigatorKey
  • lib/ui/widgets/crash_screen.dart — new error display widget

Implement thread-view.

First create a plan.

For JMAP this is easy.

But for IMAP?

Threads should be synced to the DB, too. Use JMAP as an example. Then think about getting this data structure from imap.


docs


Thread view (group by References / In-Reply-To)


mail-loop.com (anstatt shared inbox).



full-sync: Imaging the sync got out-of-sync somehow. Provide a way via UI to force a sync. First create a plan. Avoid downloading big bodies/attachments again.


mailcoach.de


Try Qwen, vscode plugin


After Try Connection, show some matching icon next to the text.



Test with a Fastmail account


scripts/check_coverage.dart reduce files in _excluded.


Renovate: Is there a way to run it outside Github Actions? On cli?


Write test which fails, when _excluded contains unknown files.


Thread view (group by References / In-Reply-To)

Search (IMAP SEARCH command)


List-Unsubscribe email header --> show button.