Sterna Mail

app.sterna
by Zapstore _@zapstore.dev

Republished from GitHub / F-Droid by the Zapstore main account.

First release: Jul 31, 2026, 15 total releases.

Most recent release: Sep 24, 2026.

Repo

Appears in 0 app stacks.

0 sats / 0 zaps received in the past year.

Sats Received

Underlying data available via MCP: app_zaps, app_releases.

Zap Count

Underlying data available via MCP: app_zaps, app_releases.

Releases

  • Sep 24, 2026 1.5.9
    Folders - An account's folder settings now let you pick which folder is the Archive, Sent, Drafts, Trash and Spam, or hand a role back to the server's own choice with Automatic. This works on IMAP and JMAP, and takes effect at once. A folder holds one role at a time, so picking it for a second role takes the first one back (#227). - If that leaves a role with no folder, archiving and deleting no longer fall back on a folder you picked for something else. On IMAP the gesture fails and the message stays where it was. - A Reorder mode in the folder settings sets the order of your own folders, per account, on this phone. Standard folders stay first. The order shows in the drawer and the move picker. Message list - Two new quick filters in the list's menu, starred and with attachments, can be combined with each other and with unread. The funnel icon gets a small dot while a filter is on. Filters stay on the phone and never touch the server. - A new "Open on" setting picks the view the app opens on: the one you left (the default), the current account's inbox, or All inboxes. A tapped notification still opens the folder that holds its message (#185, #179).
    More…
    - A new "Message beside the list" setting under Appearance picks when a wide window shows the message next to the list: always (the default), in landscape only, or never (#228). - After Android kills the app in the background, the reader no longer reopens on another message that happened to sit at the same position. It opens the message you had open, on its own. Conversations - In conversation view, archiving, unarchiving, moving (to the same account or another one), reporting as spam and taking out of spam a collapsed conversation now leave the replies filed in your Sent folder where they are. Before, Sent slowly emptied itself. A reply you tick on its own still moves with the gesture, and delete still takes the whole conversation. Composer and sending - The paperclip now offers "Choose a file" and "Take a photo". The photo is taken by the phone's camera app and attached to the message (#233). - Scheduled sends can carry attachments. Cancelling a scheduled send puts it back in Drafts with its attachments. Signed or encrypted messages still can't be scheduled. - A message's Date header now uses the phone's time zone on IMAP, its Sent copy and drafts included. "Write quoted dates in UTC" now covers this header too. - Switching the sending account between JMAP and IMAP after attaching a file: on JMAP the file is now uploaded and sent with the message instead of being left out. On IMAP an attachment that only exists on the JMAP server is refused, and the message and its attachments stay in place, instead of going out without it. Reading - A message that would make the reader load thousands of images or links opens as text, with a notice, instead of leaving the app unresponsive. - Once the OpenPGP/MIME signature of a message has been checked, its body, attachments and inline images come from the signed part alone, the way a decrypted message already does. Anything a sender added beside the signed part isn't shown. - Opening a starred message from the cache now shows its star, and the star in the header follows the one in the toolbar (#232). Search - A search on a JMAP server now shows the passage of the message that matched, when the server finds one in the body, instead of its first lines. Accounts and sign-in - On the Outlook code panel of the manual form, Back now cancels the sign-in instead of leaving it running in the background. Cancelling there no longer leaves a raw error over the form (#229). - Push: a sign-out or a sync switched off during a push setup is no longer undone by it, and a failed renewal no longer leaves the account marked as connected. Settings backup - The backup screen, the feature list and the privacy page now say what the file carries: the account setup of accounts that sign in with a password, and the senders allowed to load remote images. Accounts that sign in with Microsoft or another OAuth provider, API token accounts and shared accounts aren't in it, and neither are passwords. - A backup that only holds a recently added setting, such as a signature, is now recognised. Accessibility - With TalkBack, each settings switch reads as one control with its title, description and state, and the show/hide password button on the import screen says its name and state. Documentation - The feature list and security policy now say that the refresh token is encrypted, while the short-lived access token isn't.
  • Sep 19, 2026 1.5.8
    Notifications - Each account now has its own new-mail notification channel, so its sound and importance can be set apart in Android's settings. They are listed in App info > Notifications, near the bottom of the page. Send failures get a channel of their own. - Android offers no way to copy the old shared "New mail" channel's settings onto the new ones. If you had silenced it or changed its sound, the new channels start again from the default sound, so check each account once after updating. The old channel goes away once no notification is left on it. Message list - Archiving, deleting, moving or marking as spam a selection, and swiping a collapsed thread, now take the rows off the list at once instead of waiting for the server. Rows the server refuses come back. Moving a selection to another account still waits for each answer. - With two accounts or more, tapping the account name in the list's title opens a menu of the other accounts, and picking one switches to it as the drawer does. A small arrow after the name shows it can be tapped. The unified view has no menu (#215).
    More…
    Composer - A long press on the app icon offers a "New message" shortcut, which opens an empty composer on the active account. - On a JMAP server that publishes an address book, recipient suggestions include its addresses, after the ones already seen and before the phone's contacts. The app keeps a read-only copy per account, refreshed by the regular background sync and deleted with the account. Only the sending account's copy is used. - A typed signature holding an address or a link in angle brackets, such as '\<jean@example.org>', keeps it and keeps its lines. A signature saved from the account settings screen in an earlier version may already have lost that address: type it again. - An imported HTML signature whose source wraps a line just before a line-break tag no longer shows an extra blank line in the composer and in the plain-text part of the message sent. A signature imported before this update needs to be imported again (#226). Sending - On JMAP, a From address that is a plus-tagged sub-address of one of your identities (name+tag@example.org) is sent under that identity, and the message goes out with the From you typed. This assumes the server uses '+' for sub-addresses (#212). - Retry is no longer offered on an outbox message that is being sent, which could deliver it twice. IMAP - Only a top-level folder named INBOX is taken for the inbox, not one nested under another folder. An account that had been pinned to such a nested folder returns to the real inbox after a refresh (#223). - On a server without MOVE, a move that fails after its copy went out is no longer retried automatically, so it doesn't leave a second copy in the destination. Doing the move again yourself after such a failure still adds one. - On a server without UIDPLUS, a delete cut off before the server removed the messages is finished the next time a delete in that folder reaches the server. Until then those messages stay flagged as deleted: hidden here, possibly shown struck through in other apps. Account setup - Automatic JMAP setup now reaches mail., jmap. and api. under your domain when the bare domain swallows connections instead of refusing them (#221). A bare domain with both an IPv4 and an IPv6 address that stay silent still leaves those guesses little time. Reading - When a sender's unsubscribe link only opens a web page, the button reads "Unsubscribe (web page)" instead of a bare "Open page".
  • Sep 17, 2026 1.5.7
    Attachments and message parts on IMAP - A multipart preamble counted as a first part, so every section after it pointed one part too far: attachments downloaded empty or carrying another part's bytes, and the text body was not read at all. Sections are now counted from the first real part (#214). Bodies already in the cache hold the old numbering, so every account's cached bodies are dropped once on this update and fetched again on demand. - A message/rfc822 part with no filename and no attachment disposition, such as a multipart/digest child or the original message returned in a multipart/report bounce, now shows as a "message.eml" attachment line you can open. Messages already synchronised keep the paperclip state they were stored with until they are fetched from the server again. - Opening two attachments that share a filename now keeps them in two files, instead of the second one overwriting the first. - A server line whose parenthesised list was not closed before the end of the line no longer makes the parser run out of memory. The list ends with its line and the next response is read on the same connection. - A response line beginning with an unmatched closing parenthesis, which a malformed or desynchronised server can send, left the parser reading the same byte over and over and the account held its session without ever synchronising again. The parenthesis is now consumed and the stream moves on, having lost the end of that one line. OpenPGP
    More…
    - While OpenPGP still waits on you, a message signed as multipart/signed reads "Signed message" with a "Verify" button, instead of showing the encrypted padlock before anything has been checked. - An inline cleartext-signed block is verified on its own bytes and shown in its own charset, so a signature over accented or non-Latin text no longer fails to verify. - A PGP/MIME signed entity is read up to its real closing boundary, instead of stopping at the first boundary-looking line inside it. - The OpenPGP app can open its own screen again on Android 14 and later. - A signed or encrypted send survives the screen rotating while the OpenPGP app is in front, instead of losing the message being sent. - Blind copies of a signed or encrypted message sent over JMAP now reach their recipients. Notifications - With two accounts or more, a new-mail notification shows the account name, before the folder name for mail outside the inbox. A reminder that wakes up shows it too (#193). - Under "No sender or subject", the account name and the folder name are kept off the notification as well, and off the summary that stands over several of them. Expanded, that summary still lists one line per message. - Opening a message and leaving the reader straight away now finishes marking it read and clearing its notification, instead of abandoning both (#19). - When the read mark could not be written at all, offline for instance, the reader's banner is now left standing rather than cleared. It is the only surviving trace that the mail arrived, since the next sync brings the unread dot back with nothing posted behind it. A banner kept this way still goes when you swipe it away or restart the phone, and nothing puts it back. - A quick reply sent from a notification goes out from the address the composer would have used, instead of the account's default identity (#218). Composer - Three lines of the message body stay above the keyboard, and the header scrolls out of the way when the room runs out (#219). - A draft found by search opens in the composer instead of the reader, on both the list search and the advanced search screen. Opening the server's copy of a draft you had saved on the phone loads the phone's newer text, so saving it no longer writes the older text over the unsent edit (#216). - A long shared text, or a mailto: link with a large body, opens the composer instead of closing the app. The subject and the recipient fields still travel the same way as before, so a mailto: carrying a very long subject takes the old path. - Replying to all keeps the people who were in copy in Cc. Sending - A scheduled send is given up only after four failures of the send itself. The count used to grow on every run that waited for an unreadable account and attempted nothing. Reading - Control characters and bidirectional overrides are removed from subjects, display names and attachment names coming from a JMAP server. Account setup - The manual setup form is offered beside the password field, so a server that automatic setup cannot find is reachable without going looking for the option (#211). Launch - Settings that cannot be read are reset to their defaults instead of crashing the app at launch. The reset is real: quiet hours go back to off, the list of senders allowed to load images is emptied, and the OpenPGP provider has to be chosen again. The app lock is stored elsewhere and survives. Website and documents - sternamail.org has a Simplified Chinese page, and the store listing is translated too. - The website no longer scrolls sideways on a phone. - The contributing guide, the security policy and the privacy policy are each short enough to read in one go.
  • Sep 14, 2026 1.5.6
    Filters and automatic replies on IMAP accounts - Filter rules on an account added over IMAP/SMTP no longer always say the server doesn't support them. Sterna now reads and writes them over ManageSieve (port 4190, STARTTLS required, server name verified), in the same script format as over JMAP. - Blocking a sender from a message now works on an IMAP account too. - The automatic reply screen works on an IMAP account whose server offers the vacation, date and relational Sieve extensions. Saving the automatic reply keeps your filter rules, and saving filter rules keeps the automatic reply. - When the filter service can't be reached, or won't take a secure connection, both screens say so and offer to retry, instead of saying the server doesn't support the feature. In the secure-connection case your password is not sent. - On a server that serves the same mailbox over JMAP and IMAP, saving filters or blocking a sender from the JMAP account keeps the automatic reply an IMAP account wrote into Sterna's script. Simplified Chinese
    More…
    - Simplified Chinese is the tenth interface language, selectable in the app or from Android's per-app language setting (#197). - IMAP presets for QQ Mail, 163 Mail, 126 Mail, Yeah Mail and Sina Mail (#203). - Folders named in Simplified Chinese are recognised as Trash, Junk, Sent, Drafts and Archive on a server that doesn't flag them itself. On such a server, an existing account may start using one of those folders after the update. A role the server does announce still wins (#210). - The forgotten-attachment reminder understands Chinese wording. Swiping - Deleting, archiving, unarchiving or moving a message by swipe no longer holds the row in the list until the server has taken the write. The Undo bar comes up as the row leaves. A write the server refuses puts the row back. Selecting several messages, or a collapsed conversation, still waits for the server. - The coloured band and its label fade with the row instead of staying painted on the empty cell. - A message swiped away just before the app was killed or swept from recents is no longer lost from the list: it comes back once the account's mail is read again from the server. JMAP - A server whose session gives its API, download, upload and event addresses as relative paths is now resolved against the address the session came from, instead of failing the first sync with "no scheme was found" (#209). Translations - Russian: the instant delivery description uses the common wording (#192).
  • Sep 12, 2026 1.5.5
    Accounts and delivery - Instant or battery-saver delivery is now chosen per account, next to its sync window. An account stored before this release keeps the app-wide setting it was stored on. - The foreground service and its permanent notification stay up while at least one account is on instant delivery. - Tapping an account's name in the drawer unfolds the account list, as the chevron already did, instead of opening that account's settings. Folders - Each account gets a screen to manage its folders on, from the drawer under "New folder". Nothing is folded there, so a folder you have hidden stays reachable to be brought back. - "Show this folder" hides a folder from the folder list, from both move-to-folder pickers and from the unread view's scope. Its mail stays searchable, hiding is local and never writes the subscription your server holds, and the Inbox cannot be hidden.
    More…
    - "Notify about new mail" moves to this screen from the drawer's overflow menu, on the same folders as before. The two switches are independent. - The drawer's overflow button now appears on folders you created yourself only. Push - Sterna no longer enrols on a UnifiedPush distributor without asking. The picker appears whenever a distributor is installed and none has been chosen; turning it down with its button is remembered, while closing it with the back gesture or a tap outside answers nothing. - Switching "Sync new mail" off now unregisters the account and asks the mail server to destroy the subscription, instead of leaving every message waking the app for a fetch thrown away on arrival. That server call is best effort and is not retried while the device is offline. - The teardown covers every account whose stored credentials can still be read, not only the one on screen. - A relay address you have published is given up by its own Remove button rather than silently, since it is pasted into somebody else's service. - A push wake no longer schedules a fetch for an account, login or sub-account whose own sync switch is off. - A subscription kept for a linked sub-account is now renewed by the background cycle, instead of expiring at the mail server within a week while the local record went on reading active. - Choosing a distributor from the picker clears the failed stamp, so push comes back on the next pass after the installed distributor is lost. - A JMAP account waiting for its server to confirm a subscription now gets ten minutes instead of two, which was shorter than the round trip and destroyed the subscription it was waiting on. After three subscriptions created for one address without a confirmation, it stops. - The account screen's delivery line now says when a direct connection is not the transport the account was enrolled in. Reading - A Date header that is legal but not in the one canonical form now keeps its date, instead of reading as no date and sinking the row under its whole folder. When it still cannot be read, the date comes from the server's own delivery stamp. - An attachment its sender declared as a generic type, or with no type at all, is now typed by its file extension, so a PDF is offered to a PDF reader. A type the sender really declared is still believed. - A delete swipe reads the bin from the folder cache instead of asking the server where the Trash is first, which cost one round trip per message on a conversation. Deletion is still not instant: it writes to the server before the cached row is dropped, deliberately. - The app paints its own background under the whole screen, so your theme setting, Material You and pure black now reach where no Scaffold did. In landscape the empty right pane was the visible half of it. Writing - A message another client filed into Drafts, which you open and send, is no longer destroyed afterwards: a mail you had received and that no other folder held could be lost that way. Destroying the original now requires the server to say it really is a draft, and every unknown keeps it. The message is still sent.
  • Sep 6, 2026 1.5.4
    Reading - On a window at least 600 dp wide, the inbox lays out in two panes: the list on the left, the open message on the right. From 1200 dp the folder drawer stays beside the list, with no hamburger. Below 600 dp the layout does not change. - An IMAP account now groups its messages into conversations, like a JMAP one. The thread is rebuilt on the phone from the message's own References header. An existing folder stays flat until its next refresh, then groups. - The Message list preview setting now has an effect on IMAP: the row carries the opening line of the message. An older row gains it at its next sync, and there is no backfill of what is already there. - The quoted history at the end of a reply opens folded behind a "Quoted text" button, in HTML messages. One tap unfolds it, nothing is remembered, and plain text is untouched. - Tapping an attached message opens it in a sheet: its From, To, Cc, date, subject, its text and the names of its own attachments. It used to open an empty chooser. - Print, or save as PDF, from the reader's menu. The paper carries the header lines and the body you were reading, on white whatever the theme, with the quoted history printed in full. Blocked remote images stay blocked. - Save a message as .eml, exactly as the server holds it, and save an attachment straight into a folder of your choosing. Neither passes through the app's cache, and a failed save deletes the file it had created, wherever the folder you picked allows it, rather than leaving an empty one behind. - Forward a message as an attachment, from the reader's menu.
    More…
    - The drawer keeps the folders you folded, across a rotation and a restart, and signing one account out leaves the other accounts' folds alone. On a JMAP account, a folder of your own that has children now starts folded, and a folded folder carries the unread count of what it hides. IMAP folder rows carry no unread count, so nothing folds itself there and only the chevrons you pressed are remembered. - Deleting, archiving or moving a message takes its new-mail notification down with it, instead of leaving a banner that reopened a message no longer there. Writing - The composer can style what you write: bold, italic, underline, strikethrough, bulleted and numbered lists, and links, from a bar under the body. The message goes out with an HTML part, a draft keeps its styling wherever it is parked, and pasting stays plain text. - A message being edited out of the outbox is parked instead of being sent behind your back. Closing the composer on a body the phone could not give back, or the app dying mid-edit, used to put the message back on the wire; the row now waits, red, with a reason, and Retry or Edit are the only ways it moves. - Save as draft is refused when the composer has lost its text and the outbox is still holding the message. That gesture used to write an empty draft over the only copy of what you had typed. - Edit is off on a queued message you chose to keep as a draft. Merely opening and closing it used to send it. - An outbox message that is still waiting now prints the last reason it recorded, under its state. It was written down and shown nowhere. - A draft that replies to a conversation opens in the composer from the Drafts folder, whether or not its row unfolds. It used to open the read-only reader with no way to edit it. - A signed or encrypted message no longer carries line endings that a hardened relay refuses. Those messages stayed in the outbox on some servers while the same message unsigned went out, and a long signed message could arrive with an invalid signature. Messages already queued go out as they were signed. Folders and moving - A message, or a selection, can be moved to a folder of another account. The source is copied to the target and only then trashed on the account it came from, and the original stays where it is if the copy cannot be confirmed. - On IMAP, a delete or a cross-account move now refuses a ticked row whose folder the server has renumbered under it. A row that gets renumbered while it is ticked no longer stands in for another message: it comes back ticked and counts as a failure. - An IMAP move whose answer never came back no longer falls through to copy-and-delete. Nothing is erased on the strength of a command whose outcome was never read. - A cross-account move that moves nothing now says so, instead of reporting a partial failure, and the lines it did not move come back ticked. Encryption - An account whose OpenPGP is on announces its public key on the mail it sends, and takes a correspondent's key from a message that carries one. This is Autocrypt Level 1: the key arrives with ordinary mail, and it is opportunistic and unconfirmed. - An encrypted message now repeats its subject inside the encrypted part, so a recipient's client can tell that the subject shown is the subject sent. The envelope still carries the subject in the clear, exactly as before. - A key arriving in the mail can no longer be pushed ahead of a real one by a forged date. On IMAP the date is taken from the server's own clock, a date more than a day ahead of the phone is refused, and the reader fetches a message from the server only once a finger has settled on it. A phone whose own clock is more than a day slow stops taking keys from the mail that has just arrived. Accounts - Adding an identity on a JMAP account now creates it on the server, instead of being a purely local note the server would refuse to send under. A refusal is reported on the first Save, with the server's own reason. - Sign-in refuses a discovery document that hands the tokens to another domain. The token endpoint must be on the host asked, on the address's domain, or under either. - A guessed host answering 403 or 401 no longer reads as a wrong password. Addresses whose provider answers that way, on a host Sterna guessed rather than one you typed, now reach the IMAP and SMTP fallback that works. - Coming back from an approval page draws one spinner, not two. - A delegated mailbox that the server stops listing and lists again keeps the settings it had: its notifications, its colour, its watched folders and its folded tree. - An IMAP account can be given a relay address for push. It registers only once you have asked, and the status line states when a wake last landed rather than a verdict on the relay's health.
  • Aug 30, 2026 1.5.3
    Reading - The mail list reopens on the view you left. A folder, the unified inbox or the unread view is where you come back to, instead of the inbox every time. - Tapping a folder shows that folder's rows, rather than the rows of the folder you came from. - Opening the app, switching account or tapping a folder no longer contacts the server when that same view was fetched successfully less than 30 seconds ago. The rows you already have are simply shown. - On an account on which you have declared more than one send-as address, the open message gains a third line under the date, naming the address the message arrived on. It stays off your own outgoing mail, off a delivery that names no address, and off an address that is not one of yours. - The loading indicator no longer blinks for a refresh too short to see. A refresh you did not ask for draws nothing at all when it lands within a quarter of a second; one you asked for still answers at once, and once drawn it stays long enough to be read instead of passing in a flash. - Changing view no longer carries over the refresh error of the view you left, unless that view's own refresh was still in flight when you left it. A folder read moments ago stops showing another account's failure over its own up-to-date rows. Folders
    More…
    - Both move-to-folder dialogs open on a filter field, for accounts whose folder list runs to hundreds. It filters and never reorders: the row under your finger does not move for a reason the screen cannot explain. - A move on IMAP counts only the messages the server confirmed had left the source folder. One that another client had already moved or deleted is no longer counted as moved, so its row and its offline search entry stay put instead of disappearing while the message itself comes back at the next sync. On a server that offers neither MOVE nor a copy the app can trace, nothing confirms the departure, and a batch that did move is reported as failed rather than assumed. Writing - A composer that lost its text no longer tells you to type it again when the outbox is still holding the message. Retyping was the one gesture that destroyed the copy the outbox was keeping, and the refusal now points away from it. - A send is refused while the composer cannot read its own body back and nothing has been typed since, on the immediate send and on the scheduled one alike, instead of going out without the text. - A message the server accepts and then refuses to deliver is no longer shown as sent. The refusal is read once, at the moment of sending, and the outbox row carries what the server said. - A draft the phone is keeping gets its row back when a save goes through, including a save that moved the message to another account. The row no longer stays locked at the top of Drafts. - Sterna now asks the keyboard for a capital at the start of a sentence, in the subject and in the message body. Whether it obliges is the keyboard's own decision, and the recipient fields are left as they were. Accounts - Signing in through the device flow carries the address you typed to the approval page your own server puts up, so its page can fill the field for you. It travels only over an encrypted link. - Sterna names itself and its version to the IMAP servers that ask for it, and skips the answer at the least doubt. - Two preferences filed under an account, the view you last had open and its refresh register, now leave with the account when you sign it out. - The divider that closes the account list in the drawer has room under it.
  • Aug 26, 2026 1.5.2
    Reading - A message relayed by an alias or a redirection often carries the address of whoever the relay says really wrote it. That address gets its own line in the participants panel, labelled "Original sender (unverified)": the header comes from the sending side and nothing here can check it. On encrypted mail the line does not appear. - When the server has no identity for the sender of a message, the reader names the address the envelope carries instead of leaving the line to nobody. - A row of the unread view says which folder it came from. - On an encrypted message whose real subject travels inside the ciphertext, that subject takes the place of the placeholder once the message is decrypted. - The blank the reader keeps around a message is a share of the view rather than a fixed height, so the header stops covering the first lines. - Flicking from one message to the next asks for real finger travel: a scroll that drifts sideways no longer changes message. Writing
    More…
    - OpenPGP has a fourth mode, "Encrypt without signing", which encrypts for the recipient without proving the message comes from you. A long press on the lock opens the list of modes; a short press still cycles. - The composer's top bar gives the subject back the room it needs. - A long message body is parked on disk instead of being handed whole to the screen that reopens it, so a composer carrying several hundred kilobytes of text survives being reopened. - The blind copies of a draft are carried into the copy the server keeps. - A Cc line that names no address, "undisclosed-recipients:;" among them, is kept as written instead of being read as empty. - A save that could not replace the draft it reopened says "Saved as a new draft. The original was kept.", rather than answering that the save went through while a second draft goes to the server. - A reply's quoted text is handed to the composer exactly once, however often the screen is rebuilt. - A draft is destroyed only under the account that holds it, and an emptied draft only under proof that it copied nobody. - A draft already saved keeps its text when the composer comes back without a body. Sending - Cancelling a scheduled send returns the message to Drafts and says so. When its account is gone, it says instead that no draft was kept. - A scheduled send the system forgot is armed again when the app starts. - A send whose process died on the way is parked as "Interrupted, it may already have been sent" instead of being handed over a second time. Sending it again stays your decision, never the app's. - A durable send whose worker cannot be armed stays queued instead of being announced as failed. - A send is no longer abandoned on an account departure that was never proven. Folders - A new setting, "Show only subscribed folders", hides from the folder lists the folders this account is not subscribed to on the server. A folder that carries a role, or that the app can file mail into by name, or that has a visible folder under it, stays in the lists either way. - A folder that is hidden but still watched keeps notifying, and its own menu lives in the drawer: turn the setting off to reach it. - A folder whose listing had to skip a step is no longer reconciled, so nothing is deleted on the strength of a partial reading. Notifications - A new-mail banner no longer offers an action it cannot perform on an account that has been disconnected, and its banners leave with the account. - The new-mail channel is created before a banner is posted on it. - A banner you dismiss stays dismissed instead of being put straight back. - A banner the current pass has just posted is no longer carried off when the group summary above it is torn down. Accounts and home screen - Adding an account writes down where its inbox stands at that moment, so the mail already there is not announced as new. Three of the ways in do this; the OAuth ones do not yet. - The counter cell and the message cell are redrawn when the number of accounts crosses the point where their layout changes. - Signing in through the browser: the address step uses the answer OAuth already gave instead of asking for it again, and the account is filed under the host its session resolves to rather than under the address that was typed.
  • Aug 22, 2026 1.5.1
    Home screen - Two home-screen cells, neither with a configuration screen. One shows the unread total of every inbox and opens All inboxes at a tap. The other lists the newest messages of every inbox, with sender, subject, date and an unread dot, and a tap opens the message it came from. - Dragged larger, the counter cell writes one line and one figure per account, when every line fits at the current font size. Under that height it gives the total, as it always did. Which layout a cell gets is the launcher's decision, not a setting. - Both cells wear the colours the app itself is set to, pure black and Material You included, instead of following the phone's day or night mode. - Each row of the newest-mail cell starts with the same monogram disc the message list draws, and carries the colour dot of the account it came from when several accounts are set up and a colour has been chosen. - With the app lock on, a row shows neither sender nor subject. Writing
    More…
    - Send later has a fifth entry, last in the menu, which opens a calendar and then a clock and schedules the instant they compose. Neither one can pick a moment already gone. - A preset whose hour has passed is no longer offered: after 6 PM, "This evening, 6 PM" is dropped rather than quietly meaning tomorrow. A preset is read at the moment it is tapped, and one that expired while the menu was open schedules nothing. - The composer's four questions, about deleting a draft, discarding without saving, a forgotten attachment and a long recipient list, stay on screen when the phone is turned. - An attachment whose staged copy the system has since evicted is dropped from the composer, with a word saying so, instead of failing the save with a raw English message. OpenPGP - Sterna talks to whichever OpenPGP app is installed, rather than to OpenKeychain alone, through the OpenPGP API's own service query. From two providers up, the account screen offers a row to name the one to use. The choice is remembered, and installing another app later does not move you off the one you were using. Reading - A message part that is present but blank no longer renders as a white screen, and HTML and plain text now say the same thing about it. - Opening a search hit that lives in an IMAP folder no sync has walked reads the message from the server, instead of stopping on "Message is not in the cache." - The unread filter has a third scope: one account's unread mail across its folders, leaving out Trash, Junk, Sent and Drafts. - The unified view's top bar says "All inboxes" in the app's own language. Deleting and moving - On an account whose folders carry no Trash role, the swipe, the reader's bin, a whole selection and the by-sender screen resolve a Trash by name, or create one, instead of destroying the message or refusing the gesture. A delete from inside the Trash still destroys. - A full re-query of a folder can no longer delete cached messages from another folder, and mail that arrives while it is running is no longer swept away by it. - On IMAP, a permanent delete is made under the numbering the row was read under rather than the folder's, and a move is refused when the server will not state the numbering it is about. - The Delete button of a new-mail banner no longer takes a message off the screen when the move would move nothing. - A bulk delete, archive or move says how many messages it settled, instead of always saying one. - A permanent destroy, an Empty trash and a folder delete say the order is under way rather than done, since the server has yet to be told. - A bulk action that failed with no network says the device is offline, as the swipe beside it already did. - A swipe that failed says so in the app's language, and its row comes back. Accounts - A shared mailbox gets its own row under its login, and its own screen carrying two lines: colour and notifications. Both were already honoured; what is new is the way in. - Adding a mailbox that is already there refreshes that account instead of leaving you with a second one. - Signing in to a JMAP server through the browser is retried when the poll reaches no server at all, instead of being counted as a refusal, and the message says which end went quiet. - "Clear this account's cache" erases the decrypted attachment files on disk, not the database rows alone. - The local search index no longer returns hits belonging to an account that has been removed. Elsewhere - With system animations off, the loading indicator under the message list is drawn as a whole ring rather than a few pixels of arc. A correction - With 1.5.0 I wrote on issue #63 that the small indicators, 28 dp and under, keep the Material arc on purpose. That bound is now 24 dp. The list footer's indicator was the last 28 dp one, and it is a full ring from this version on, so a hand-written 28 dp indicator counts as a full-size one again.
  • Aug 16, 2026 1.5.0
    Adding an account - Adding an account now starts from your address: Sterna looks for the settings your mail domain publishes, instead of asking you for them. The manual form is still there when nothing is published. - A JMAP account can sign in through your browser when its server asks for that, with a PKCE proof. The manual form stays reachable when the server hands sign-in over to the browser. Reading - Messages can be opened as plain text instead of their HTML. There is a switch in Settings, Reading and writing, Message, off by default, and an item in an open message's menu that goes either way. - On a message body wider than the screen, the sideways swipe belongs to the body. To change message, go back to the list. - A banner now says when a message's remote pictures were held back, and offers to show them.
    More…
    - The centred loading indicators hold still when system animations are turned off. Writing - A draft can be saved with no network at all. It stays on the device and is carried up to the server on a later sync. - A locally saved draft can no longer end up in a state it cannot come back from. - You can ask for a read receipt on the message you are composing. - Sterna can also answer a read-receipt request it receives. This is off by default (Privacy & security). Turned on, an open message offers to answer, and nothing is sent unless you tap. - The date in a reply's quote line and in a forwarded message's header can be written in UTC instead of this device's local time (Privacy & security). - More of the paths that destroy a draft now ask for proof that the copy was reproduced first. - A server acknowledgement cut off after its first line is no longer counted as a failed send. Accounts and folders - An account can stop writing its own copy into Sent, for an IMAP server that files sent mail there itself (Account, Server settings, Upload sent messages). It stays on by default. - The move-to-folder picker is sorted by folder path, after the standard folders keep their ranks. Notifications and background - A fourth choice of what a notification shows: the sender, the subject and the start of the message. It is not the default. - The notification settings screen shows the settings that are stored, rather than the defaults, and a failed send is announced without naming what the setting hides. - An IMAP push connection whose peer had gone kept re-reading the end of the stream instead of failing. It now fails, and the connection is re-opened. - A background pass that read nothing no longer raises the day's notifications again. - A pull-to-refresh that never comes back now stops after three minutes and says so. Elsewhere - The settings title no longer runs off the right edge of the screen. - The settings choice dialogs scroll, so their last options can be reached. - Snoozing or moving a selection made from a search acts on the whole selection, and says what it could not do.
  • Aug 8, 2026 1.4.9
    Deleting mail - Before emptying a folder or destroying mail, Sterna asks the server where those messages are now, and leaves out anything that has moved in the meantime (JMAP). When the answer does not come, it gives up rather than guessing. - On IMAP, a delete that cannot confirm the server's message numbering is refused instead of risked, so it cannot fall on the wrong message. - Accounts with hundreds of folders no longer run into a database limit when cached folders are purged. - Bulk actions taken on search results now act on the whole selection instead of the part already cached, and say what they could not do. Accounts - A shared account that carries no mail, a calendar share for instance, is no longer added as an account of its own. An account already added by an earlier version stays until you sign out of it and add it again, which also clears its local cache.
    More…
    - Sending now uses the SMTP authentication mechanism the server advertises, PLAIN before LOGIN, instead of always asking for LOGIN. Reading - A pure black dark theme, for OLED screens (Settings → Appearance). - Unread messages carry a background of their own, not just bold text. - Sender initials can be turned off in the message list (Settings → Appearance). - The list of address suggestions in the composer sizes itself to the space left below the field, so it no longer covers the keyboard on a small screen. Settings - The per-account switch under Notifications says what it really does: turning it off stops fetching that account's mail in the background, not just the notification about it. - The note about an account that is not being watched no longer appears when that account's own switch is off, and that switch can be ticked again. - "Messages to sync" means what the screen says: the counts are 100, 1 000 and 10 000, and a change is applied by the next sync instead of needing the account cache cleared. - The "Everything" choice is no longer on that picker. An account left on it now reads as 10 000 messages, the largest count offered. Writing - The confirmation shown when you close a draft is shorter and scrolls, so its buttons stay reachable at large text sizes. - The show/hide eye on a password field appears only when there is something to reveal.
  • Aug 5, 2026 1.4.8
    Mailing lists - Unsubscribing from a mailing list now takes one gesture, using the unsubscribe address the sender publishes. Sterna shows you the message it would send before it goes, and never sends it twice. - When an unsubscribe fails, it says the sender's host refused it, rather than blaming your connection. Mail by sender - A new screen gathers the cached mail from one sender, shows how much there is, and offers to delete it. - From that screen, or from a message you are reading, you can add a rule that handles that sender's mail from now on. It asks first, and says what it will do. - Snoozed messages are left out of the count, and out of the delete.
    More…
    Filter rules - Sterna no longer writes over a filter script it could not read. It names the script that is running, and says plainly when your rules are not running, with a way to put them back. - It tells you what saving the filters costs while an auto-reply is running. Gestures - Swiping a message is about half as long as it was, and a quick flick now works on its own, the way it does in K-9 and Thunderbird. - Long-pressing a message to select it gives a short vibration, so you can feel the list switch to selection. Reading and writing - A recipient that a draft dropped when you reopened it comes back. - The keyboard is asked not to learn from a message being written. - Pulling to refresh the Inbox shows one indicator, not two. - Prompts no longer hide Cancel inside the confirm button, and no longer cut off the sentence that tells you how to undo. This showed up at the largest system font size. Storage - Cached message bodies are dropped once with this update, so the reader can pick up the mailing list information. This is a one-off, not something that happens on every update.
  • Aug 3, 2026 1.4.7
    Selecting mail - During a search, Select all now takes the results on screen instead of the whole folder. Filtering, selecting all and deleting no longer empties the folder. Thanks to devinside for reporting it. - With the unread filter on, Select all takes the unread messages, not the read ones behind them. - Snoozed messages are no longer selected: they are not on screen. Reading - A message you send to yourself now reads by its sender in the Inbox, in the list, inside an unfolded conversation, and in the reader. Sent, Drafts and Trash are unchanged. - A new setting removes the Reply and Forward buttons at the bottom of a message. Reply stays in the toolbar at the top, Forward in its menu.
    More…
    Writing - The prompt you get when leaving the composer now offers Cancel, so you can go back to what you were writing. - It no longer says it will discard the message when a saved draft stays on the server: it says it drops your changes. - Save draft is greyed out when the composer is empty, because saving nothing would delete the draft. - A draft can be deleted from the composer itself. It asks first, then the draft goes to the Trash and can be brought back. Thanks to galdan for asking. Sync - A folder larger than one server page now syncs. The "Everything" setting no longer leaves a large folder unsynced behind a permanent "You're offline". - A conversation with more members than the server serves at once now opens instead of showing nothing. - Local search indexing sizes itself on what the server accepts. - A refresh that fails for a reason other than the network no longer says you are offline: it says the sync failed, and shows why.
  • Aug 1, 2026 1.4.6
    Search - A message you deleted no longer comes back through the search bar. - Offline search still reaches mail older than the sync window. - A damaged search index no longer stops a message from being deleted. - On a new account, a search no longer digs through the Trash, and no longer announces a total it cannot stand behind. Conversations - An unfolded conversation lists exactly the messages its own chip counts, including when mail arrives while it is open.
    More…
    - A snoozed message comes back under its row the moment it is due. - The conversation view setting now says plainly, and at all times, that threads come from the server: grouped on a JMAP account, one row per message on an IMAP account. The switch is never greyed out. Accounts and mail - The unified inbox no longer shows the same message twice, one copy carrying no account name, in bold, and never changing. - A subject or an attachment name that the sender split across several encoded pieces no longer shows a space in the middle of a word. - The Outbox entry in the menu shows its count as soon as a message is queued. The dot on the toolbar keeps its delay, so a message that goes out normally still passes unnoticed.
  • Jul 31, 2026 1.4.2