Bir kural oluştur
Bir yanda koşullar, diğer yanda eylemler. Aksini belirtmedikçe etkindir.
Gerçek çağrıyı kendi anahtarınızla çalışma alanınıza karşı çalıştırır.
POST /rules
Bir yanda koşullar, diğer yanda eylemler. Aksini belirtmedikçe etkindir.
Örnek
rules:write gerektirir. 201 döner. position kabul edilmez. Yeni bir kural listenin sonuna eklenir; taşımak için POST /rules/reorder kullanılır.
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 }'{ "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"}Burada oluşturulan bir kural AÇIKTIR ve bir sonraki mesajdan itibaren devreye girer. Birinin bilerek yaptığı bir çağrı için doğru varsayılan budur ve aynı kuralı DEVRE DIŞI olarak yazan MCP createRule aracının tam tersidir; çünkü postayı arşivlemeye karar veren bir model, bir insan kuralı geri okumadan arşivlemeye başlamamalıdır.
Aynı bağlantıda yinelenen bir name, rule_name_taken, bir 409'dur. Adlar, bir kuralın çalışma kaydında ve ayarlar ekranında tanınma biçimidir; dolayısıyla "Newsletters" adlı iki kural kimsenin okuyamayacağı bir rapor demektir.
101. kural rule_limit_reached, bir 422'dir. Tavan bir muhasebe sınırı değil, döngüye girmiş bir betiğe karşı bir korumadır ve kilitli değildir. 99'da yarışan iki oluşturma isteği de başarılı olabilir.
Bir koşul neyi sorabilir
Bir koşul { field, op, value } biçimindedir; isteğe bağlı olarak hangi başlığın okunacağını adlandıran bir header ve isteğe bağlı bir negate taşır. value iletimde HER ZAMAN bir string'tir. Sayısal alanlar Number(value) sonrasında sayı olarak karşılaştırılır ve iki boolean alan harfiyen "true" ve "false" dizgelerini alır; çünkü tek tipli tek bir alan, bir OpenAPI üreticisinin tarif edebileceği bir şemadır, üç tipin birleşimi ise değildir.
| Alan | Okuduğu | Operatörler |
|---|---|---|
| `from` | From: başlığı; engelleme listesinin normalleştirdiği biçimde normalleştirilmiş hâliyle. | metin |
| `from_domain` | From: başlığının alan adı ve iki etikete kadar ÜST alan adları: mail.corp.example.com adresinden gelen bir mesaj corp.example.com ve example.com ile de eşleşir, com ile ise hiçbir şey eşleşmez. | metin |
| `envelope_from` | SMTP MAIL FROM. Her posta listesinde from'dan farklıdır ve bir reject'in dayanabileceği tek kimliktir. | metin |
| `to`, `cc`, `bcc` | O başlıktaki herhangi bir adres. | metin |
| `recipient` | to, cc ya da bcc içindeki herhangi bir adres: üçü için kısayol. | metin |
| `reply_to` | Reply-To başlığı. | metin |
| `delivered_to` | Bu kopyanın teslim edildiği kanonik adres; artı etiketi ayıklanmış ve küçük harfe çevrilmiş hâliyle. Bir catch-all takma adı da bu şekilde eşleştirilir. | metin |
| `subject` | Geldiği hâliyle konu satırı. | metin |
| `body` | Metin bölümü ya da metne indirgenmiş HTML. Sınırlıdır; dolayısıyla 20 MB'lık bir gövde tamamen taranmaz. | metin |
| `header` | Koşulun kendi header alanında adlandırılan herhangi bir başlık. Orada zorunludur ve karşılaştırmadan önce küçük harfe çevrilir. | metin |
| `list_id` | List-Id başlığı: bir posta listesinin kendini tanıttığı tanıtıcı. | metin |
| `attachment_name` | Herhangi bir ekin dosya adı. | metin |
| `attachment_type` | Herhangi bir ekin MIME türü, örneğin application/pdf. | metin |
| `has_attachment` | Hiç ek olup olmadığı. | equals "true" / "false" |
| `spam` | Teslim yolunun, kurallarınız çalışmadan önce vardığı spam kararı. | equals "true" / "false" |
| `attachment_size` | Bir ekin bayt cinsinden boyutu. Herhangi bir ek koşulu sağladığında karşılaştırma eşleşir. | gt, lt, equals |
| `message_size` | İletimdeki mesajın tamamı, bayt cinsinden. | gt, lt, equals |
| `hour` | Varış saati, 0–23, UTC. | gt, lt, equals |
| `weekday` | Varış günü, 0–6, Pazar 0'dır, UTC. | gt, lt, equals |
| Operatör | Ne yapar |
|---|---|
| `matches` | Bir glob, yalnızca glob: herhangi bir karakter dizisi için *, tek bir karakter için ?. Düzenli ifade yok. Bir API istemcisinden gelen desen teslim yolunda çalışır ve orada felaket düzeyinde geri izleme yapan bir desen, posta almayı bırakan bir posta kutusu demektir. |
| `contains` | Alt dize, büyük/küçük harfe duyarsız. |
| `equals` | Değerin tamamı, büyük/küçük harfe duyarsız. Sayısal bir alanda sayısal eşitlik. |
| `starts_with` | Önek, büyük/küçük harfe duyarsız. |
| `ends_with` | Sonek, büyük/küçük harfe duyarsız. |
| `gt`, `lt` | Sayısal; yalnızca dört sayısal alanda. gt kullanılan bir metin alanı asla eşleşmez. |
Bir matches deseni, engelleme listesinin uyguladığı eşikle aynı biçimde, kendine ait en az iki alfanümerik karakter taşımalıdır. Çıplak bir * yazma anında reddedilir; kabul edilip sonra gelecek her mesajla sessizce eşleşmesi bir kural değil bir kesinti olurdu.
Motorun yanıtlayamadığı bir koşul (daha yeni bir istemciden gelen bilinmeyen bir alan, derlenemeyen bir desen, contains "") false olarak değil, hiç sorulmamış bir soru olarak ele alınır ve negate bunu tersine çevirmez. Bu ayrım kritik öneme sahiptir: false sayılan olumsuzlanmış bozuk bir koşul, kuralını posta kutusundaki her mesajda tetiklerdi. equals "" ise dikkate alınır, çünkü "konu satırı boş" gerçek bir sorudur.
Bir kural neler yapabilir
| Eylem | `value` | Ne olur |
|---|---|---|
| `label` | bir etiket id'si | Etiketi ekler. USER_… id'leri GET /labels üzerinden gelir. |
| `remove_label` | bir etiket id'si | Etiketi kaldırır. Aynı etiketin ikisinde de adlandırılması, hangisinin en son çalıştığına bırakılmak yerine mesaj dosyalanmadan önce çözümlenir. |
| `archive` | yok | Gelen kutusundan çıkarıp dosyalar. |
| `mark_read` | yok | UNREAD etiketini kaldırır. |
| `star` | yok | STARRED ekler. |
| `spam` | yok | Spam altına dosyalar. |
| `trash` | yok | Çöp altına dosyalar ve çöpe atılmış bir mesajın tutmadığı etiketleri temizler. |
| `forward` | bir adres | Bir kopyasını iletir. Kullanmadan önce aşağıdaki notu okuyun. |
| `reply` | bir şablon id'si ya da slug'ı | Yayımlanmış bir şablonla otomatik yanıt verir; aşağıdaki döngü korumasına tabidir. |
| `block_sender` | yok | Göndereni engelleme listesine ekler; böylece bir sonraki mesaj kapıda reddedilir. |
| `reject` | yok | Mesajı SMTP aşamasında 550 5.7.1 Message refused by the recipient ile reddeder. Yalnızca zarfa göre. Aşağıya bakın. |
reject, aynı kural en az bir envelope_from koşulu taşımadıkça yazma anında reddedilir: reject_needs_envelope, bir 422. Bir 550, mesajı bize teslim edene yanıt verir ve bir posta listesinde bu LİSTEDİR; liste reddi geri dönen bir abone olarak okur ve okuyucunun, yalnızca tek bir kişinin gönderim yapmasını durdurmak istediği bir listeden aboneliğini iptal eder. Koşul yazılmış olsa bile, yalnızca başlıktaki kimliklerden gelen bir eşleşme Spam altına dosyalamaya düşürülür; çünkü bir reddin dürüstçe hedefleyebileceği tek kimlik zarftır.
Kural kaynaklı bir forward, mesajı YENİDEN OLUŞTURAN gönderim yolundan çıkar: orijinal DKIM imzası korunmaz; sıra dışı bölümler, alışılmadık başlıklar ve giden boyut tavanını aşan hiçbir şey de korunmaz; ekleriyle birlikte 25 MB'lık bir mesaj bu tavanı aşar. Bu, gelen mesajın kendisi değil, gelenin bir kopyasıdır. Adres, kural yazılırken denetlenir; dolayısıyla doğrulanmamış bir hedef, her onuncu mesajı sessizce düşüren bir kural değil, çağrıda bir 422 olur.
reply bir makineye yanıt vermez. Mesaj Auto-Submitted (no dışında), Precedence: bulk|list|junk, List-Id, List-Unsubscribe, X-Autoreply ya da X-Autorespond taşıdığında, zarf göndereni boş olduğunda (her geri dönüşün aldığı biçim) ve başlıklar hiç okunamadığında bastırılır. Buna ek olarak, bir gönderen belirli bir posta kutusundan 24 saatte en fazla bir otomatik yanıt alır. Yanıt kuralı olan ve koruması olmayan iki posta kutusu, biri fark edene kadar birbirine posta gönderir.