Ga direct naar de documentatie
API

Een regel aanmaken

Voorwaarden aan de ene kant, acties aan de andere. Ingeschakeld tenzij je anders zegt.

POSTapi.openemail.uk/rules

Voert de echte aanroep uit op je workspace, met je eigen sleutel.

POST /rules

Voorwaarden aan de ene kant, acties aan de andere. Ingeschakeld tenzij je anders zegt.

Voorbeeld

Vereist rules:write. Geeft 201 terug. position wordt niet geaccepteerd. Een nieuwe regel komt achteraan de lijst, en verplaatsen doe je met POST /rules/reorder.

curl
curl -X POST "$OE/rules" -H "$AUTH" -H "Content-Type: application/json" \  -d '{    "name": "Receipts to their own label",    "match": "all",    "conditions": [      { "field": "from_domain", "op": "matches", "value": "*.stripe.com" },      { "field": "subject", "op": "contains", "value": "receipt" }    ],    "actions": [      { "type": "label", "value": "USER_RECEIPTS" },      { "type": "archive" }    ],    "stopProcessing": true  }'
Antwoord
{  "object": "rule",  "id": "rul_7f3a1c94e05d3862c1f0a44b",  "name": "Receipts to their own label",  "description": null,  "enabled": true,  "position": 3,  "match": "all",  "conditions": [    { "field": "from_domain", "op": "matches", "value": "*.stripe.com", "negate": false },    { "field": "subject", "op": "contains", "value": "receipt", "negate": false }  ],  "actions": [    { "type": "label", "value": "USER_RECEIPTS" },    { "type": "archive" }  ],  "stopProcessing": true,  "lastMatchedAt": null,  "matchCount": 0,  "createdAt": "2026-08-30T10:41:02.000Z",  "updatedAt": "2026-08-30T10:41:02.000Z"}

Een regel die hier wordt aangemaakt staat AAN en werkt vanaf het volgende bericht. Dat is de juiste standaard voor een aanroep die iemand bewust doet, en het is het omgekeerde van de MCP-tool createRule, die dezelfde regel UITGESCHAKELD wegschrijft: een model dat besluit mail te archiveren hoort niet al te archiveren voordat een mens de regel heeft teruggelezen.

Een dubbele name op dezelfde connectie is rule_name_taken, een 409. Namen zijn hoe je een regel herkent in een uitvoerlog en in het instellingenscherm, dus twee regels die "Newsletters" heten leveren een rapport op dat niemand kan lezen.

De 101e regel is rule_limit_reached, een 422. Het plafond is een beveiliging tegen een script in een lus en geen administratieve grens, en het is niet vergrendeld. Twee aanmaakaanroepen die bij 99 tegen elkaar racen kunnen allebei slagen.

Wat een voorwaarde kan vragen

Een voorwaarde is { field, op, value }, met een optionele header die zegt welke header gelezen wordt en een optionele negate. value is op de lijn ALTIJD een string. Numerieke velden worden na Number(value) als getal vergeleken, en de twee booleaanse velden nemen de letterlijke strings "true" en "false", omdat één veld met één type een schema is dat een OpenAPI-generator kan beschrijven en een unie van drie niet.

VeldLeestOperatoren
`from`De From:-header, genormaliseerd zoals de blokkeerlijst dat doet.tekst
`from_domain`Het domein van From: en zijn BOVENLIGGENDE domeinen, tot twee labels diep: een bericht van mail.corp.example.com matcht ook corp.example.com en example.com, en matcht niets voor com.tekst
`envelope_from`De SMTP-MAIL FROM. Bij elke mailinglijst anders dan from, en de enige identiteit waartegen een reject geschreven mag worden.tekst
`to`, `cc`, `bcc`Eén willekeurig adres in die header.tekst
`recipient`Elk adres in to, cc of bcc: de afkorting voor alle drie.tekst
`reply_to`De Reply-To-header.tekst
`delivered_to`Het canonieke adres waarop deze kopie is afgeleverd, zonder plus-tag en in kleine letters, en zo wordt een catch-all-alias gematcht.tekst
`subject`De onderwerpregel zoals hij binnenkwam.tekst
`body`Het tekstdeel, of de HTML teruggebracht tot tekst. Begrensd, zodat een body van 20 MB niet volledig wordt doorzocht.tekst
`header`Elke header, benoemd in het eigen header-veld van de voorwaarde. Daar verplicht en vóór de vergelijking naar kleine letters gebracht.tekst
`list_id`De List-Id-header: de aanduiding waarmee een mailinglijst zich identificeert.tekst
`attachment_name`De bestandsnaam van een willekeurige bijlage.tekst
`attachment_type`Het MIME-type van een willekeurige bijlage, bijv. application/pdf.tekst
`has_attachment`Of er überhaupt een is.equals "true" / "false"
`spam`Het spamoordeel dat het afleverpad velde, vóór jouw regels liepen.equals "true" / "false"
`attachment_size`De grootte van een bijlage in bytes. Een vergelijking matcht zodra één bijlage eraan voldoet.gt, lt, equals
`message_size`Het hele bericht op de lijn, in bytes.gt, lt, equals
`hour`Uur van binnenkomst, 0–23, UTC.gt, lt, equals
`weekday`Dag van binnenkomst, 0–6, zondag is 0, UTC.gt, lt, equals
OperatorWat het doet
`matches`Een glob, en alleen een glob: * voor een willekeurige reeks tekens, ? voor één teken. Geen reguliere expressies. Een patroon van een API-client draait op het afleverpad, en een patroon dat daar catastrofaal terugkrabbelt is een mailbox die niets meer ontvangt.
`contains`Deelreeks, hoofdletterongevoelig.
`equals`De hele waarde, hoofdletterongevoelig. Op een numeriek veld: numerieke gelijkheid.
`starts_with`Voorvoegsel, hoofdletterongevoelig.
`ends_with`Achtervoegsel, hoofdletterongevoelig.
`gt`, `lt`Numeriek, alleen op de vier numerieke velden. Een tekstveld met gt matcht nooit.

