diff --git a/README.md b/README.md index cc3a30cd..6f185647 100644 --- a/README.md +++ b/README.md @@ -113,7 +113,7 @@ unreachable, and search runs against your own database rather than someone else' | ![Reading a thread](docs/screenshots/thread.png) | ![Writing a message](docs/screenshots/compose.png) | | **Threaded conversations** — replies collapse into one conversation, newest expanded. | **Compose** — rich text, contact autocomplete, send from any account or alias. | | ![Dark mode](docs/screenshots/inbox-dark.png) | ![Settings](docs/screenshots/settings.png) | -| **Dark mode** — follows your system preference, or pick one and stick with it. | **Settings** — add accounts, reorder them, choose how much history to sync. | +| **Dark mode** — follows your system preference, or pick one and stick with it. | **Settings** — add accounts, choose which one you send from, and see what is wrong when something is. | | ![Filters](docs/screenshots/filters.png) | ![Calendar](docs/screenshots/calendar.png) | | **Filters** — conditions as a tree, restated in plain English, counted against real mail before you save. | **Calendar** — beside the mail on a wide screen, its own page below that. | diff --git a/docs/README.md b/docs/README.md index c70284f4..09ec9997 100644 --- a/docs/README.md +++ b/docs/README.md @@ -25,8 +25,9 @@ mechanism behind it. | Page | What it covers | |---|---| -| [Mail](features/mail.md) | Reading, threads, labels, search and its operators, snooze, attachments, composing, drafts, undo send | +| [Mail](features/mail.md) | Reading, threads, labels, search and its operators, snooze, attachments, composing, signatures, emoji and inline images, scheduled send, read receipts, drafts, undo send | | [Accounts and aliases](features/accounts.md) | Adding Gmail, Outlook and IMAP accounts, sending aliases, per-account settings | +| [Account health](features/health.md) | What is broken and what fixes it, reconnecting an account without losing its mail | | [Filters](features/filters.md) | Condition trees, actions, the plain-English restatement, applying a rule to mail that already arrived | | [Calendar](features/calendar.md) | The four views and the time grid, creating and editing events, recurrence, editing one occurrence, the docked pane | | [Invitations and events from mail](features/calendar-invitations.md) | RSVP, events extracted from invitations and from ordinary prose, proposals, Happening Soon | diff --git a/docs/de/README.md b/docs/de/README.md index bcaddc79..d26fd4cc 100644 --- a/docs/de/README.md +++ b/docs/de/README.md @@ -1,4 +1,4 @@ - + # plMail-Dokumentation @@ -27,8 +27,9 @@ wo der Mechanismus dahinter steht. | Seite | Worum es geht | |---|---| -| [Mail](features/mail.md) | Lesen, Konversationen, Labels, Suche und ihre Operatoren, Zurückstellen, Anhänge, Verfassen, Entwürfe, Senden rückgängig machen | +| [Mail](features/mail.md) | Lesen, Konversationen, Labels, Suche und ihre Operatoren, Zurückstellen, Anhänge, Verfassen, Signaturen, Emoji und eingebettete Bilder, später senden, Lesebestätigungen, Entwürfe, Senden rückgängig machen | | [Konten und Aliase](features/accounts.md) | Gmail-, Outlook- und IMAP-Konten hinzufügen, Absendeadressen, Einstellungen pro Konto | +| [Zustand der Konten](features/health.md) | Was kaputt ist und was es behebt, ein Konto neu verbinden, ohne seine Post zu verlieren | | [Filter](features/filters.md) | Bedingungsbäume, Aktionen, die Rückübersetzung in einen Satz, eine Regel auf bereits eingetroffene Mail anwenden | | [Kalender](features/calendar.md) | Die vier Ansichten und das Zeitraster, Termine anlegen und bearbeiten, Wiederholungen, eine einzelne Termininstanz bearbeiten, der angedockte Bereich | | [Einladungen und Termine aus E-Mails](features/calendar-invitations.md) | Zu- und Absagen, Termine aus Einladungen und aus gewöhnlichem Fließtext, Vorschläge, „Demnächst“ | diff --git a/docs/de/features/accounts.md b/docs/de/features/accounts.md index 1cabde81..241741aa 100644 --- a/docs/de/features/accounts.md +++ b/docs/de/features/accounts.md @@ -1,4 +1,4 @@ - + # Konten und Aliase @@ -62,19 +62,35 @@ eine Einstellungsseite. ## Die Kontenliste -Konten stehen in deiner eigenen Reihenfolge und lassen sich per Ziehen umsortieren. Die -Reihenfolge ist nicht kosmetisch: Das **erste** Konto ist das primäre, und von diesem geht ein -neues Schreibfenster aus. Ein Konto zu entfernen nummeriert den Rest um, die oberste Zeile ist -also immer die primäre. +Konten stehen in deiner eigenen Reihenfolge und lassen sich per Ziehen umsortieren. **Die +Reihenfolge ist kosmetisch.** Sie bestimmt, wo eine Zeile steht, und sonst nichts. + +Aus welchem Konto eine neue Nachricht verfasst wird, ist eine eigene, gespeicherte Wahl: das +primäre Konto, in seiner Zeile mit **Primär** ausgezeichnet und über **Als primär festlegen** in +jeder anderen Zeile bestimmt. Früher war das dasselbe — die oberste Zeile war die primäre —, +sodass das Aufräumen der Liste stillschweigend die Absenderadresse änderte, ohne dass auf dem +Bildschirm etwas davon stand. Zwei Entscheidungen, zwei Bedienelemente. + +Der farbige Punkt neben jedem Konto ist dessen **Kennfarbe**: derselbe Ton, den die Nachrichten +dieses Kontos in den gemeinsamen Listen tragen, damit sich zwei Konten dort auf einen Blick +unterscheiden lassen. Sie wird beim Hinzufügen vergeben und wandert danach nie wieder — die Liste +umzusortieren färbt nichts um —, und sie ist **keine** Statusanzeige. Ob ein Konto tatsächlich +funktioniert, beantwortet [Zustand der Konten](health.md), die einzige Stelle, die den Anspruch +erhebt, das zu beantworten. Jede Zeile bietet: | Bedienelement | Wirkung | |---|---| +| **Als primär festlegen** | Verfasst neue Nachrichten künftig aus diesem Konto — in jeder Zeile außer der primären | | **Konto deaktivieren** / **Konto aktivieren** | Hält die Synchronisierung an oder nimmt sie wieder auf, ohne etwas zu löschen | | **Konto bearbeiten** | Servereinstellungen und Passwort — nur bei Konten mit Passwort | | **Konto entfernen** | Löscht das Konto und jede daraus synchronisierte Nachricht | +Die Kennzeichnung als primär geht nie verloren. Wird das Konto entfernt, das sie trug, geht sie an +ein anderes, und das allererste Konto ist primär, weil es nichts gibt, von dem es sie erben +könnte. + Ein Konto zu entfernen löscht dessen synchronisierte Mail aus plMails Datenbank und beim Anbieter nichts. Außerdem wird versucht, jede Push-Registrierung abzubauen, die es hatte, damit nichts zurückbleibt, das auf ein Konto zeigt, das es nicht mehr gibt. @@ -158,10 +174,25 @@ Einen Vorbehalt nennt plMail auf der Seite selbst: **Outlook versendet unabhäng Wahl hier immer über den primären Alias des Kontos.** Das ist Microsofts Verhalten, geändert wird es in deinen Microsoft-Kontoeinstellungen und nicht hier. +### Was jede Adresse standardmäßig tut + +Zwei Einstellungen hängen an der Aliasliste statt am Konto, denn sie sind Eigenschaften der +Adresse, die andere zu sehen bekommen, und nicht des Postfachs, in dem sie wohnt. + +**Standards fürs Schreiben**, unter der Aliasliste auf derselben Seite, trägt derzeit ein +Bedienelement je Adresse: was diese Adresse tut, wenn ein Absender darüber informiert werden will, +dass seine Mail gelesen wurde. Die Vorgabe ist **Nie senden**, und es lohnt sich, das zu +verstehen, bevor man daran dreht — siehe den Abschnitt *Lesebestätigungen* unter [Mail](mail.md). + +**Einstellungen → Signaturen** ist ein eigener Abschnitt. Das Konto hat eine Signatur, und jede +seiner Adressen kann sie entweder erben, ersetzen oder bewusst ohne Signatur senden. Die drei +Zustände und was das Schreibfenster daraus macht, stehen unter [Verfassen](mail.md#signatur). + ## Wo du weiterliest - [IMAP und SMTP](../providers/imap-smtp.md), [Google](../providers/google.md), [Microsoft](../providers/microsoft.md) — die genaue Einrichtung auf Anbieterseite. +- [Zustand der Konten](health.md) — was kaputt ist und welche Reparaturen deine Mail behalten. - [Mail-Ingest](../internals/mail-ingest.md) — was ein Synchronisierungslauf tatsächlich tut. - [Konfigurationsreferenz](../install/configuration.md) — `APP_PUBLIC_URL`, die OAuth-Variablen und die für Pub/Sub. @@ -169,9 +200,15 @@ wird es in deinen Microsoft-Kontoeinstellungen und nicht hier. ## Fallstricke -**Das erste Konto in der Liste ist das primäre.** Per Ziehen umzusortieren ändert daher, aus -welchem Konto eine neue Nachricht verfasst wird. Es gibt keinen eigenen Knopf „als primär -festlegen“, und es kommt auch keiner — die Reihenfolge *ist* die Einstellung. +**Die Liste umzusortieren ändert nicht mehr, aus welchem Konto du sendest.** Früher war das so, +und eine von einer älteren Version aktualisierte Installation behält das Konto, das im Moment der +Aktualisierung an erster Stelle stand. Geht das Schreibfenster von der falschen Adresse aus, hilft +**Als primär festlegen** beim richtigen Konto — es nach oben zu ziehen tut es nicht. + +**Eine tote Anmeldung heißt nicht, dass das Konto neu hinzugefügt werden muss.** Das kaputte Konto +zu löschen und neu anzulegen ist der Reflex, und er kostet dich jede daraus synchronisierte +Nachricht. **Einstellungen → Zustand der Konten** bietet ein erneutes Verbinden, das das Postfach +behält; siehe [Zustand der Konten](health.md). **Ein großes Postfach braucht seine Zeit, bis es vollständig da ist.** plMail synchronisiert alles, was das Konto hält; es gibt keine Einstellung, die das begrenzt. Die neueste Mail kommt diff --git a/docs/de/features/calendar.md b/docs/de/features/calendar.md index 2e25ec77..af9334dc 100644 --- a/docs/de/features/calendar.md +++ b/docs/de/features/calendar.md @@ -1,4 +1,4 @@ - + # Kalender @@ -86,6 +86,15 @@ Quadratzentimeter groß und hat keinen Platz zu sagen, wo im Tag etwas liegt; un Agenda besteht darin, die leere Zeit zu überspringen — also genau das, was eine Rasterachse zeichnen würde. +**Das Raster wird auf deiner Uhr gezeichnet.** Die Stunden an der Seite, die Stelle, an der die +Linie der aktuellen Zeit sitzt, und die Zeit, die für einen neuen Termin vorgeschlagen wird, wenn du +auf leeren Raum doppelklickst, folgen alle der Zeitzone aus **Einstellungen → Allgemein**. Das ist +dieselbe Zone, gegen die jeder andere Zeitstempel in der App gelesen wird. Trägt ein Kalender eine +eigene Zeitzone, gilt sie für seine Termine, wie eh und je; geändert hat sich der Rückfall, der +früher die Vorstellung des Containers von der Zeit war — UTC —, sodass die Linie der aktuellen Zeit +ein bis zwei Stunden neben ihren eigenen Beschriftungen sitzen konnte und ein neuer Termin für einen +bereits vergangenen Zeitpunkt vorgeschlagen wurde. + Drei Dinge über das Raster sind es wert, gewusst zu werden: - **Das Ganztagsband ist immer da**, auch in einer Woche, in der nichts steht, damit das Raster beim @@ -248,6 +257,11 @@ Kalender lassen sich löschen; das Löschen nimmt jeden Termin darin mit. Einen Kalender auszublenden, blendet ihn überall aus, und zwar einheitlich: die Ansichten, die Anzeige des Nächsten in der Kopfleiste und die Liste *Demnächst* lesen ausschließlich sichtbare +Kalender. Die Ausnahme ist der **Editor**, und zwar mit Absicht: Er listet jeden Kalender auf, der +dir gehört, ausgeblendete mit einem durchgestrichenen Auge neben dem Schloss für Nur-Lesen — denn +eine Kopie einer Besprechung auf einem ausgeblendeten Kalender ist immer noch eine Tatsache über +diese Besprechung. Auf einen solchen zu speichern ist damit eine informierte Wahl und keine Falle +— und ein Speichern, das irgendwo landet, wo du es nicht sehen kannst, sagt das und nennt den Kalender. ## Fallstricke @@ -257,6 +271,13 @@ Kopie in Ruhe“. Die Kopie bleibt, wo sie ist, ist sich mit den geänderten nic erscheint von da an als eigener Eintrag. Um eine Besprechung aus einem Kalender zu nehmen, hak diesen Kalender an und drück **Löschen** — das Löschen wirkt auf genau die angehakten. +**Ein Termin, der auf einem ausgeblendeten Kalender gespeichert wird, taucht in keiner Ansicht +auf.** Der Editor listet ausgeblendete Kalender; die Tages-, Wochen-, Monats- und Agendaansicht tun +es nicht. Das Speichern gelingt also, der Eintrag existiert, und die Besprechung ist nirgends zu +finden, bis der Kalender unter **Einstellungen → Kalender** wieder sichtbar gemacht wird. plMail +bestätigt inzwischen jedes Speichern und nennt den Kalender, wenn es einer ist, den du nicht sehen +kannst — aber diese Bestätigung ist das Einzige, was es dir sagen wird. + **Eine Kopie eines Termins aus der Mail ist immer noch ein Termin aus der Mail.** Eine Besprechung auf einen zweiten Kalender zu legen, schneidet keine der beiden Kopien von der Buchung ab, aus der sie gelesen wurde: Eine spätere Nachricht, die die Besprechung verlegt, verschiebt beide. Wann eine diff --git a/docs/de/features/health.md b/docs/de/features/health.md new file mode 100644 index 00000000..01104895 --- /dev/null +++ b/docs/de/features/health.md @@ -0,0 +1,133 @@ + + +# Zustand der Konten + +**Einstellungen → Zustand der Konten** ist die Seite, die die Frage „warum kommt keine Post mehr?“ +beantwortet — und, wo sie kann, den Knopf anbietet, der es behebt. + +Alles auf dieser Seite war ohnehin bekannt. plMail hält fest, wenn ein Aktualisierungs-Token nicht +mehr funktioniert, wenn die Synchronisierung eines Kalenders immer wieder scheitert, wenn eine +Push-Registrierung verstummt ist, wenn die Verbindung zu einem Dateidienst abgelaufen ist; es hat +dir davon nur nie etwas gezeigt, sodass eine tote Anmeldung wie ein von selbst still gewordenes +Postfach aussah. Diese Seite liest den gespeicherten Zustand zurück. Sie fragt nie nach: Nichts hier +schickt eine Anfrage an einen Anbieter, um herauszufinden, wie es steht — die Seite zu öffnen kostet +also nichts, und ihre Antworten sind so frisch wie der letzte Versuch. + +Ist nichts kaputt, sagt sie das — *Alles funktioniert*, mit einem Satz dazu, dass dies die Seite ist, +die Bescheid gibt, wenn sich das ändert. Keine Wand aus grünen Haken und keine leere Seite. + +## Was sie meldet + +Fünf Dinge können auftauchen, und jedes sagt, was es für deine Post bedeutet, statt wie der Anbieter +es genannt hat: + +| Was | Was es bedeutet | Reparatur | +|---|---|---| +| **Ein Konto braucht eine erneute Anmeldung** | Die gespeicherte Anmeldung funktioniert nicht mehr, also läuft an diesem Konto nichts mehr — keine neue Post, keine Kalendersynchronisierung, keine Filter beim Eintreffen, kein Senden. Bereits geladene Post bleibt unangetastet. | **Konto neu verbinden** | +| **Ein Kalender synchronisiert nicht mehr** | Dieser Kalender zeigt, was er beim letzten funktionierenden Lauf wusste. Änderungen von anderswo kommen nicht an, und deine Änderungen gehen nicht hinaus. | **Jetzt synchronisieren** | +| **Die Sofortzustellung ist aus** | Post kommt weiter an, nur nach Zeitplan statt in dem Moment, in dem sie gesendet wird. Nichts geht verloren, und es eilt nicht. | **Sofortzustellung wieder einschalten** | +| **Eine Verbindung muss erneuert werden** | Anhänge in einem Dateidienst zu speichern und Dateien daraus anzuhängen funktioniert nicht. Deine Post ist davon unberührt. | **Neu verbinden** | +| **Hintergrundaufgaben wurden aufgegeben** | Arbeit, die wiederholt gescheitert ist und beiseitegelegt wurde, damit sie aufhört, es zu versuchen. Meist die Folge eines der anderen Punkte und kein eigener Fehler. | **Wieder einreihen** oder **Verwerfen** | + +Jede Reparatur sagt *vor* dem Drücken, was sie tun wird, und jede sagt, was sie in Ruhe lässt. Wird +eine gedrückt, ändert sich der Knopf, solange sie läuft — eine Reparatur, die untätig aussieht, wird +zweimal gedrückt. + +**Folgen stehen unter ihrer Ursache.** Eine einzige tote Anmeldung kann drei Kalender und +fünfhundert wartende Aufgaben mitreißen. Das ist eine Sache, die zu erledigen ist, und nicht neun — +also stehen die Kalender unter dem Konto, das sie erklärt, und die Zahl in der Kopfleiste zählt +Ursachen statt Symptomen. + +**Die Dringlichkeit richtet sich nach der Folge, nicht danach, wie alarmierend der Fehler klingt.** +Dass die Sofortzustellung auf den Zeitplan zurückfällt, ist ein Hinweis und lässt die Anzeige in der +Kopfleiste bewusst *nicht* aufleuchten: Deine Post kommt an. Eine Seite, die „leicht verzögert“ so +rot malt wie „angehalten“, ist eine Seite, die man zu schließen lernt — und dann bleibt auch das Rot +ungelesen, auf das es ankam. + +Der Fehlertext des Anbieters bleibt erhalten, hinter **Technische Einzelheiten**. Er ist da, wenn du +ihn brauchst, und aus dem Weg, wenn nicht. + +## Ein Konto an Ort und Stelle neu verbinden + +Das ist der Punkt, den man kennen sollte, bevor man ihn braucht. + +Stirbt eine Anmeldung — ein geändertes Passwort, eingeschaltete Zwei-Faktor-Authentifizierung, ein +auf der Sicherheitsseite des Anbieters entzogener Zugriff —, ist der Reflex, das Konto zu löschen und +neu anzulegen. Das funktioniert, und es kostet dich alles: jede synchronisierte Nachricht, jede +Konversation, jedes Label, jede Regel, die darauf zeigte. + +**Konto neu verbinden** ruft die Zustimmungsseite des Anbieters erneut auf und hinterlegt die frische +Anmeldung an genau dem Konto, das du schon hast. Post, Konversationen, Labels, Filter, Aliase, +Kalender und Einstellungen bleiben exakt so, wie sie sind. Es wird nichts erneut geladen und nichts +gelöscht; die Synchronisierung macht schlicht dort weiter, wo sie stehen geblieben ist, und holt in +den nächsten Minuten auf. + +**Es ist über die Identität abgesichert.** Du musst dich als dieselbe Adresse beim selben Anbieter +anmelden. Sich als ein anderes Google-Konto anzumelden — das zweite in der Kontoauswahl, ein Fehler, +den jeder macht — wird **rundheraus abgelehnt**, und es wird nichts verändert. plMail nennt dir, als +welche Adresse du dich tatsächlich angemeldet hast und welche es erwartet hat. Die Adresse +auszutauschen hieße, fremde Post in diese Konversationen einzumischen, ohne Weg zurück. + +## Kalender, die dauerhaft scheitern + +Ein Kalender, dessen Synchronisierung jedes Mal dieselbe Antwort gibt, **wartet jetzt ab**, statt es +ewig weiter zu versuchen: eine Viertelstunde, dann jeweils das Doppelte, gedeckelt auf einen Tag. +Zwei Folgen sind es wert, gewusst zu werden: + +- Ein kaputter Kalender überschwemmt die Protokolle nicht mehr und blockiert nicht mehr den + Durchlauf, hinter dem andere Kalender warten. Vorher wurde ein Kalender, der nicht synchronisieren + konnte, bei jedem Durchlauf erneut versucht, solange er kaputt blieb. +- Nichts wird stummgeschaltet. Das erste Scheitern meldet sich immer, ein Scheitern, das sich + *ändert*, meldet sich immer, und weil die Wartezeit auf einen Tag gedeckelt ist, wird ein Zustand, + der von selbst heilt, binnen eines Tages wieder aufgegriffen. + +**Jetzt synchronisieren** löscht die Wartezeit und bittet den Kalender sofort um einen Lauf. Das +stellt die Arbeit nur in die Warteschlange, statt sie zu erledigen — die Karte sagt daher, die +Synchronisierung sei **gestartet**, und sagt es weiter, bis eine Antwort da ist, auch über ein +Neuladen hinweg und nicht bloß als Einblendung, die man verpassen kann. Kommt die Antwort, sagt die +Karte, ob es geklappt hat, und ein erneutes Scheitern sagt das deutlich, statt wie ein nie gelaufener +Versuch auszusehen. + +## Wo du weiterliest + +- [Konten und Aliase](accounts.md) — Postfächer verbinden und trennen, sofortige Zustellung. +- [Verbundene Kalender](calendar-sync.md) — was eine Kalendersynchronisierung tut und mit welchen + Anbietern. +- [Dateien und Integrationen](integrations.md) — die Verbindungen, die ablaufen können. +- [Fehlersuche](../install/troubleshooting.md) — die Seite des Betreibers: die Warteschlange, die + Protokolle und die Prüfungen, die ein Browser nicht sieht. +- [Administration](admin.md) — Warteschlangen, Worker und die Überwachung, die eine Administration + bekommt. + +## Fallstricke + +**Das erneute Verbinden lehnt eine andere Adresse ab, und das ist die Funktion.** Meldet dich der +Anbieter als das falsche Konto an — eine zweite Google-Identität, die noch eingeloggt ist, eine +private Adresse dort, wo die dienstliche gemeint war —, bricht die Reparatur ab und verändert nichts. +Melde dich zuerst beim Anbieter von dieser Identität ab und versuche es dann erneut. Ein „trotzdem +verwenden“ gibt es nicht. + +**Auch über Anbieter hinweg wird ein erneutes Verbinden abgelehnt.** Dieselbe Adresse bei einem +anderen Anbieter ist ein anderes Postfach, und geprüft wird beides. + +**„Jetzt synchronisieren“ reiht die Synchronisierung ein; es führt sie nicht aus.** Die Seite kommt +mit der Aussage zurück, die Synchronisierung sei gestartet, denn das ist sie, und das Ergebnis landet +Augenblicke später. Sie in der Zwischenzeit noch einmal zu drücken bringt nichts — die Karte sagt +auch ungefragt, was passiert ist. + +**Eine ausgeschaltete Sofortzustellung ist kein Fehler und lässt die Anzeige nicht aufleuchten.** Eine +selbst gehostete Installation ohne öffentlich erreichbare HTTPS-Adresse kann sich für Push überhaupt +nicht registrieren. Post kommt über den Durchlauf alle fünfzehn Minuten, und genau darum ist das ein +Hinweis und keine Warnung. + +**Liegen gebliebene Aufgaben zu verwerfen lässt sich nicht rückgängig machen.** Was sie nicht +erledigt haben, bleibt unerledigt, und nichts wird erneut versucht. **Wieder einreihen** ist der +sichere Weg — was erneut scheitert, landet einfach wieder hier. + +**Liegen gebliebene Aufgaben sind meist ein Symptom.** Hunderte davon bedeuten fast immer eine tote +Anmeldung weiter oben auf der Seite. Behebe zuerst die, reihe die Aufgaben danach wieder ein — sonst +scheitern sie aus demselben Grund und kommen zurück. + +**Die Seite meldet, was zuletzt beobachtet wurde, nicht was in dieser Sekunde gilt.** Sie liest +gespeicherten Zustand und fragt nie nach, ein eben anderswo repariertes Konto bleibt also auf der +Liste, bis es das nächste Mal versucht wird. diff --git a/docs/de/features/mail.md b/docs/de/features/mail.md index ea9cb040..26245287 100644 --- a/docs/de/features/mail.md +++ b/docs/de/features/mail.md @@ -1,4 +1,4 @@ - + # Mail @@ -46,6 +46,25 @@ nach Allgemein geholt, ganz gleich, welcher Massenmail-Header auf der Nachricht den Bereich **Details** einer Nachricht, dann sagt die Zeile **Kategorie**, welche Regel entschieden hat und auf welchen Header oder welche Domain sie angesprungen ist. +## Die Markierung „Neu“ + +Eine Konversation ist **neu**, bis ihre Zeile dir *gezeigt* wurde. Nicht geöffnet — gezeigt. +Scrollst du im Posteingang an etwas vorbei und klickst es nie an, verschwindet die Markierung, denn +es überrascht dich nicht mehr; die Konversation bleibt ungelesen, denn gelesen hast du sie immer +noch nicht. Das sind zwei verschiedene Fragen, und plMail behält beide Antworten. + +Sie erscheint als gefülltes Fähnchen **Neu** neben dem Absender in der Zeile und als stiller Punkt +— ohne Zahl — auf den Kategorie-Tabs des Posteingangs, auf den Labels und Rollen der Seitenleiste +und auf Markiert. Der Punkt bedeutet „hier ist etwas angekommen“, und genau das sagen die +Ungelesen-Zähler daneben nicht. + +Nichts bleibt länger als **24 Stunden** nach seiner letzten Nachricht neu, ob du die Zeile je zu +sehen bekommen hast oder nicht. Eine Markierung, die sich nur abtragen lässt, indem man jede Zeile +anschaut, ist eine Schuld und keine Markierung — also läuft sie von selbst ab. + +Auch Suchergebnisse räumen das Fähnchen ab: Eine Zeile, deren Absender und Betreff du gerade in +einer Trefferliste gelesen hast, ist dir gezeigt worden, in welcher Liste auch immer. + ## Konversationen Antworten klappen zu einer Konversation zusammen, von alt nach neu sortiert, die letzte @@ -128,8 +147,10 @@ angekommen ist. Was du wählst, wird für deine nächste Suche gemerkt, und das bei. Ein Wechsel der Reihenfolge beginnt wieder auf der ersten Seite, denn Seite vier der einen Reihenfolge ist Seite vier von nichts in der anderen. -Die Suche erfasst nur Mail, die synchronisiert wurde. Wie weit das zurückreicht, ist eine -Einstellung pro Konto; siehe [Konten und Aliase](accounts.md). +Die Suche erfasst nur Mail, die synchronisiert wurde. plMail synchronisiert alles, was ein Konto +hält, und es gibt keine Einstellung, die das begrenzt — ein großes Postfach ist also erst einige +Läufe nach dem Hinzufügen vollständig durchsuchbar und nicht sofort; siehe +[Konten und Aliase](accounts.md). ## Mail bearbeiten @@ -191,10 +212,159 @@ einem Dienst anhängen** öffnet die Dateiauswahl für jeden verbundenen Dienst, herunterladen kann. Entwürfe speichern sich zwei Sekunden nach dem letzten Tastendruck selbst, und ein Entwurf -entsteht erst, wenn der Text mindestens fünf Zeichen hat — sonst hätte jeder versehentliche -Tastendruck einen erzeugt. Das Fenster zu schließen, es herauszulösen oder eine Datei -anzuhängen erzwingt jeweils vorher ein Speichern. Der Papierkorbknopf im Schreibfenster löscht -den Entwurf tatsächlich, statt das Fenster darüber zuzuklappen. +entsteht, sobald es mindestens fünf Zeichen Text **oder** einen Betreff gibt — ein allein +getippter Betreff ist es wert, behalten zu werden. Das Fenster zu schließen, es herauszulösen oder +eine Datei anzuhängen erzwingt jeweils vorher ein Speichern. Unterhalb dieser Schwelle fragt das +Verlassen der Seite nach, statt das Getippte zu verlieren. Der Papierkorbknopf im Schreibfenster +löscht den Entwurf tatsächlich, statt das Fenster darüber zuzuklappen. + +Auf dem Telefon bricht die Werkzeugleiste um, statt aus dem Bild zu scrollen, und die Sendepille +wandert hinauf in die Kopfzeile des Fensters, dorthin, wo früher der Knopf saß. + +### Emoji + +Der Smiley öffnet den vollständigen Unicode-Satz, mit Kategorien, Suche, Hauttönen und den zuletzt +verwendeten. Eine Auswahl fügt das Zeichen dort ein, wo der Cursor stand. + +Eingefügt wird **ausschließlich** bei einer Auswahl. Tippst du `:)` oder `:smile:`, bleiben `:)` +und `:smile:` Zeichen für Zeichen in der Nachricht stehen — plMail schreibt Getipptes nicht in +Bildchen um. + +Die Suche läuft in der Sprache des Fensters, denn die Emoji-Daten werden je Sprache mitgeliefert +statt nachgeladen. Sowohl diese Daten als auch die Schrift für die farbigen Emoji liefert plMail +selbst aus; zur Laufzeit wird nichts von einem CDN geholt, sodass die Auswahl auch auf einer +Installation ganz ohne Weg nach draußen funktioniert. + +### Bilder in der Nachricht + +Der Bildknopf, ein Einfügen aus der Zwischenablage und ein Ziehen-und-Ablegen auf den Editor tun +alle dasselbe: Das Bild kommt **in den Text**, an die Stelle, an der du es abgelegt hast, und nicht +als Anhang daneben. Dieselbe Obergrenze von 25 MB wie bei einem Anhang, und nur Bilder — alles +andere wird mit einer Begründung in der Statuszeile abgelehnt. + +Eingebettete Bilder reisen als `cid:`-Teile der Nachricht, was jedes Mailprogramm auflösen kann; +die Empfängerin sieht also das Bild und keinen kaputten Verweis zurück auf plMail. Sie sind keine +Anhänge und werden auch nicht als solche gezählt: Eine Nachricht, deren einziges Bild du in den +Text gesetzt hast, trägt keine Büroklammer. + +### Links + +Der Linkknopf öffnet ein kleines Feld für die **URL** und eines für den **Text**, wobei der Text +mit dem gefüllt ist, was du markiert hattest. Ein bloßes `example.com` wird verstanden und als +`https://` gespeichert — es ist kein Pfad innerhalb von plMail. Verlinken lassen sich nur Web-, +Mail- und Telefonadressen; alles andere wird gleich dort abgelehnt, statt beim Speichern +stillschweigend zu verschwinden. + +Klickst du einen Link an, der schon im Editor steht, zeigt dasselbe Feld sein anderes Gesicht: die +Adresse sowie **Öffnen**, **Ändern** und **Entfernen**. Es schließt sich mit Escape, bei einem +Klick daneben und sobald der Cursor den Link verlässt. + +### Signatur + +Signaturen wohnen unter **Einstellungen → Signaturen**. Jedes Konto hat eine, und jede seiner +Absendeadressen kann sie überschreiben. Drei Zustände sind wichtig, und sie sind nicht dasselbe: + +| Zustand | Womit diese Adresse unterschreibt | +|---|---| +| **Erbt** | Mit der Signatur des Kontos. Das tut eine Adresse, solange du nichts anderes sagst. | +| **Eigene** | Mit dem, was du für diese Adresse geschrieben hast, statt mit der des Kontos. | +| **Bewusst ohne** | Mit einer eigenen Signatur, die leer gelassen wurde. Die Adresse unterschreibt mit nichts, obwohl das Konto eine Signatur hat. | + +Die letzten beiden sind beide „eine eigene Signatur“; der Unterschied ist, ob sie leer ist. Genau +deshalb wird ein leeres Feld nicht als „erben“ gelesen — eine private Adresse, die ohne Signatur +sendet, auf einem dienstlichen Postfach, das mit einem Block unterschreibt, ist der ganze Grund für +diese Einstellung. + +Im Schreibfenster wird die Signatur für dich eingesetzt, oberhalb des zitierten Textes, bei einer +neuen Nachricht ebenso wie bei einer Antwort und einer Weiterleitung, mit einem leeren Absatz davor +— damit der Cursor im Schreibraum steht und nicht mitten im Gruß. **Signatur einfügen** in der +Werkzeugleiste ersetzt den Block an Ort und Stelle, statt einen zweiten anzuhängen, und dasselbe +tut ein Wechsel des Kontos in der **From**-Auswahl: Der Signaturblock wird getauscht, ein bereits +getippter Absatz überlebt den Wechsel. + +### Später senden + +Der Pfeil neben **Senden** öffnet **Später senden**: *Morgen früh* (08:00), *Morgen Nachmittag* +(13:00), *Montagmorgen* und **Datum & Uhrzeit wählen** für alles andere. Ist morgen bereits Montag, +entfällt der dritte Eintrag, denn ein Menü, das denselben Zeitpunkt unter zwei Namen anbietet, ist +ein Menü, bei dem man nachsehen muss. + +Jede Zeit wird auf **deiner** Uhr gelesen — Zeitzone und 12- oder 24-Stunden-Format aus +**Einstellungen → Allgemein**, nicht aus dem Browser — und das Menü sagt, welche Zone es meint. Ein +Laptop, der noch auf der Zeit eines anderen Kontinents steht, verschiebt deinen Morgen nicht. + +Die Untergrenze ist **eine Minute**: Darunter ist „planen“ nur „senden“ mit schlechterem +Rückgängig, und die Auswahl lehnt es schon im Fenster ab, ohne den Server zu fragen. Die +Obergrenze sind **30 Tage**, dieselbe Grenze, die JMAP-Clients genannt bekommen — Webfenster und +Telefon können sich also nicht darüber uneinig sein, was erlaubt war. + +Eine geplante Nachricht ist ein Entwurf, der zurückgehalten wird. Das steht in ihrer Zeile unter +**Entwürfe** und in der Entwurfszeile innerhalb einer Konversation — *Geplant …* —, und **Geplanten +Versand abbrechen** steht im Menü dieser Zeile. Die Einblendung ist längst verblasst, wenn jemand +nachsehen geht, und genau darum steht es dort. Ein Abbruch ist auch auf jedem anderen Gerät +sichtbar, nicht nur auf dem, das ihn ausgelöst hat. + +### Weitere Optionen + +**Weitere Optionen** — die **⋮** neben der Werkzeugleiste — trägt die drei Dinge, die ändern, was +die Nachricht *ist*, statt wie sie aussieht: + +- **Priorität** — *Keine Priorität*, *Niedrig*, *Normal* oder *Hoch*. „Keine Priorität“ ist etwas + anderes als „Normal“: Eine unangetastete Nachricht sagt nichts über ihre Dringlichkeit und trägt + überhaupt keine Prioritäts-Header. +- **Lesebestätigung anfordern** — siehe unten. +- **Nur-Text-Modus** — wirft die Formatierung weg und sendet eine reine Textnachricht. Er warnt + vorher, und zwar nur dann, wenn es Formatierung zu verlieren gibt. Solange das Fenster offen ist, + lässt sich das zurücknehmen; sobald der Entwurf als Nur-Text gespeichert wurde, ist die + Formatierung endgültig fort. + +**Verschlüsseln** sitzt im selben Menü, ausgegraut, und sagt warum: Es gibt noch keine +Verschlüsselung. Der Knopf wird benannt statt versteckt, denn ein Schloss, das nichts tut, ist die +eine Lüge, die ein Mailprogramm nicht erzählen darf. + +## Lesebestätigungen + +Eine Lesebestätigung ist eine Nachricht, die an den Absender zurückgeht und sagt, dass seine Mail +angezeigt wurde. plMail beherrscht beide Richtungen, und die empfangende ist die, die man genau +lesen sollte — sie ist eine Datenschutzeinstellung und keine Bequemlichkeit. + +### Eine anfordern + +**Lesebestätigung anfordern** im Menü „Weitere Optionen“ des Schreibfensters. Die Anforderung nennt +die Adresse, aus der du **sendest**, Alias eingeschlossen, und nicht das Konto: Eine Bestätigung +muss an die Adresse zurückkommen, die gefragt hat, sonst kann sie auf dem Rückweg nichts der +Nachricht zuordnen. + +Kommt eine an, trägt die Nachricht unter **Gesendet** ein **Gelesen am …**. Die Bestätigung selbst +wird als gelesen markiert und aus dem Posteingang genommen, statt gelöscht zu werden — sie ist also +da, wenn du sie willst, und nicht im Weg, wenn nicht. + +### Um eine gebeten werden + +**Einstellungen → Aliase → Standards fürs Schreiben**, je Adresse. Drei Betriebsarten: + +| Betriebsart | Was dein Postfach tut | +|---|---| +| **Nie senden** | Es wird nichts gesendet, und der Absender erfährt nichts. **Das ist die Vorgabe.** | +| **Jedes Mal fragen** | Die Nachricht zeigt *… möchte erfahren, wann du diese Nachricht liest*, mit **Bestätigung senden** und **Nein danke**. | +| **Immer senden** | Eine Bestätigung geht automatisch hinaus, sobald du die Nachricht als gelesen markierst. | + +Nie ist die Vorgabe und bleibt sie, bis du sie änderst — mit Absicht. Eine Bestätigung belegt, dass +eine bestimmte Adresse aktiv ist, gelesen wird und zu einer bestimmten Minute gelesen wurde, und +genau das bekommt, wer danach fischt, indem er einen einzigen Header setzt. Wer diese Einstellung +nie öffnet, sendet nichts. + +Zwei Dinge engen das weiter ein, beide in dieselbe Richtung: + +- **Eine Bestätigung geht nur hinaus, wenn du eine Nachricht selbst als gelesen markierst.** Stellt + eine Synchronisierung fest, dass die Nachricht anderswo längst gelesen wurde, geht nichts hinaus: + Eine Bestätigung behauptet, dass ein Mensch die Nachricht angezeigt hat, und ein + Synchronisierungslauf, der von letztem Dienstag erfährt, kann das nicht behaupten. +- **Eine Anforderung, die woandershin zeigt als zum Absender, wird auf „fragen“ zurückgestuft**, + wie die Adresse auch eingestellt ist. Widerspricht die Rückadresse dem, von wem die Mail kam, + beantwortet plMail sie nicht automatisch — es fragt dich und nennt den Widerspruch. Nicht + Schweigen, denn die legitime Fassung dieser Form ist ein Massenversender, der an seiner + Bounce-Adresse sammelt. ## Senden rückgängig machen @@ -215,6 +385,8 @@ wo er stand. zu Konversationen und Kategorisierung. - [Konten und Aliase](accounts.md) — Postfächer verbinden, sofortige Zustellung, Absendeadressen. +- [Zustand der Konten](health.md) — wenn keine Mail mehr ankommt, und die Reparatur, die das + Postfach behält. - [Filter](filters.md) — Mail beim Eintreffen sortieren, und eine Regel auf vorhandene Mail anwenden. - [JMAP](../internals/jmap.md) — dieselben Operationen, wie ein Client sie sieht. @@ -226,6 +398,31 @@ zehn Sekunden zurückgehalten, die Einblendung mit Rückgängig verblasst aber s ist nichts kaputt, wenn eine Nachricht hinausgeht, nachdem der Knopf weg ist — das Zeitfenster war wirklich zu. +**Ein Bild in der Signatur kann kein eingebettetes Bild sein.** Ein Bild in einer *Signatur* wird +als gewöhnlicher Bildverweis gespeichert und nicht als `cid:`-Teil: Die Bereinigung, durch die +jede Signatur geschrieben wird, entfernt bewusst genau das Attribut, das daraus eines machen +würde — damit eine Signatur nichts einschmuggeln kann, das aussieht wie eines der eingebetteten +Bilder der Nachricht selbst. Eingebettete Bilder funktionieren im Nachrichtentext, dort, wo du sie +hinsetzt. + +**„Neu“ ist nicht „ungelesen“, und das Fähnchen zu verlieren heißt nicht, etwas gelesen zu +haben.** An einer Zeile im Posteingang vorbeizuscrollen räumt ihr „Neu“ ab, denn die Zeile wurde +dir vorgelegt. Die Konversation bleibt ungelesen, bis du sie öffnest. Ungelesen und nicht neu ist +der Normalzustand von allem, was du dir noch vorgenommen hast. + +**Ein „Neu“, das du nie gesehen hast, läuft trotzdem ab.** Nichts ist länger als 24 Stunden nach +seiner letzten Nachricht neu. Nach zwei Wochen Abwesenheit kommst du also in einen Posteingang ganz +ohne „Neu“ zurück — das ist die Markierung, die funktioniert, und keine, die ausgeblieben ist. + +**Der Nur-Text-Modus lässt sich nur zurücknehmen, solange der Entwurf nicht gespeichert ist.** Die +Warnung sagt das vor dem Umschalten. Ist der Entwurf einmal als Nur-Text abgelegt, gibt es +nirgends mehr eine Formatierung, zu der man zurückkehren könnte. + +**Ein geplanter Versand kann nicht näher als eine Minute liegen.** Die nächste volle Minute +einzutippen ist genau die Zeit, die man zum Ausprobieren wählt, und sie wird abgelehnt — mit +Begründung, im Fenster, ohne Weg zum Server. Alles von einer Minute bis dreißig Tagen wird +angenommen. + **Eine zurückgestellte Konversation zu wecken markiert sie als ungelesen, und der alte Lesestatus ist weg.** Das ist gewollt und kein Versehen, heißt aber, dass du nach dem Zurückstellen einer bereits gelesenen Konversation eine ungelesene vorfindest. diff --git a/docs/features/accounts.md b/docs/features/accounts.md index 564a5835..d5daef29 100644 --- a/docs/features/accounts.md +++ b/docs/features/accounts.md @@ -51,18 +51,32 @@ is managed by connecting and disconnecting rather than by a settings page. ## The account list -Accounts are listed in your own order and can be dragged to reorder. The order is not cosmetic: the -**first** account is the primary one, which is what a new compose window starts from. Removing an -account renumbers the rest, so the top row is always the primary. +Accounts are listed in your own order and can be dragged to reorder. **The order is cosmetic.** It +decides where a row sits and nothing else. + +Which account a new message is composed from is a separate, stored choice: the primary account, +marked **Primary** on its row and set by **Make primary** on any other. This used to be the same +thing — the top row was the primary — which meant tidying the list silently changed the address you +send from, with nothing on screen saying so. Two decisions, two controls. + +The coloured dot beside each account is its **identity colour**: the same tone that account's +messages wear in the unified lists, so two accounts can be told apart at a glance in a list that +mixes them. It is handed out when the account is added and never moves again — reordering the list +does not repaint it, and it is **not** a status light. Whether an account is actually working is +answered on [Account health](health.md), which is the one place that claims to answer it. Each row offers: | Control | Effect | |---|---| +| **Make primary** | Sends new messages from this account by default — on any row but the primary's | | **Disable account** / **Enable account** | Stops or resumes syncing without deleting anything | | **Edit account** | Server settings and password — password accounts only | | **Remove account** | Deletes the account and every message synced from it | +The primary flag is never lost. Removing the account that held it hands it to another, and the very +first account you add is primary because there is nothing for it to inherit from. + Removing an account deletes its synced mail from plMail's database and nothing at the provider. It also tries to tear down any push registration it had, so nothing is left pointing at an account that no longer exists. @@ -139,10 +153,25 @@ One caveat plMail states on the page itself: **Outlook sends as the account's pr regardless of what you choose here.** That is Microsoft's behaviour, changed in your Microsoft account settings, not here. +### What each address does by default + +Two settings hang off the alias list rather than off the account, because they are properties of the +address people see rather than of the mailbox it lives in. + +**Compose defaults**, under the alias list on the same page, currently holds one control per +address: what that address does when a sender asks to be told their mail was read. The default is +**Never send**, and it is worth understanding before changing it — see +[Read receipts](mail.md#read-receipts). + +**Settings → Signatures** is its own section. The account has a signature, and any of its addresses +can either inherit it, replace it, or deliberately sign with nothing. The three states and what the +compose window does with them are in [Composing](mail.md#signature). + ## Where to read further - [IMAP and SMTP](../providers/imap-smtp.md), [Google](../providers/google.md), [Microsoft](../providers/microsoft.md) — the exact provider-side setup. +- [Account health](health.md) — what is broken, and the repairs that keep your mail. - [Mail ingest](../internals/mail-ingest.md) — what a sync run actually does. - [Configuration reference](../install/configuration.md) — `APP_PUBLIC_URL`, the OAuth variables and the Pub/Sub ones. @@ -150,9 +179,14 @@ account settings, not here. ## Things that bite -**The first account in the list is the primary one.** Reordering by drag therefore changes which -account a new message is composed from. There is no separate "make primary" button, and none is -coming — the order is the setting. +**Reordering the list no longer changes which account you send from.** It used to, and an install +upgraded from an older version keeps whichever account was first at the moment it upgraded. If +Compose starts from the wrong address, the fix is **Make primary** on the right one — dragging it to +the top will not do it. + +**A dead sign-in does not have to mean re-adding the account.** Deleting a broken account and adding +it again is the reflex, and it costs you every message synced from it. **Settings → Account health** +offers a reconnect that keeps the mailbox; see [Account health](health.md). **A large mailbox takes a while to arrive in full.** plMail syncs everything the account holds; there is no setting that bounds it. The newest mail lands first, and the rest follows over the diff --git a/docs/features/calendar.md b/docs/features/calendar.md index 93135179..ee566a39 100644 --- a/docs/features/calendar.md +++ b/docs/features/calendar.md @@ -77,6 +77,14 @@ Month and Agenda have no time axis in either shape. A month cell is a couple of and has no room to say where in the day anything is; an agenda's whole value is that it skips the empty time, which is exactly the axis a grid would draw. +**The grid is drawn on your clock.** The hours down the side, where the red current-time line sits, +and the time a new event is proposed at when you double-click empty space all follow the timezone in +**Settings → General**. That is the same zone every other timestamp in the app is read against. +Where a calendar carries a time zone of its own it wins for the events on it, as it always has; what +changed is the fallback, which used to be the container's own idea of the time — UTC — so the +current-time line could sit an hour or two away from the labels beside it and a new event was +proposed at a slot already in the past. + Three things about the grid are worth knowing: - **The all-day band is always there**, even on a week with nothing in it, so the grid does not jump @@ -226,7 +234,11 @@ made yourself, and mirrors of remote ones, can be deleted; deleting takes every calendar with it. Hiding a calendar hides it everywhere, consistently: the views, the topbar's next-thing indicator, -and the *Happening soon* list all read visible calendars only. +and the *Happening soon* list all read visible calendars only. The **editor** is the exception, and +deliberately: it lists every calendar you own, hidden ones marked with a struck-through eye beside +the read-only lock, because a copy of a meeting on a hidden calendar is still a fact about the +meeting. Saving onto one is then an informed choice rather than a trap — and a save that lands +somewhere you cannot see says so and names the calendar. ## Things that bite @@ -235,6 +247,12 @@ alone". The copy stays where it is, stops agreeing with the ones you did change, separate entry from then on. To take a meeting off a calendar, tick that calendar and press **Delete** — the delete acts on exactly the ticked ones. +**An event saved to a hidden calendar appears in no view at all.** The editor lists hidden +calendars; the day, week, month and agenda views do not. So the save succeeds, the row exists, and +the meeting is nowhere to be found until the calendar is made visible again in +**Settings → Calendars**. plMail now confirms every save and names the calendar when it is one you +cannot see, but the confirmation is the only thing that will tell you. + **A copy of an event that came from mail is still an event from mail.** Putting a meeting on a second calendar does not cut either copy off from the booking it was read out of: a later message moving the meeting moves both. See diff --git a/docs/features/health.md b/docs/features/health.md new file mode 100644 index 00000000..20a86ca6 --- /dev/null +++ b/docs/features/health.md @@ -0,0 +1,121 @@ +# Account health + +**Settings → Account health** is the page that answers "why has my mail stopped?" — and, where it +can, offers the button that fixes it. + +Everything on it was already known. plMail records a refresh token that stopped working, a calendar +whose sync keeps failing, a push registration that has gone quiet, a file service whose connection +lapsed; it simply never showed you any of it, so a broken sign-in looked like a mailbox that had +gone quiet on its own. This page reads that stored state back. It never probes: nothing here makes +a request to a provider to find out how things are, so opening it is free and its answers are as +fresh as the last time something was tried. + +When nothing is wrong, it says so — *Everything is working*, with a line explaining that this is the +page that will tell you when that changes. It is not a wall of green checkmarks and it is not empty. + +## What it reports + +Five things can appear, and each one says what it means for your mail rather than what the provider +called it: + +| What | What it means | Repair | +|---|---|---| +| **An account needs you to sign in again** | The stored sign-in no longer works, so nothing about this account is running — no new mail, no calendar syncing, no filters on delivery, no sending. Mail already downloaded is untouched. | **Reconnect this account** | +| **A calendar has stopped syncing** | That calendar shows what it knew when it last worked. Changes made elsewhere are not arriving, and changes you make here are not going out. | **Try syncing now** | +| **Instant delivery is off** | Mail still arrives, just on a schedule instead of the instant it is sent. Nothing is lost and there is no rush. | **Turn instant delivery back on** | +| **A connection needs reconnecting** | Saving attachments to a file service, and attaching from it, will not work. Your mail is unaffected. | **Reconnect** | +| **Background jobs were given up on** | Work that failed repeatedly and was set aside so it would stop retrying. Usually the aftermath of one of the others rather than a fault of its own. | **Put them back on the queue**, or **Discard them** | + +Every repair says what it will do *before* you press it, and every one of them says what it will +leave alone. Pressing one changes the button while it works — a repair that looks inert is a repair +people press twice. + +**Consequences are filed under their cause.** One dead sign-in can take three calendars and five +hundred queued jobs down with it. That is one thing to fix, not nine, so the calendars are listed +underneath the account that explains them and the count in the topbar counts causes rather than +symptoms. + +**Severity is drawn by consequence, not by how alarming the error looks.** Instant delivery falling +back to polling is a notice and deliberately does *not* light the topbar indicator: your mail is +arriving. A page that paints "slightly delayed" the same red as "stopped" is a page people learn to +close, and then the red that mattered goes unread too. + +The provider's own error text is kept, behind a **Technical detail** disclosure. It is there for +when you need it and out of the way when you do not. + +## Reconnecting an account, in place + +This is the one worth knowing about before you need it. + +When a sign-in dies — a password changed, two-factor switched on, access revoked from the provider's +security page — the reflex is to delete the account and add it again. That works, and it costs you +everything: every message synced, every thread, every label, every rule that pointed at them. + +**Reconnect this account** re-runs the provider's consent screen and writes the fresh sign-in onto +the account you already have. Mail, threads, labels, filters, aliases, calendars and settings all +stay exactly as they are. Nothing is downloaded again and nothing is deleted; syncing simply picks +up where it stopped and catches up over the next few minutes. + +**It is guarded on identity.** You have to sign in as the same address at the same provider. Signing +in as a different Google account — the second one in the account chooser, which is a mistake anyone +makes — is **refused outright**, and nothing is changed. plMail tells you which address you actually +signed in as and which one it expected. Swapping the address in would file a stranger's mail into +these threads, with no way back. + +## Calendars that fail permanently + +A calendar whose sync answers the same way every time now **backs off** instead of retrying forever: +a quarter of an hour, then doubling, capped at a day. Two consequences worth knowing: + +- A broken calendar stops flooding the logs, and stops occupying the sweep that other calendars are + queued behind. Before this, a calendar that could not sync was retried on every pass, for as long + as it stayed broken. +- Nothing is muted. The first failure always reports, a failure that *changes* always reports, and + because the delay is capped at a day, a condition that heals on its own is picked up again within + one. + +**Try syncing now** clears the backoff and asks the calendar to sync straight away. That dispatches +the work rather than doing it, so the card says the sync has been **started** and keeps saying so +until an answer comes back — through a reload, not just as a flash you might miss. When the answer +arrives the card says whether it worked, and a repeat failure says so plainly rather than looking +like a sync that never ran. + +## Where to read further + +- [Accounts and aliases](accounts.md) — connecting and disconnecting mailboxes, instant delivery. +- [Connected calendars](calendar-sync.md) — what a calendar sync does, and the providers it does it + with. +- [Files and integrations](integrations.md) — the connections that can lapse. +- [Troubleshooting](../install/troubleshooting.md) — the operator's side: the queue, the logs, and + the health checks a browser cannot see. +- [Administration](admin.md) — queues, workers and the monitoring an administrator gets. + +## Things that bite + +**Reconnecting refuses a different address, and that is the feature.** If the provider signs you in +as the wrong account — a second Google identity still logged in, a personal address where the work +one was meant — the repair stops and changes nothing. Sign out of that identity with the provider +first, then try again. There is no "use it anyway". + +**A reconnect is refused across providers too.** The same address at a different provider is a +different mailbox, and the check compares both. + +**"Try syncing now" queues the sync; it does not perform it.** The page comes back saying the sync +has started, because it has, and the result lands moments later. Pressing it again in the meantime +does nothing useful — the card will say what happened without being asked twice. + +**Instant delivery being off is not an error, and will not light the indicator.** A self-hosted +install with no publicly reachable HTTPS address can never register push at all. Mail arrives on the +fifteen-minute sweep, which is why this is a notice rather than a warning. + +**Discarding abandoned jobs cannot be undone.** Anything they had not finished stays unfinished, and +nothing is retried. **Put them back on the queue** is the safe one — jobs that fail again simply end +up back here. + +**Abandoned jobs are usually a symptom.** Hundreds of them almost always mean one dead sign-in +higher up the page. Fix that first and put the jobs back afterwards, or they will fail for the same +reason and return. + +**The page reports what was last observed, not what is true this second.** It reads stored state and +never probes, so an account that has just been fixed elsewhere stays on the list until something +tries it again. diff --git a/docs/features/mail.md b/docs/features/mail.md index b8f5b2a7..1ba6961e 100644 --- a/docs/features/mail.md +++ b/docs/features/mail.md @@ -39,6 +39,24 @@ There is one override worth knowing: a sender you have written to yourself is pu Primary regardless of any bulk-mail header on the message. Open a message's **Details** panel and the `category` row says which rule decided, and which header or domain it matched on. +## The "New" marker + +A conversation is **new** until its row has been *shown* to you. Not opened — shown. Scroll past +something in the inbox and never click it and the badge goes, because you have stopped being +surprised by it; the conversation is still unread, because you still have not read it. The two are +different questions and plMail keeps both answers. + +It shows as a filled **New** pill beside the sender on the row, and as a quiet dot — no number — on +the inbox category tabs, on the sidebar's labels and roles, and on Starred. The dot means "something +arrived here", which is what the unread counts beside it do not say. + +Nothing stays new for longer than **24 hours** after its last message, whether or not you ever saw +the row. A marker you can only clear by looking at every row is a debt rather than a marker, so it +expires on its own. + +Search results retire the badge too: a row whose sender and subject you have just read in a result +list has been shown, whichever list it was. + ## Threads Replies collapse into one conversation, ordered oldest to newest with the latest message @@ -112,8 +130,9 @@ relevant**, which is full-text rank — the best match leads, whenever it arrive is remembered for your next search, and paging keeps it. Switching orders starts again at the first page, because page four of one order is page four of nothing in the other. -Search only covers mail that has been synced. How far back that goes is a per-account setting; see -[Accounts and aliases](accounts.md). +Search only covers mail that has been synced. plMail syncs everything an account holds and there is +no setting that bounds it, so a large mailbox is searchable in full a few sync runs after it is +added rather than immediately; see [Accounts and aliases](accounts.md). ## Acting on mail @@ -167,10 +186,145 @@ dock. Either way the window offers rich text, contact autocomplete on the addres **Attach files** takes files from your machine, capped at **25 MB per file**. **Attach from a service** opens the file picker for any connected service plMail can download from. -Drafts save themselves two seconds after you stop typing, and a draft is only created once the body -has at least five characters — otherwise every stray keystroke minted one. Closing the window, -popping it out, or attaching a file all force a save first. The trash button in the compose window -genuinely deletes the draft rather than closing the window on top of it. +Drafts save themselves two seconds after you stop typing, and a draft is created once there are at +least five characters of body **or** a subject — a subject typed on its own is worth keeping. +Closing the window, popping it out, or attaching a file all force a save first. Below that +threshold, leaving the page interrupts rather than losing what you typed. The trash button in the +compose window genuinely deletes the draft rather than closing the window on top of it. + +On a phone the toolbar wraps rather than scrolling out of reach, and the send pill moves up into the +window's header, where the old button used to be. + +### Emoji + +The smiley opens the full Unicode set, with categories, search, skin tones and the ones you have +used recently. Picking one inserts it where the caret was. + +It **only** ever inserts on a pick. Typing `:)` or `:smile:` leaves `:)` and `:smile:` in the +message, byte for byte — plMail does not rewrite what you type into pictures. + +Search is in the language the window is in, because the emoji data is shipped per locale rather than +fetched. Both the data and the colour emoji font are served by plMail itself; nothing is loaded from +a CDN at runtime, so the picker works on an install with no outbound internet access at all. + +### Images in the message + +The image button, a paste, and a drag-and-drop onto the editor all do the same thing: the picture +goes **into the body**, where you placed it, rather than beside the message as an attachment. Same +25 MB ceiling as an attachment, and only images — anything else is refused with a reason on the +status line. + +Inline images travel as `cid:` parts of the message, which is what every mail client can resolve, so +the recipient sees the picture rather than a broken link back into plMail. They are not attachments +and are not counted as any: a message whose only picture is one you placed in the body carries no +paperclip. + +### Links + +The link button opens a small panel with a **URL** field and a **text** field, the text prefilled +from whatever you had selected. A bare `example.com` is understood and stored as `https://` — it is +not a path inside plMail. Only web, mail and telephone addresses can be linked; anything else is +refused there and then rather than being quietly dropped when the draft saves. + +Clicking a link already in the editor shows the panel's other face: the address, and **Open**, +**Change** and **Remove**. It dismisses on Escape, on a click outside, and as soon as the caret +moves off the link. + +### Signature + +Signatures live in **Settings → Signatures**. Each account has one, and any of its sending addresses +can override it. Three states matter, and they are not the same: + +| State | What that address signs with | +|---|---| +| **Inherits** | The account's signature. This is what an address does until you say otherwise. | +| **Its own** | Whatever you wrote for that address, instead of the account's. | +| **Deliberately nothing** | Its own signature, left empty. The address signs with nothing even though the account has one. | + +The last two are both "an override"; the difference is whether the override is empty. That is why an +empty box is not read as "inherit" — a personal alias that signs with nothing on a work mailbox that +signs with a block is the whole reason the setting exists. + +In the compose window the signature is inserted for you, above the quoted text, on a new message, a +reply and a forward, with an empty paragraph in front of it so the caret starts in the writing space +rather than inside the sign-off. **Insert signature** in the toolbar replaces the block in place +instead of adding a second one, and so does changing the **From** account: the signature block is +swapped and a paragraph you have already typed survives the change. + +### Scheduled send + +The chevron beside **Send** opens **Send later**: *Tomorrow morning* (08:00), *Tomorrow afternoon* +(13:00), *Monday morning*, and **Pick date & time** for anything else. Tomorrow-is-Monday drops the +third, because a menu offering one instant under two names is a menu you have to check. + +Every time is read on **your** clock — the timezone and the 12-or-24-hour format from +**Settings → General**, not the browser's — and the menu says which zone it means. A laptop still on +another continent's time does not move your morning. + +The floor is **one minute**: below that, "schedule" is "send" with a worse undo, and the picker +refuses it in the window without a round trip. The ceiling is **30 days**, the same limit JMAP +clients are told about, so the web window and a phone cannot disagree about what was allowed. + +A scheduled message is a draft that is being held. It says so on its row in **Drafts** and on the +draft's row inside a thread — *Scheduled …* — and **Cancel scheduled send** is on that row's menu. +The toast has faded long before anybody goes looking, which is the point of putting it there. A +cancel is visible on every other device too, not just the one that made it. + +### More options + +**More options** — the **⋮** beside the toolbar — carries the three things that change what the message *is* rather +than how it looks: + +- **Priority** — *No priority*, *Low*, *Normal* or *High*. "No priority" is distinct from "Normal": + an untouched message says nothing about its urgency and carries no priority headers at all. +- **Request read receipt** — see below. +- **Plain text mode** — drops the formatting and sends a plain-text message. It warns first, and + only when there is formatting to lose. It is reversible while the window is open; once the draft + has been saved as plain text the formatting is gone for good. + +**Encrypt** sits in the same menu, disabled, and says why: there is no encryption yet. It is named +rather than hidden because a lock icon that does nothing is the one lie a mail client must not tell. + +## Read receipts + +A read receipt is a message that goes back to the sender saying their mail was displayed. plMail +does both directions, and the receiving direction is the one worth reading carefully — it is a +privacy setting, not a convenience. + +### Asking for one + +**Request read receipt** in the compose window's more-options menu. The request names the address +you are sending **from**, alias included, rather than the account: a receipt has to come back to the +address that asked, or nothing on the way in can match it to the message. + +When one comes back, the message in **Sent** gains **Read at …**. The receipt itself is marked read +and taken off the Inbox rather than being deleted, so it is there if you want it and not in your way +if you do not. + +### Being asked for one + +**Settings → Aliases → Compose defaults**, per address. Three modes: + +| Mode | What your mailbox does | +|---|---| +| **Never send** | Nothing is sent, and the sender is told nothing. **This is the default.** | +| **Ask each time** | The message shows *… asked to be told when you read this message*, with **Send receipt** and **No thanks**. | +| **Always send** | A receipt goes automatically when you mark the message read. | + +Never is the default and stays the default until you change it, deliberately. A receipt confirms +that a specific address is live, is monitored, and was reading at a specific minute — which is +exactly what somebody fishing for that gets by setting one header. Someone who never opens this +setting emits nothing. + +Two things narrow it further, both in the same direction: + +- **A receipt is only ever sent when you mark a message read yourself.** A sync discovering that the + message was already read in another client sends nothing: a receipt claims a person displayed the + message, and a sync pass learning about last Tuesday cannot make that claim. +- **A request pointing somewhere other than the sender is downgraded to "ask", however the address + is set.** If the return address disagrees with who the mail came from, plMail will not answer it + automatically — it asks you, and says what the mismatch was. Not silence, because the legitimate + version of that shape is a bulk sender collecting at its bounce address. ## Undo send @@ -187,6 +341,7 @@ was, with the editor reopened where it was. - [Mail ingest](../internals/mail-ingest.md) — the pipeline from provider to database, threading and categorisation. - [Accounts and aliases](accounts.md) — connecting mailboxes, instant delivery, sending addresses. +- [Account health](health.md) — when mail stops arriving, and the repair that keeps the mailbox. - [Filters](filters.md) — sorting mail as it arrives, and applying a rule to mail you already have. - [JMAP](../internals/jmap.md) — the same operations as a client sees them. @@ -196,6 +351,29 @@ was, with the editor reopened where it was. seconds, but the toast carrying Undo fades after eight. Nothing is wrong when a message goes out after the button has gone — the window really did close. +**A signature image cannot be an inline image.** A picture placed in a *signature* is stored as an +ordinary image reference, not as a `cid:` part: the sanitiser every signature is written through +drops the marker attribute that would make it one, deliberately, so a signature cannot smuggle in +something that looks like one of the message's own inline pictures. Inline images work in the +message body, where you put them. + +**"New" is not "unread", and losing the badge is not reading anything.** Scrolling past a row in the +inbox retires its New badge, because the row was put in front of you. The conversation stays unread +until you open it. A thread that is unread and not new is the normal state of everything you have +been meaning to get to. + +**A New badge you never saw expires anyway.** Nothing is new for longer than 24 hours after its last +message. Coming back from a fortnight away means an inbox with no New badges at all — that is the +marker working, not a marker that failed to appear. + +**Plain-text mode is only reversible until the draft is saved.** The warning says so before the +switch. Once the draft has been stored as plain text there is no formatting left anywhere to come +back to. + +**A scheduled send cannot be closer than a minute away.** Typing the next whole minute is exactly +the time a person picks to try the feature, and it is refused — with a reason, in the window, +without a round trip. Anything from a minute to thirty days out is accepted. + **Waking a snoozed conversation marks it unread, and the old read state is gone.** This is chosen, not accidental, but it does mean snoozing a thread you had read leaves you with an unread thread afterwards.