Skip to content
SkimMail docs edited this page Sep 18, 2026 · 5 revisions

English · Tiếng Việt · 中文

FAQ

Questions this project actually gets, answered from the source rather than from how it ought to work. Where the honest answer is "it does not do that", that is the answer.

Can SkimMail send mail?

No, and that is the point. SkimMail reads mail. It does not send, and it has no outbound SMTP path at all.

That is a deliberate boundary, not a missing feature. The moment a product sends mail it inherits deliverability — SPF, DKIM, DMARC, reputation, blocklists — which is a full-time job orthogonal to reading well. Every hour not spent on deliverability is an hour spent on the inbox.

Why do images not load, and how do I change that?

By default remote images are withheld, because loading one tells the sender that the message was opened, when, and roughly from where. That is the whole mechanism behind a tracking pixel.

You can change it per message (Show images), per sender (Always from this sender / Never), or for the whole instance. Full detail on Remote images in mail.

When images are shown, the server fetches them, not your browser — and it does so through the same network path that account uses for mail. The sender's server sees your instance, not you.

An image still shows as broken after I pressed Show images

Most often the format. SkimMail decides what an image is by inspecting the bytes, not by believing the sender's Content-Type, and it serves only common raster formats.

  • SVG is refused on purpose. It is a document, not a picture: an SVG can carry a <script>, and served from SkimMail's own origin that would be a script running in your session.
  • AVIF is refused because Go's content sniffer cannot recognise it. Admitting it would mean trusting the sender's label — the one thing this design does not do.

Other causes: the sender's server is down or refuses us, the image is over 5 MB, or the address resolves to a private network (refused as SSRF).

Do I need to do anything to my Gmail or Outlook account after upgrading to 1.18.0?

Yes, once. 1.18.0 corrects the permissions SkimMail requests — earlier releases asked for scopes meant for the providers' web APIs, which their mail servers reject, so a sign-in granted under the old scopes cannot be upgraded in place. Reconnect each Gmail or Outlook account from Settings ▸ Accounts ▸ Re-authenticate; it takes you back to the provider's consent screen and updates the account you already have. IMAP accounts with an app password need nothing. See Accounts.

I deleted an account and the storage figure did not drop

On S3, that is expected. The one-time cleanup pass counts objects it cannot account for and stops, because that bucket may also hold your backup archives. It will not delete something it is not certain about. See What the cache does on its own in Operations for the purge command.

On filesystem storage it should drop. If it has not, the reconciliation pass may not have run yet — it runs once, at startup.

Note also that only filesystem storage counts toward the Community storage meter at all: the meter measures DATA_DIR, and S3 blobs are not in it.

go version -m says vcs.modified=true. Is my binary tampered with?

No. It means the source tree had uncommitted changes when the binary was compiled — in practice, the release script rebuilding and re-embedding the web UI while the compiler was already running. vcs.revision still matches the release tag, and the artifact is still signed.

It has happened on several releases and is recorded on each affected release page rather than quietly fixed by re-cutting a tag, because re-cutting would hand different bytes to anyone who had already downloaded the old ones. The cause is now blocked in the release script itself.

Does SkimMail have AI features?

Yes. Six routes — summarise, classify, translate, extract action items, thread summary, and an inbox digest — are built into every release, plus a background classifier that can read up to 20 new message bodies per sync. The button for them is hidden in this release's interface, but hiding a button is a display decision, not a boundary: the routes stay registered, and anything holding a session can call them directly. There is no licence or tier check on any of it.

Nothing is sent anywhere until you configure a provider — Anthropic, OpenAI, Google Gemini, or Ollama, which can run entirely on your own hardware. A default installation sends nothing, and the background classifier needs two separate switches on (AI, and auto-classify) before it runs at all. See PRIVACY.md's "AI features" section for the full disclosure — it corrects three claims earlier releases (1.10.0 through 1.17.0) got wrong about this same code.

Is MySQL supported?

Experimental. SQLite is the default and Postgres is the recommended "serious database" target. MySQL builds and the schema exists, but its full-text search behaves differently and it has had far less real use. The install wizard labels it as experimental for that reason.

Where is my data, and what happens if I uninstall?

One directory — /var/lib/skimmail for the apt package. Neither apt remove nor apt purge deletes it. Most people expect purge to, and it does not: there is no removal script, so nothing automated ever deletes your mail. Erasing it is a manual rm -rf.