Een matches-patroon moet zelf minstens twee alfanumerieke tekens bevatten, dezelfde lat die de blokkeerlijst aanlegt. Een kale * wordt bij het schrijven geweigerd in plaats van geaccepteerd om vervolgens stilletjes elk bericht te matchen dat ooit binnenkomt, want dat is een storing en geen regel.

Een voorwaarde die de engine niet kan beantwoorden (een onbekend veld van een nieuwere client, een patroon dat niet compileert, contains "") wordt behandeld als een vraag die nooit gesteld is en niet als onwaar, en negate draait hem niet om. Dat onderscheid is dragend: een ontkende kapotte voorwaarde die als onwaar zou gelden, laat haar regel op elk bericht in de mailbox afgaan. equals "" wordt wél gehonoreerd, want "de onderwerpregel is leeg" is een echte vraag.

Wat een regel kan doen

Actie`value`Wat er gebeurt
`label`een label-idVoegt het label toe. USER_…-id's komen van GET /labels.
`remove_label`een label-idVerwijdert het. Hetzelfde label in beide noemen wordt opgelost voordat het bericht wordt opgeborgen, in plaats van overgelaten aan welke actie het laatst liep.
`archive`geenBergt het buiten de inbox op.
`mark_read`geenLaat UNREAD vallen.
`star`geenVoegt STARRED toe.
`spam`geenBergt het op onder Spam.
`trash`geenBergt het op onder Trash en wist de labels die een weggegooid bericht niet behoudt.
`forward`een adresStuurt een kopie door. Lees de opmerking hieronder voordat je dit gebruikt.
`reply`een template-id of -slugAntwoordt automatisch met een gepubliceerde template, onder voorbehoud van de lusbeveiliging hieronder.
`block_sender`geenZet de afzender op de blokkeerlijst, zodat het volgende bericht al aan de deur geweigerd wordt.
`reject`geenWeigert het bericht tijdens SMTP met 550 5.7.1 Message refused by the recipient. Alleen envelop. Zie hieronder.

reject wordt bij het schrijven geweigerd tenzij dezelfde regel minstens één envelope_from-voorwaarde bevat: reject_needs_envelope, een 422. Een 550 antwoordt degene die ons het bericht overhandigde, en bij een mailinglijst is dat de LIJST, die de weigering leest als een bouncende abonnee en de lezer uitschrijft van iets waarvan hij alleen wilde dat één persoon er niet meer op postte. Zelfs mét die voorwaarde valt een match die alleen uit de headeridentiteiten kwam terug op opbergen onder Spam, omdat de envelop de enige identiteit is waarop een weigering eerlijk gericht kan worden.

Een forward die door een regel wordt aangestuurd gaat via het verzendpad naar buiten, en dat HERBOUWT het bericht: de oorspronkelijke DKIM-handtekening overleeft dat niet, en exotische delen, ongebruikelijke headers en alles boven het uitgaande grootteplafond evenmin — een bericht van 25 MB met bijlagen gaat daaroverheen. Het is een kopie van wat er binnenkwam, niet het bericht dat binnenkwam. Het adres wordt gecontroleerd wanneer de regel geschreven wordt, zodat een niet-geverifieerde bestemming een 422 op de aanroep oplevert in plaats van een regel die stilletjes elk tiende bericht laat vallen.

reply antwoordt geen machine. Het wordt onderdrukt wanneer het bericht Auto-Submitted draagt (met iets anders dan no), Precedence: bulk|list|junk, List-Id, List-Unsubscribe, X-Autoreply of X-Autorespond, wanneer de envelopafzender leeg is (de vorm die elke bounce heeft) en wanneer de headers helemaal niet gelezen konden worden. Daarbovenop krijgt één afzender hooguit één automatisch antwoord per 24 uur vanuit een gegeven mailbox. Twee mailboxen met antwoordregels en zonder beveiliging mailen elkaar tot iemand het merkt.