The two rules about rules
1
All conditions must match
Conditions inside a rule are ANDed. There is no OR and no nesting — for
“either/or”, write two rules. This is a deliberate limit: a filter you can’t
predict is worse than no filter when the consequence is deleted mail.
2
The first match wins
Rules are evaluated in order, top to bottom. The first rule whose conditions
all match decides the outcome, and no later rule runs.
Actions
Allow
Deliver normally and stop. Its purpose is to sit above a broad block and
carve an exception out of it.
Block
Drop the message permanently. Not stored, not delivered — but still counted.
Route
Deliver to endpoints you name instead of the address’s own.
Block is a hard drop
That is the point rather than a limitation: mail you told us to throw away shouldn’t cost you storage, retention, or a delivery attempt. If you want the message kept, use route with no endpoints instead — that quarantines it, leaving it readable over the API and MCP while delivering it nowhere. It’s also the safe way to try out a new rule before letting it destroy anything.Blocked mail still counts against your allotment
A rule cannot give back the one cost that was already paid. By the time any rule runs, the message has been accepted, parsed, and billed for as a received email — so it is metered as one, exactly like a message you keep. What blocking saves is everything after that: storage, the retention window, delivery attempts, and the noise in your inbox. What it cannot save is the fact that the message arrived.Route replaces, it doesn’t add
Aroute rule sends the message to its endpoints instead of wherever the
address would have sent it. “Send receipts to the billing webhook” means instead
of, not as well as. The same fan-out limit applies as everywhere else: at most
one webhook and one email destination per rule.
Scope
A rule applies to the whole account by default. SetdomainId to narrow it to
one domain, or addressId to narrow it to a single address route. You can’t set
both.
Narrowing only limits which mail a rule judges. It never changes where mail
that isn’t judged would otherwise go, and it does not make a narrower rule beat
a broader one — only position does that. An account-wide allow sitting above a
domain-wide block wins, which is exactly the arrangement you usually want.
Fields and operators
All comparisons are case-insensitive. Attachment fields match if any
attachment matches — except
not_contains, which must hold for every one, so
“no .exe attachment” isn’t satisfied by an innocent second file.
There is deliberately no regular-expression operator. Patterns you write would
run against text a stranger chose, on every message — that combination is a
denial-of-service waiting to happen, and
contains covers what filters
actually need.One message, several recipients
A single message can name several of your addresses. Rules are evaluated per recipient, and the outcomes are reconciled:- If a block covers every recipient, the message is dropped.
- If it covers only some, the message is still stored for the others. The blocked recipients simply lose their delivery.
Reviewing what was blocked
Because a block leaves nothing behind, every one writes a record of the envelope — sender, recipient, subject, which rule caught it, and when. Read it in the console under Shield → Recently blocked, or over MCP withlist_shield_blocks.
These records expire on the same retention schedule as stored mail, and survive
the deletion of the rule that produced them, so the log of what a since-removed
rule was catching stays readable.
Where shield sits in the pipeline
1
Virus check
Mail SES flags as carrying a virus is dropped before rules are consulted.
2
Shield rules
Evaluated here. A blocked message is dropped and metered — it never reaches
storage or delivery, but it counts as received.
3
Quota
Every plan hard-blocks past its monthly allotment. Paid plans can turn on
pay-as-you-go to keep receiving and be billed for the overage instead.
4
Store and deliver
The message is written down and fanned out to its endpoints — a shield
route verdict overriding the address’s own destinations.Limits
A cap rather than a paid feature: filtering is how an inbox stays usable, and
putting it behind a paywall would price the fix out of reach of exactly the
accounts drowning in junk. The cap only bounds how much matching work each
message can trigger.