Ves a la documentació
API

Crea una regla

Condicions d'una banda, accions de l'altra. Activada si no dius el contrari.

POSTapi.openemail.uk/rules

Executa la crida real contra el teu espai de treball, amb la teva pròpia clau.

POST /rules

Condicions d'una banda, accions de l'altra. Activada si no dius el contrari.

Exemple

Necessita rules:write. Retorna 201. position no s'accepta. Una regla nova s'afegeix al final de la llista, i moure-la és 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  }'
Resposta
{  "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"}

Una regla creada aquí està ACTIVADA i comença a actuar sobre el missatge següent. Aquest és el valor per defecte correcte per a una crida que algú ha fet deliberadament, i és el contrari de l'eina createRule de l'MCP, que escriu la mateixa regla DESACTIVADA perquè un model que decideix arxivar correu no l'hauria de tenir arxivant abans que una persona hagi llegit la regla.

Un name duplicat a la mateixa connexió dona rule_name_taken, un 409. Els noms són com es reconeix una regla en un registre d'execucions i a la pantalla de configuració, de manera que dues regles anomenades «Newsletters» són un informe que ningú no pot llegir.

La regla 101 dona rule_limit_reached, un 422. El límit és una protecció contra un script en bucle i no una frontera comptable, i no està bloquejat. Dues creacions que competeixin a 99 poden tenir èxit totes dues.

Què pot preguntar una condició

Una condició és { field, op, value }, amb un header opcional que indica quina capçalera cal llegir i un negate opcional. value és SEMPRE un string a la xarxa. Els camps numèrics es comparen com a nombres després de Number(value), i els dos camps booleans accepten les cadenes literals "true" i "false", perquè un camp amb un sol tipus és un esquema que un generador d'OpenAPI pot descriure i una unió de tres no ho és.

CampLlegeixOperadors
`from`La capçalera From:, normalitzada de la mateixa manera que la normalitza la llista de bloqueig.text
`from_domain`El domini de From: i els seus PARES, fins a dues etiquetes: un missatge de mail.corp.example.com també coincideix amb corp.example.com i example.com, i no coincideix amb res per a com.text
`envelope_from`El MAIL FROM d'SMTP. Diferent de from en totes les llistes de correu, i l'única identitat contra la qual es pot escriure un reject.text
`to`, `cc`, `bcc`Qualsevol adreça d'aquesta capçalera.text
`recipient`Qualsevol adreça de to, cc o bcc: l'abreviatura de totes tres.text
`reply_to`La capçalera Reply-To.text
`delivered_to`L'adreça canònica a la qual s'ha lliurat aquesta còpia, sense l'etiqueta del signe «+» i en minúscules, que és com es fa coincidir un àlies catch-all.text
`subject`La línia d'assumpte tal com ha arribat.text
`body`La part de text, o l'HTML reduït a text. Limitat, de manera que un cos de 20 MB no s'escaneja sencer.text
`header`Qualsevol capçalera, indicada al camp header de la mateixa condició. Allà és obligatori i es passa a minúscules abans de comparar.text
`list_id`La capçalera List-Id: l'identificador amb què una llista de correu s'identifica.text
`attachment_name`El nom de fitxer de qualsevol adjunt.text
`attachment_type`El tipus MIME de qualsevol adjunt, per exemple application/pdf.text
`has_attachment`Si n'hi ha cap.equals "true" / "false"
`spam`El veredicte de correu brossa al qual ha arribat el camí de lliurament, abans que s'executessin les teves regles.equals "true" / "false"
`attachment_size`La mida d'un adjunt en bytes. Una comparació coincideix quan qualsevol dels adjunts la satisfà.gt, lt, equals
`message_size`El missatge sencer tal com viatja per la xarxa, en bytes.gt, lt, equals
`hour`Hora d'arribada, 0–23, UTC.gt, lt, equals
`weekday`Dia d'arribada, 0–6, diumenge és 0, UTC.gt, lt, equals
OperadorQuè fa
`matches`Un glob, i només un glob: * per a qualsevol seqüència de caràcters, ? per a un de sol. Res d'expressions regulars. Un patró vingut d'un client d'API s'executa al camí de lliurament, i un patró amb retrocés catastròfic allà és una bústia que deixa de rebre.
`contains`Subcadena, sense distingir majúscules i minúscules.
`equals`El valor sencer, sense distingir majúscules i minúscules. En un camp numèric, igualtat numèrica.
`starts_with`Prefix, sense distingir majúscules i minúscules.
`ends_with`Sufix, sense distingir majúscules i minúscules.
`gt`, `lt`Numèric, només en els quatre camps numèrics. Un camp de text amb gt no coincideix mai.

