Catch-All IMAP in Thunderbird: Filter on the To Header
A catch-all mailbox on an IMAP account looks, from Thunderbird’s point of view, exactly like any other mailbox: one folder tree, one set of messages, one list. That is the trap. You generate fifty addresses on a catch-all domain, hand each one to a different site or tool, and every confirmation, every newsletter, every verification link lands in the same undifferentiated pile. Thunderbird has no idea that [email protected] is conceptually a different inbox from [email protected]. If you want to tell which site sent which confirmation, you have to teach Thunderbird to read the To header and sort on it. This primer covers the setup, the filter logic, and the parts that will annoy you.
Why a catch-all domain arrives as one mailbox in Thunderbird
IMAP is a protocol for reading a mailbox, not a protocol for reading a domain. When you configure an account in Thunderbird, you point it at a host, authenticate with a username and password, and it enumerates whatever folders the server exposes. A catch-all inbox receives any email sent to any address on the domain, but it stores all of that mail in the same place. There is no per-address folder structure unless you build one, and the server has no reason to build one for you.
This is not a Thunderbird bug or a server misconfiguration. It is how catch-all delivery works by design. The catch-all domain accepts everything addressed to a host that does not have a dedicated mailbox, and the receiving system drops it into the default inbox. AllMail.one provides catch-all email domains on exactly this model, and the same behavior applies whether you connect with Thunderbird, a webmail client, or a script pulling over POP3. The mailbox is one mailbox. The addresses are aliases into it.
The consequence is blunt. Without filtering, you cannot tell which site sent which confirmation. You sign up for a forum with one generated address, register a trial with another, and both confirmations arrive with identical sender lines and near-identical subjects. If you are running signups at any volume, the inbox becomes useless within a day. The fix is not more addresses. The fix is making Thunderbird look at the one header that actually differs between messages: the To header.
Reading the To header instead of the From header
Most people set up filters on the From header because that is what they are used to. For a catch-all, that is the wrong lever. The From header tells you who sent the message, and a lot of automated senders reuse the same address across every customer. The To header tells you which of your generated addresses the message was actually addressed to, and that is the piece of data you control and can key on.
Thunderbird supports filtering on the To header natively in the message filter dialog. You add a rule, choose “To” from the header dropdown, and match against the generated address. The match can be a substring, which matters because the To header often carries a display name alongside the address, like Site Name <[email protected]>. Matching on the local part alone, or on a consistent prefix you assign per site, is more reliable than matching the full address string.
Here is the skeptical part. To-header filtering only works if you are disciplined about address generation. If you hand out random strings with no pattern, you will be writing one filter per address forever. If you adopt a naming convention, such as a site slug plus a counter, you can write a handful of filters that cover hundreds of addresses. Decide the convention before you generate the first address, because retrofitting one is miserable.
One more caveat: some senders put the recipient in Bcc or use a mailing list address in the To field while the real recipient sits in an envelope header that Thunderbird does not expose in filters. In practice this is rare for transactional confirmation mail, which is the bulk of what a catch-all receives. When it happens, the message falls through your filters into the inbox, and you deal with it manually. Do not build a system that assumes 100 percent coverage.
Where virtual folders fit into the picture
Thunderbird’s saved search folders, usually called virtual folders, are the cleanest way to surface filtered mail without physically moving messages. A saved search is a query that displays matching messages from one or more source folders in a single view. You define the search criteria, point it at the catch-all inbox, and Thunderbird shows you a live folder containing only the messages that match.
The advantage over moving messages into real folders is that nothing gets duplicated on the server and nothing gets lost if a filter misfires. A message stays in the catch-all inbox and appears in as many saved searches as its headers match. If you later decide your naming convention was wrong, you edit the search criteria and the view updates. Physical filter moves are permanent in a way that saved searches are not, and for a system you are still tuning, that matters.
Saved searches also survive the thing that breaks most catch-all setups: a flood of mail. When a link building run pushes thousands of registration confirmations through the domain, the inbox itself becomes unreadable, but the saved searches stay useful because they are queries, not containers. You can have one saved search per project, per tool, or per client, all drawing from the same raw inbox, and none of them interfere with each other.
Building the filter and saved search step by step
Start with the account connected and syncing. In Thunderbird, open Tools, then Message Filters, select the catch-all account, and create a new filter. Name it after the project or site group it covers. In the criteria row, set the header dropdown to “To” and the condition to “contains”, then enter the distinguishing substring of your generated address, for example shop- if you prefix ecommerce signups that way. Leave the action as “Mark as read” or “Tag message” rather than “Move to folder” if you intend to use saved searches, because moving defeats the purpose of a query that reads the inbox.
Next, open File, New, Saved Search. Give it a name, choose “Search online messages” or the local equivalent depending on whether the account is set to sync full bodies, and set the criteria to match your tag or your To-header substring. catchall email covers this in more depth. Point the search at the catch-all account root so it covers the inbox and any subfolders. Save it, and the virtual folder appears in the folder pane. Repeat per project. Ten saved searches is a reasonable ceiling before the folder pane becomes its own navigation problem.
Test the whole chain before you trust it. Send a message to one of your generated addresses from an unrelated account, watch it arrive in the catch-all inbox, and confirm it appears in the correct saved search within a refresh cycle. Thunderbird’s saved search refresh is not always instant, especially on large mailboxes or slow IMAP connections, so give it a minute before concluding the filter is broken. If the message never appears, the problem is almost always the To-header substring, not the search itself.
Set the account to check mail at an interval that matches your workflow. A catch-all used for registration confirmations does not need a one-minute poll; five or ten minutes is fine and reduces load on the server. If you are pulling mail for an automated pipeline, POP3 access or IMAP access from a script may be a better fit than desktop polling, but for manual verification work Thunderbird’s periodic check is adequate. AllMail.one offers POP3 and IMAP access, so you can run Thunderbird for human review and a script for automation against the same account without conflict, as long as you are careful about which client marks messages as read.
Naming conventions that make filtering survive scale
A catch-all inbox that receives any email sent to any address on the domain will eventually receive a lot of mail from sources you did not plan for. Spam, misdirected mail, and the occasional address-guessing bot all land in the same place. The naming convention is what keeps the signal separable from the noise. Use a structured local part: a project or site slug, a separator, and a short disambiguator. Something like proj-shop-01 or clientA-forum-7 reads clearly in a To header and gives you a stable substring to match.
Avoid random strings unless you have a separate record of what each one maps to. If you must use random strings, keep a spreadsheet or a database table mapping address to site and date, because Thunderbird cannot reconstruct that for you. The address is the only durable identifier in the message, and if it is opaque, the filter system degrades into manual sorting. This is the single most common failure point in catch-all setups, and it has nothing to do with Thunderbird.
For link building work, the convention matters even more because the volume is higher and the tools are automated. Catch-all email for link building means generating addresses for GSA SER, RankerX, and Xrumer campaigns, each of which may register on hundreds of sites. AllMail.one supports GSA SER, RankerX, and Xrumer, and the practical pattern is one address prefix per tool per campaign, so a saved search per prefix gives you a per-campaign confirmation view without touching the raw inbox. If you are running catch-all email for GSA SER specifically, prefix by project and let the tool’s own logs carry the site-level detail.
Watch the blacklist side of this too. A domain used for high-volume registration will occasionally end up on a DNSBL because some receiving server decided the traffic looked like abuse. AllMail.one monitors domain blacklists via DNSBL and surfaces alerts, but you should still know how to check. If confirmation mail suddenly stops arriving for a campaign that was working yesterday, a blacklist listing is a plausible cause, and it is worth ruling out before you rewrite filters that were never the problem.
Operational habits that keep a catch-all usable
Keep the raw inbox lean. A saved search is only as good as the mailbox it queries, and a mailbox with 200,000 messages will make Thunderbird sluggish regardless of how clean your filters are. Archive or delete old messages on a schedule, and do not treat the catch-all as permanent storage. The confirmations you need are usually relevant for days, not months. If you need a record, export or forward the ones that matter rather than letting the inbox grow without bound.
Use tags as a second axis. Thunderbird tags are fast to apply via filter and easy to search, and they give you a way to mark messages that need human attention without creating another folder. A filter that matches a To-header substring and applies a tag, combined with a saved search that shows only tagged messages, gives you a review queue that stays separate from the firehose. This is more robust than a chain of move rules, which tend to conflict as they multiply.
Decide early how you handle anonymity and payment, because it affects account recovery. A no KYC email service that accepts crypto-only payment is convenient for exactly the reason you would expect, but it also means there is no billing relationship to lean on if you lose credentials. AllMail.one requires zero KYC and accepts crypto payments including USDT and USDC across TRC-20, BEP-20, and Polygon networks, which is fine for operational mail but demands that you store credentials and recovery details somewhere durable. Anonymous signup is not the same as recoverable signup, and a catch-all you cannot log into is worthless.
Keep a second client configured as a fallback. Thunderbird profiles corrupt, extensions break, and a laptop dies. If the same catch-all account is configured in a second client, or accessible over POP3 access from a server you control, you can verify mail delivery when Thunderbird misbehaves. This is basic redundancy, but it is the difference between a ten-minute hiccup and a lost afternoon of debugging filters that were working fine.
The setup is not complicated, but it is not automatic either. Thunderbird will happily show you a catch-all account as one mailbox forever, and no amount of address generation will change that. Filtering on the To header, backed by a naming convention you actually follow and a set of saved searches you keep tidy, is what turns a catch-all domain from an undifferentiated pile into a usable verification inbox. If you are starting fresh, take the three-day free trial AllMail.one offers, generate a dozen addresses under a test prefix, and build the first saved search before you commit to a convention. Domain replacement support is there if a domain gets burned, but the filtering habits are what you carry from one domain to the next.