Skip to content

v0.5.0

Choose a tag to compare

@maxweilbuchner maxweilbuchner released this 06 Aug 12:58
· 1 commit to main since this release
e7ec220

Added

  • Mail in the Trash can now be deleted for good. Until now the Trash was a one-way holding
    pen: everything you binned stayed there forever, and the only way out was back. A binned
    conversation now offers Delete forever — on its row, in the reading pane, in a
    popped-out window, in the right-click menu and above a ticked selection — behind a
    confirmation, and with no Undo, because there is nothing to undo. It works on IMAP
    accounts (iCloud and the like), on Fastmail, and on Outlook — where it uses the deep
    delete that Exchange keeps beyond "Recover deleted items", so gone means gone; on Gmail
    the action doesn't appear at all rather than appearing and failing, since Gmail can't
    erase mail with the access NoMail asks for today. One caveat the wording is honest
    about: some IMAP servers clear deleted mail on their own schedule, so the conversation
    leaves NoMail immediately but may linger briefly on the server (#228, #230)

  • Tips now teach the things that hide behind a setting. Until now they covered three
    features, so the rest of what NoMail can do only turned up if you went looking in
    Settings. Three new ones appear at the moment they'd help: that Send holds your
    message for a few seconds and the toast can pull it back, that opened mail can wait
    three seconds before it counts as read (offered when you put something back to
    unread), and that a reply can open in its own window instead of the docked panel.
    Each carries a button that makes the change, and the one-tip-per-launch pace is
    unchanged (#227)

  • Right-clicking a conversation in the list now offers everything the open conversation's
    ⋯ menu does. Until now the row menu had two entries at most — "Print…", plus "Not spam"
    if you happened to be in the Spam view — so reporting junk, moving mail back to the
    Inbox or saving a copy meant opening the thread first, even though the list is where
    triage actually happens. Both menus now read from one definition: Reply, Reply all and
    Forward, then Move to Inbox and Report spam (or Not spam), then Download (.eml) and
    Print… A reply from the row menu answers the conversation you right-clicked, not the one
    you happen to have open. Which entries appear now follows the conversation rather than
    the view you found it in, so a junk mail turned up by search offers "Not spam" instead
    of "Report spam" (#219)

  • A sign-in code now shows on its row in the message list, so copying one no longer costs
    an open. The list is where you are while you wait for the mail, and the code is right
    there when it lands: the row reads Code: 847213, hovering it offers Copy, and clicking
    copies without opening the thread. Codes stop showing after a day, by which time they
    have long expired — nothing lingers in the list that someone could read over your
    shoulder and still use (#210)

  • A Follow-ups view in the sidebar answers "what am I still waiting on a reply for?"
    in one screen. Until now a follow-up reminder only showed on its own row, so the only
    way to see everything outstanding was to scroll the Inbox — and a thread you archived
    before the reminder came back was invisible entirely. The new view collects every
    thread with a follow-up, whether it is still counting down or has already resurfaced,
    archived ones included, and a thread drops out of it the moment the reply lands or you
    clear the reminder. Press g f to jump there (#209)

  • A reply now retires a follow-up that had already come back. Before, once a reminder
    had resurfaced a thread, the amber "Follow-up" pill kept insisting there was no reply
    even after one arrived, until you dismissed it by hand (#209)

  • A follow-up that comes back now says how long it has been waiting. The amber banner
    on the conversation used to read "no reply since you set a reminder", which told you
    nothing you didn't already know; it now names the date and time of the message the
    silence is measured from — "Follow-up — no reply since Mon, Aug 3, 14:20" — so a
    two-day wait is distinguishable from a two-week one without scrolling the thread (#208)

  • Sign-in mails hand you the code. Open one and NoMail reads the verification code out
    of the message and puts it above the body with a Copy button, so the six digits you
    came for are one click instead of a careful drag across the mail. It only appears when
    the message really is offering a login code — a booking reference, an order number or
    a promo code doesn't get one — and the code stays selectable by hand either way (#205)

  • Changed your mind about a reminder you set while writing? The "Reminder" pill on a
    queued send, in Drafts and in the Outbox, now opens the same horizons the composer
    offered — next morning, in 3 days, in a week, in 2 weeks — plus Don't remind. Until
    now the pill could only drop the reminder outright, which meant a scheduled send
    sitting there for days had no way to have its chase moved short of cancelling the
    send. Picking a new horizon leaves the mail exactly where it is in the queue. If the
    message has already gone out in the meantime, the pill says so and points you at the
    conversation, where the reminder now lives (#198)

  • A draft in its own window can come back. The composer window's footer carries a
    button that returns the message to the compose dock in the main window, so popping
    one out is no longer a one-way trip you undo by closing the window and hunting the
    row down in Drafts. Everything you typed comes with it, right up to the last
    keystroke, and the window closes behind it (#191)

  • If you write in windows, NoMail can start you there. Settings › Composing now has
    Compose opens in: keep the panel docked to the bottom right, or have C and every
    reply open the message in its own window straight away — no docked panel, no second
    click. Replying twice to the same conversation raises the window you already have
    rather than starting another draft, and a draft opened this way now carries your
    signature and the quoted history from the first keystroke (#192)

  • ⇧H no longer always means tomorrow. Settings › Reading now carries a Follow-up
    reminder choice — tomorrow, in 3 days, next week or in 2 weeks — and ⇧H arms
    whichever one you pick. The command menu names it too, so the entry reads "Remind
    me in 3 days if no reply", and the confirmation gives the date it settled on
    instead of the word "tomorrow". "Remind me…" still picks a one-off time for a
    single conversation (#197)

  • The Remind toggle in the composer footer can now be given a horizon. Clicking it
    still arms the next morning in one go; the chevron beside it offers in 3 days, in a
    week, or in 2 weeks instead. The choice counts from the moment the mail actually
    goes out, so it holds for a send scheduled days ahead, and the Reminder pill in
    Drafts and the Outbox says which horizon is waiting (#189)

  • The chip on a conversation with a reminder armed now offers Change alongside Cancel.
    Picking a new time — tomorrow, in three days, next week, or a date of your own —
    happens right where the time is stated, instead of going back out to the command
    menu. It works the same in a conversation you've popped out into its own window,
    which never had the picker at all (#190)

  • NoMail now offers the occasional tip: one quiet line above the conversation list
    pointing at something you probably haven't found yet — snoozing a conversation
    until you actually want it back, pinning a view as its own section of the Inbox,
    merging two accounts into a single stream. Never more than one at a time, never
    while you're still finding your feet, and each tip bows out after a few launches
    whether or not you read it. Dismiss clears one for now; Never show tips ends them
    for good, and Settings › General › Tips switches them back on (#5, #194)

  • Search no longer pretends mail you archived doesn't exist. Results still lead with
    what the open view holds, but anything the query matches elsewhere now follows under
    an "Elsewhere" heading, and every one of those rows says where it lives — Trash,
    Spam, All mail, Sent, Snoozed. Searching from the Inbox for a receipt you binned
    last week finds it, and tells you it's in the Trash instead of coming back empty
    (#180)

  • Google's Gemini joins OpenAI, Anthropic, and xAI in Settings › Intelligence: pick it,
    paste your own API key, and summaries, drafts, and labeling tie-breaks go to Gemini
    instead of the on-device model. Labeling embeddings still never leave your Mac (#142)

  • A "remind me if no reply" reminder is no longer a one-way door: while it's armed
    the thread carries a chip with the time it will resurface — in the list and above
    the subject — and a Cancel button next to it calls the whole thing off. "Cancel
    reminder" is in the command menu too. Changing your mind no longer means waiting
    for the reminder to fire (#165)

  • A conversation that comes back because nobody replied now says so in the list: it
    carries an amber "Follow-up" pill, the same signal the open conversation has always
    shown above the subject. No more wondering why an old thread is suddenly unread
    again — and asking for a new reminder clears the old one instead of stacking (#179).
    The pill clears itself too: press its × to put the conversation behind you without
    opening it (#186)

  • Asking to be reminded if nobody replies is now one click while you write: the composer's
    footer carries a Remind button that lights up when it's armed, and clicking it again calls
    it off. Setting one no longer means opening the send-options menu, which is now purely
    about when the mail goes out (#185)

  • A reminder no longer always means tomorrow morning: "Remind me…" in the command menu
    opens a picker with the horizons a chase actually needs — tomorrow, in 3 days, next
    week, in 2 weeks, or any date and time you pick. ⇧H still arms tomorrow 9am on the
    spot, and its confirmation now offers "Change…" if that wasn't the horizon you meant.
    Chasing Friday's contract on Monday no longer means re-arming it every morning (#166)

  • Resting on a conversation's hover buttons — star, snooze, archive, trash, label — or on
    its checkmark now names the action and shows the key that does the same thing, in the
    same tidy bubble the open-conversation toolbar has always used (#172)

  • A reminder set while writing is now visible on the mail it's waiting for: a queued or
    scheduled send carries a "Reminder" pill next to its send time, in Drafts and in the
    outbox above Sent, and clicking that pill drops the reminder while the mail goes out
    as planned. Changing your mind about a send-later reminder no longer means cancelling
    the send itself and writing the whole thing again (#173)

  • A draft no longer has to live in the corner: the composer's header carries a button that
    moves it into a window of its own, so you can write a long reply beside the conversation
    you're answering, keep the inbox in view, or park the draft on a second monitor. It's the
    same draft either way — everything you type keeps autosaving — and asking a draft that
    already has a window to pop out just brings that window forward (#182)

Fixed

  • An action that changes nothing no longer pretends it did. Archiving mail that was
    already archived, starring a starred conversation, binning something already in the
    Trash — such a request used to put up a success toast with an Undo that had nothing
    to take back, and still cost a pointless round-trip to the mail server. The engine
    now notices when a change would change nothing, skips the server call, and stays
    silent; when only part of a selection actually moves, the toast and its Undo cover
    exactly that part (#231)

  • "Move to Inbox" no longer appears on conversations it cannot move. Both thread menus —
    a row's right-click and the open conversation's ⋯ — offered it on essentially everything:
    in the Inbox it did nothing at all, and on snoozed or binned mail it said "Conversation
    moved to Inbox", offered you an Undo, and left the conversation exactly where it was,
    because the snooze timer and the Trash both outrank the label it puts back. That one slot
    now holds whichever verb genuinely brings that conversation back: "Move to Inbox" on
    archived mail, "Un-snooze" on snoozed mail, "Restore" on binned mail, "Not spam" on junk
    — and nothing at all on mail already in your Inbox, or on your own sent mail. The
    command menu's "Move to Inbox" follows the same rule (#226)

  • A conversation already in the Trash no longer offers to move it there. The Trash button
    sat in the reading pane, in a popped-out window, on a row's hover actions and in the bar
    above a ticked selection whether or not the mail was already binned — and clicking it in
    the Trash said "Conversation moved to Trash", offered you an Undo, and moved nothing. The
    button now steps aside wherever the conversation is already there, exactly as has,
    and comes back the moment you restore it (#225)

  • e and the row's hover button now restore a binned conversation instead of archiving it.
    Both used to decide between Archive and Restore by which list you were standing in, so a
    conversation you binned and later found through search — it comes back under "Elsewhere",
    labeled "Trash" — was archived by both: nothing moved, and the toast claimed it had. The
    reading pane could offer you "Restore", tell you the key was E, and E would archive.
    Both now follow the conversation: hover a binned hit anywhere and the button reads
    "Restore", press E and it comes back. With a mixed set of conversations picked out, E
    now does nothing rather than guessing which half you meant (#224)

  • A conversation you binned can be restored from its own window. Popping one out of the
    Trash used to hand you the inbox's action bar: the first button read "Archive", clicking
    it said "Conversation archived" and left the mail exactly where it was, and the ⋯ menu
    offered "Report spam" on mail already on its way out — so a popped-out window was a dead
    end you could only leave by going back to the main one. The bar now reads "Restore" and
    genuinely takes the conversation out of the Trash, and the menu withholds "Report spam".
    Both now follow the conversation rather than whatever list you opened it from, so a
    binned mail turned up by search offers Restore too (#223)

  • Right-clicking one of several ticked conversations now acts on all of them. Ticking four
    and right-clicking one of the four used to report, move or download exactly the one under
    the pointer and leave the other three sitting there — the menu said "Report spam", you
    clicked it, and three conversations you had picked out by hand stayed put with nothing on
    screen admitting it. Every menu entry now names the number it is about to touch — "Report
    4 as spam", "Move 4 to Inbox", "Download 4 (.eml)" — so the count is there before you
    commit to it. Right-clicking a conversation outside the ticks still acts on that one
    alone, and either way your ticks survive: closing the menu with Escape costs you nothing.
    Reply, Reply all, Forward and Print… step out of the menu above a single conversation,
    having no sensible meaning across four (#222)

  • Double-clicking the filter bar no longer leaves a word highlighted in it. Toggling
    "Unread first" twice, or clicking twice in the empty space beside a chip, used to pick
    out the nearest button's label in the selection colour and leave it there until you
    clicked elsewhere — buttons reading like text you were meant to copy. The bar, the
    dropdown menus and the conversation's action row are all chrome now, and clicking in
    them selects nothing. Typing in the filter's text box is unaffected (#221)

  • The view's own ⋯ has moved up beside the view's name, so there is only ever one ⋯ on the
    right edge of the window: the open conversation's. With a mail open the two used to stack
    40px apart on the same line, same dots, nothing saying which was which — and the upper one
    held "Delete view" while the lower one held "Report spam". A slip of the mouse could throw
    away a view you had built while you were trying to flag junk. The bell that governs a
    view's notifications moved with it, since it too is about the view rather than about the
    list; filtering, grouping and sorting stay on the toolbar where they were (#220)

  • A search result you are looking at no longer disappears while you read it. Search kept only
    the best 30 matches on screen, and it re-picked those 30 every time your mail changed — so
    opening one hit, which loads its text and reshuffles how well everything else scores, could
    quietly push a result at the bottom of the list out of it. Nothing said so; a match that
    vanished looked exactly like mail you never had. Results now stay put until they genuinely
    stop matching what you typed, and a search across several accounts gets a full set of
    matches from each mailbox instead of thirty shared between them (#218)

  • Signing an account out now takes everything it left on this machine with it. Removing an
    account cleared its mail but quietly kept the rest — the views you had made for it, your
    grouping and sorting choices, half-written drafts, calendar invitations, and anything still
    queued against it. None of it was reachable from the app again and nothing ever cleaned it
    up, so a profile that had connected and dropped a few accounts carried all of them for good.
    One of those leftovers, a queued draft deletion, quietly retried and failed on every launch.
    Upgrading clears out what earlier sign-outs left behind; views and settings that belong to
    the combined inbox rather than to one account stay exactly as they are (#217)

  • Search results now hold their order while you read them. Opening a hit used to shuffle the
    list a second or two later, and not just the row you opened: everything around it moved too,
    so after reading one result you couldn't find your place to open the next, and j/k from
    where you left off landed somewhere unrelated. Results still stay live — a hit you archive
    or label still updates in place, and mail that arrives while the search is open still shows
    up — but nothing that is already on screen changes position any more. Anything genuinely new
    joins the bottom of the list, and typing another character ranks the results afresh (#215)

  • Throwing a thread away now takes its follow-up and its snooze with it. A reminder set on a
    thread you later trashed — or one the server deleted out from under you — kept counting
    down, and when it came back it left a note on a conversation you could no longer open to
    clear it. Trashing a thread now calls off whatever was scheduled against it, and reminders
    left over from before are cleaned up once when you upgrade. Untrashing doesn't re-arm a
    reminder the trash cancelled — set it again if you still want it (#214)

  • A draft that is already on its way no longer opens as a composer you can type into. Picking
    one out of Drafts — a send counting down, or one scheduled for next week — handed you an
    ordinary editor, and every keystroke in it was thrown away the moment it tried to save: the
    outgoing message is assembled when it actually goes out, so NoMail refuses to rewrite it, and
    nothing on screen said so. Clicking such a draft now tells you the send is queued and leaves
    you at the row, where Cancel is the way back to a draft you can edit. And a composer that
    can't save what you type now says as much across the top instead of taking it anyway (#212)

  • A composer window that reloads mid-countdown comes back as the send, not as the draft.
    Sending from a window leaves it up for the length of the undo window, because the
    countdown is the only place Undo send lives. If that window reloaded in the meantime — a
    crash, the error screen's Reload button, ⌘R — it reopened as an ordinary composer for a
    message that was already queued: nothing said a send was in flight, the countdown and its
    Undo send were gone, and the window no longer closed itself. Worse, what you typed into
    it did not stay there. The outgoing mail is assembled at the moment it actually goes out,
    so those edits rode along and the message that arrived was not the one you pressed Send
    on. The window now rebuilds the countdown it was showing, Undo send and all, and a draft
    with a send queued against it can no longer be written to from anywhere (#207)

  • Copy buttons actually copy. Copying the version from Settings › About, the details
    from the crash screen, or the sign-in link during setup all said "Copied" while
    leaving the clipboard untouched — installed builds were refused the clipboard
    outright, so only the develop-time app ever worked. Copying now goes through the
    app itself, and a button that can't copy no longer claims it did (#205)

  • Replying right after sending starts the reply, and reloading no longer loses your
    open composers. With Compose opens in set to Its own window, hitting R on a
    conversation you had just sent from raised the window that was still counting down
    the undo — a frame with nothing in it but the toast — and wrote no reply at all.
    That window is now left to close itself and the reply opens as it should. The other
    way round: after the main window reloaded — a crash, Reload, the error screen's
    button — NoMail forgot which conversations already had a composer open and replying
    started a second one beside the first. It remembers across a reload now (#201)

  • A mail link, a notification or a draft coming back from its own window no longer
    vanishes when the timing is unlucky. If the NoMail window happened to be reloading —
    after a crash, after Reload, after the error screen's button — anything the system
    handed it in that moment was dropped: a mailto: link opened no message, a notification
    click went nowhere, and Pop in closed the composer's window without docking the draft.
    All three now arrive as soon as the window is back. Open NoMail from the menu bar and
    the dock icon also bring back the inbox again, instead of raising a popped-out
    composer and leaving you with no way to it (#202)

  • Turning Unified inbox off now takes ⌘0 with it, straight away. With more than one
    account signed in, the "All inboxes" command stayed in the command menu and the
    Shortcuts list after the setting was switched off — and the key still worked — until
    you happened to do something else in the inbox; switching it back on left the command
    missing the same way. Both directions now land the moment you make the change (#200)

  • Messages no longer stretch on and on. Mail built on a full-height stylesheet — payment
    receipts and most marketing templates — made the white message frame keep growing
    downward, burying the rest of the conversation and the reply box under thousands of
    pixels of blank space, with nothing you could do about it. A message now stops at its
    own height and stays there (#199)

  • The unread number next to Inbox now matches the unread conversations the Inbox is
    actually showing you, and the dock badge agrees with both. If you had a view set to
    skip the Inbox and also pinned as an Inbox section, its mail appeared in the list but
    was subtracted from the count — three places quoting three different numbers at the
    same moment. Pinning a view as a section now settles it: that mail is in your Inbox,
    so it shows there and it counts there. Snoozed conversations no longer turn up in a
    pinned section either (#193)

  • The count beside the Inbox title now includes the conversations sitting in its pinned
    sections. With a view set to skip the Inbox and pinned as a section, the header was
    quoting only the conversations below the sections — reading 4 with 6 on screen (#204)

  • Accounts you connected with a server address and app password now get the same patience
    limit as the rest: if the mail server accepts a request and then goes quiet, NoMail gives
    up after a spell, drops the dead connection and tries again on a fresh one, instead of
    letting that account's mail stop arriving until you restart. Signing in against a wrong
    server address or port also says so in seconds rather than a minute and a half, and
    fetching a large message or sending one with attachments keeps the long patience it
    needs (#196)

  • Clicking a draft that has since been sent or discarded now tells you so, and the
    row leaves the pane. A draft can disappear between the moment the Drafts pane drew
    it and the moment you click it — its scheduled send fired, or you discarded it in
    another window — and until now the click simply did nothing: no composer, no
    message, nothing to distinguish it from a click that missed (#188)

  • Opening a draft that lives on the server no longer freezes the rest of the Drafts
    pane. While one draft was being brought down, every other row quietly stopped
    responding to clicks while still looking perfectly clickable — now only the row you
    opened waits, and the others carry on. If the connection stalls partway, the draft
    gives up and says so instead of leaving the pane dead for the rest of the session (#187)

  • A stalled connection can no longer hang NoMail indefinitely. Requests to your mail
    provider now give up after a spell and surface as a normal, retryable failure, rather
    than waiting on an answer that is never coming — large attachments still get the long
    patience they need (#187)

  • The checkmark on a conversation in the list is easier to hit: clicking just beside it
    now checkmarks the conversation instead of opening it. The mark itself looks the same —
    it just no longer demands pixel-perfect aim (#181)

  • The message count on a conversation in the list is now right before you open it. A
    conversation that had gained and lost a message behind the scenes — which happens every
    time a draft in it is saved — could sit there reading one higher than it really was,
    and only corrected itself once you opened it (#183)

  • A reminder now stands itself down the moment the reply arrives. Answered conversations
    no longer keep advertising a resurface that will never happen, and you no longer have to
    cancel the reminder by hand to be rid of it. Your own follow-up doesn't count — chasing
    someone again leaves the reminder exactly where it was (#174)

  • Dismissing the "Follow-up — no reply" banner now clears it immediately instead of
    leaving it on screen until the next mail arrived

  • Checkmarking a conversation and then scrolling away no longer snaps the list back to
    that row a moment later. It was easiest to hit while new mail was still arriving (#176)

  • Discarding a draft no longer leaves a stray item stuck in the outbox. The draft was
    deleted correctly, but a queued upload for it was re-created on the way out and then
    had nothing left to upload (#177)

  • A draft that can't be saved no longer traps you in the composer. If saving fails on the
    way out, the panel now says so and offers a way to close anyway, instead of sitting
    there ignoring Escape and every other shortcut with nothing to explain why. Opening a
    draft and closing it again without typing anything also no longer rewrites it (#178)

  • A keyboard shortcut pressed in the instant after closing a composer no longer goes
    nowhere. Hitting Escape and immediately typing g d could drop the keystroke
    entirely, leaving you sitting in the inbox wondering why nothing happened (#175)