Un patró matches ha de portar com a mínim dos caràcters alfanumèrics propis, el mateix llistó que aplica la llista de bloqueig. Un * tot sol es rebutja en el moment d'escriure'l, en comptes d'acceptar-lo i que després coincideixi en silenci amb tots els missatges que arribin mai, cosa que és una caiguda i no una regla.

Una condició que el motor no pot respondre (un camp desconegut vingut d'un client més nou, un patró que no compila, contains "") es tracta com una pregunta que mai no s'ha fet i no com a false, i negate no la inverteix. Aquesta distinció és fonamental: una condició trencada i negada tractada com a false dispararia la seva regla en tots els missatges de la bústia. equals "" sí que s'honora, perquè «la línia d'assumpte és buida» és una pregunta real.

Què pot fer una regla

Acció`value`Què passa
`label`un id d'etiquetaAfegeix l'etiqueta. Els id USER_… vénen de GET /labels.
`remove_label`un id d'etiquetaL'elimina. Anomenar la mateixa etiqueta a totes dues es resol abans d'arxivar el missatge, en comptes de deixar-ho a la que s'hagi executat l'última.
`archive`capEl treu de la safata d'entrada.
`mark_read`capElimina UNREAD.
`star`capAfegeix STARRED.
`spam`capL'arxiva a Correu brossa.
`trash`capL'arxiva a la Paperera i esborra les etiquetes que un missatge llençat no conserva.
`forward`una adreçaN'envia una còpia. Llegeix la nota de més avall abans de fer-lo servir.
`reply`un id o slug de plantillaRespon automàticament amb una plantilla publicada, subjecte a la protecció contra bucles de més avall.
`block_sender`capAfegeix el remitent a la llista de bloqueig, de manera que el missatge següent es rebutja a la porta.
`reject`capRebutja el missatge en temps d'SMTP amb 550 5.7.1 Message refused by the recipient. Només l'envelope. Vegeu-ho més avall.

reject es rebutja en el moment d'escriure'l si la mateixa regla no porta com a mínim una condició envelope_from: reject_needs_envelope, un 422. Un 550 respon a qui ens ha lliurat el missatge, i en una llista de correu això és la LLISTA, que llegeix el rebuig com un subscriptor que rebota i dona de baixa el lector d'una cosa de la qual només volia que una persona deixés de publicar-hi. Fins i tot amb la condició escrita, una coincidència que hagi vingut només de les identitats de les capçaleres es degrada a arxivar a Correu brossa, perquè l'envelope és l'única identitat contra la qual es pot dirigir honestament un rebuig.

Un forward disparat per una regla surt pel camí d'enviament, que RECONSTRUEIX el missatge: la signatura DKIM original no hi sobreviu, i tampoc les parts exòtiques, les capçaleres inusuals ni res que superi el sostre de mida de sortida, que un missatge de 25 MB amb adjunts superarà. És una còpia del que ha arribat i no el missatge que ha arribat. L'adreça es comprova quan s'escriu la regla, de manera que una destinació no verificada dona un 422 a la crida i no una regla que descarta en silenci un missatge de cada deu.

reply no respondrà a una màquina. Se suprimeix quan el missatge porta Auto-Submitted (amb un valor diferent de no), Precedence: bulk|list|junk, List-Id, List-Unsubscribe, X-Autoreply o X-Autorespond, quan el remitent de l'envelope és buit (la forma que té qualsevol rebot) i quan no s'han pogut llegir gens les capçaleres. A més d'això, un remitent rep com a màxim una resposta automàtica cada 24 hores d'una bústia determinada. Dues bústies amb regles de resposta i sense cap protecció s'escriuen l'una a l'altra fins que algú se n'adona.