The same directory holds master.key, without which the database cannot be read at all. Back up both together or neither. See Operations.

Can two people share one instance?

Yes, from 1.10.0, with AUTH_MODE=users. Each person's accounts, groups, messages and sender preferences are theirs alone, and there are three roles — owner, operator, viewer. Before 1.10.0 that mode existed in name only: a second person could read every mailbox on the instance.

Be on 1.18.0 before you share one. Fourteen operations were gated by role but not by owner between 1.10.0 and 1.17.0 — five fixed in 1.12.0, six in 1.13.0, two in 1.14.0, and one more in 1.18.0. The worst of the six was that search returned every account's subjects and senders to anyone who could sign in; two of them let one person's request open somebody else's mailbox using that person's own saved password; the 1.18.0 fix closed the same hole in Sync now, present since 1.10.0. Single-user instances were never affected. See Security for the 1.18.0 detail.

Sign-ins are a licensed resource: Community 1, Sponsor 3, Pro unlimited. The limit gates creating a user and never blocks reading or restoring — an instance that is over the limit keeps everyone it has. Users are managed from the host with skimmail user; see Users and roles.

Where is the Storage settings tab?

Settings ▸ Storage, since 1.14.0. It was hidden for eleven releases, and the reason turned out to be worth stating: the blob engine itself — filesystem ↔ S3, with a real connection test and a migration that resumes if it is interrupted — had been finished for a long time. What kept the flag off was one screen beside it telling you a rebuild with build tags was required to use Postgres or MySQL. That stopped being true in 1.4.3, when every released build began shipping those drivers compiled in. The flag had been preserving a requirement that no longer existed.

The database migration on that tab is still a runbook, not a button: it tells you the steps to move to Postgres or MySQL, and it is labelled as guidance rather than pretending to perform the move.

The message-body cache panel is a separate thing and is not there. It used to be stranded in this tab; since 1.11.1 it is in Settings ▸ Security — usage, size limit, keep-for and the manual purge — because how much of your mail sits on this disk, and for how long, is a retention question rather than a storage-engine one. See Message body cache.

Can I screenshot SkimMail without leaking my mail?

Yes, since 1.12.0: Settings ▸ Appearance ▸ Screenshot-safe mode substitutes every address, name, subject, preview and attachment name with a realistic stand-in, and stops rendering message bodies entirely. It is off by default and set per browser, not per account. Read Screenshot-safe mode before you rely on it — notably, it deliberately does not mask your group names, your rule tags or your search box.

Why do my Thunderbird tags not show up?

They can, since 1.12.0 — switch on Settings ▸ Appearance ▸ Show server keywords. It is off by default and read-only.

If you turned it on and still see nothing, the likely reason is Gmail: it presents labels as IMAP folders and reports no keywords at all, so there is nothing to show. The feature is for Dovecot, Cyrus, Mailcow and similar. See Server keywords.

Where can I see everything I starred?

Sidebar ▸ Starred, since 1.13.0. It lists every starred message across all your accounts. Before that the star was write-only: you could set it and nothing in SkimMail would show it back to you. See Starred.

I muted a sender by mistake. How do I undo it?

Settings ▸ Security, since 1.13.0 — every sender you have muted or marked VIP is listed there with an undo button. The panel is hidden while the list is empty. In 1.13.0 its heading and buttons showed raw key names (settings.sendersUnmute and friends) because the four translations were missing from all three language files; the buttons worked. Fixed in 1.14.0. See Muted and VIP senders.

Why can I not move a message into another folder from the unified inbox?

You can, but the folder picker offers the folders of the account selected in the sidebar, which in a unified list is not necessarily the account the open message belongs to. Select that account first. See Move to folder.

Is BLOB_ENCRYPT=1 on or off?

On. Only false, 0, no and off turn encryption of cached bodies off; every other value leaves it on, because a setting that defaults to on must fail in the safe direction.

This was backwards in 1.11.0, where only the exact word true counted and 1 silently disabled it. Fixed in 1.11.1. If that describes your instance, see Troubleshooting for how to get the affected bodies re-encrypted.


ReferenceHome · Troubleshooting · Operations · Security


SkimMail · skimmail@base101.app · 2026-09-18 · commit f525934

Clone this wiki locally