Belgelere geç
CLI

Kişiler, kitleler ve toplu gönderimler

Adres defteri, kitleler, toplu gönderimler ve engelleme listesi için her komut, uygulamalı örneklerle.

Birbirleriyle nasıl bağlantılıdır

Dört ad alanı, yazıştığınız kişileri kapsar. Kişiler çalışma alanının adres defteridir, kitleler adlandırılmış kişi listeleridir, bir toplu gönderim bazı kitlelerdeki herkese tek bir mesaj gönderir ve engelleme listesi çalışma alanının göndermeyeceği adresleri tutar. Her komut bir SDK yöntemini çağırır, bu yüzden SDK sayfaları aynı çağrıları daha ayrıntılı anlatır.

  • Bir kişinin id'si yoktur. Adresi, her contacts komutunun aldığı anahtardır; baştaki ve sondaki boşluklar kırpılır ve küçük harfe çevrilir, bu yüzden [email protected] ile [email protected] aynı kişidir. Bir kitlenin aud_ id'si, bir toplu gönderimin brd_ id'si, bir engellemenin de suppressions list komutunun yazdırdığı id'si vardır.
  • Her kişi var olduğu sürece varsayılan kitlededir. O kitle silinemez, boşaltılamaz ya da azaltılamaz ve üzerindeki builtin değeri default olur.
  • Adres defteri çalışma alanına aittir, bu yüzden her üye ve her anahtar aynı defteri okur ve yazar.
  • Her ad alanı tekil biçimine de yanıt verir, örneğin openemail contact get; alışılmış takma adlar da çalışır: ls, show, new, edit ve rm. Fiilleri add ve remove olan suppressions içinde new, add fiiline; rm de remove fiiline götürür.

openemail <namespace> <verb> --help her bayrağı türüyle, kapsamları, uç noktayı ve komutun ne döndürdüğünü gösterir. Aynı sayfayı veri olarak almak için --json ekleyin.

Kişiler

Çalışma alanının adres defteri: bir üyenin uygulamanın yazma ekranından yazdığı kişiler ve elle kaydedilen herkes. Gelen posta kimseyi eklemez, API ya da CLI üzerinden bir gönderim de eklemez.

KomutNe yapar
openemail contacts listKayıtlı kişilerden bir sayfa, en son posta gönderilen önce. --source, manual ya da auto kişileri tutar; --q adlarda ve adreslerde arar
openemail contacts get <email>Tek bir kişi, içinde bulunduğu her kitleyle
openemail contacts create --email <value>--name, --notes ve --audience-ids ile yeni bir kişi kaydedin. Defterde zaten bulunan bir adres 409 contact_exists ile reddedilir
openemail contacts update <email>--name ya da --notes değerini değiştirin; null birini temizler. Adresin kendisi değiştirilemez
openemail contacts delete <email>Kişiyi notları, fotoğrafı ve üyelikleriyle birlikte silin ve yazma ekranı onu yeniden kaydetmesin diye adresi gizleyin
openemail contacts set-audiences <email> --audience-ids <a,b>Kişinin bulunduğu kitleleri tam olarak bu liste yapın. Varsayılan kitle her zaman korunur
openemail contacts list-peopleKişiler sayfasındaki herkes: kayıtlı kişiler ve threads:read ile postada görülen her adres, konuşma sayılarıyla. --sort, --q, --email ve --blocked daraltır
openemail contacts save <email>Bir adresi kaydedin, bir gönderimden kaydedilmiş olanı tutun ya da silinmiş birini geri getirin. Adres hangi durumda olursa olsun asla hata vermez
openemail contacts delete-many <emails...>Tek bir çağrıda 1 ile 200 arası adresi silin ve gizleyin
openemail contacts set-photo <email> <data>Fotoğrafı bir dosyadan ya da - ile stdin'den yükleyin: en fazla 5 MB PNG, JPEG, WebP ya da GIF
openemail contacts remove-photo <email>Fotoğrafı kaldırın ve saklanan görseli silin
openemail contacts block <email>Adresi çalışma alanının engel listesine koyun, böylece ondan gelen posta reddedilir. Bir artı etiketi atılır
openemail contacts unblock <email>Adresi engelleyen her engel listesi kuralını kaldırın, tüm alan adını kapsayan bir kural da dahil
openemail contacts list-threads <email>Adresin yazdığı ya da kendisine yazılan konuşmalar, her klasörde. --q bunların içinde arar
openemail contacts activity <email>Bir zaman aralığında adresten alınan ve adrese gönderilen posta; --minutes aksini söylemedikçe 90 gün. Yanıt bekleyen konuşmalar ve her iki yöndeki ortanca yanıt süresiyle birlikte

Kitleler

Adlandırılmış kişi listeleri, bir çalışma alanında en fazla 100. Bir adresin bir listeye katılmadan önce kişi olması gerekir; yalnızca yeni adresleri ilerlerken kaydeden import-contacts bunun istisnasıdır.

KomutNe yapar
openemail audiences listKitlelerden bir sayfa; önce varsayılan kitle, geri kalanlar en yeniden eskiye, her biri contactCount değeriyle
openemail audiences growthKitlelerin bir zaman aralığında nasıl büyüdüğü; --days ya da --minutes aksini söylemedikçe 30 gün: dilim başına katılımlar ve abonelikten çıkmalar ile toplamlar
openemail audiences get <id>Tek bir kitle, güncel bir contactCount ile
openemail audiences create --name <value>İsteğe bağlı bir --description ile boş bir kitle oluşturun. Adlar benzersiz değildir
openemail audiences update <id>--name ya da --description değerini değiştirin. Üyeliğe dokunulmaz
openemail audiences delete <id>Kitleyi silin ve kişilerini koruyun. Varsayılan kitle silinemez
openemail audiences empty <id>Her kişiyi çıkarın ve kitleyi id'si, adı ve açıklamasıyla koruyun
openemail audiences list-contacts <id>Kitledeki kişilerden bir sayfa; her birinin ne zaman katıldığı ve abonelikten çıkıp çıkmadığıyla. --sort, --q, --source ve --statuses daraltır
openemail audiences add-contact <id> --email <value>Var olan tek bir kişiyi kitleye ekleyin. Zaten orada olan birini eklemek hiçbir şeyi değiştirmez
openemail audiences remove-contact <id> <email>Tek bir kişiyi çıkarın. Kitlede olmayan bir kişi 404 verir
openemail audiences add-contacts <id> --emails <a,b>En fazla 200 var olan kişiyi ekleyin ve kişi olmayan adresleri missing içinde bildirin
openemail audiences remove-contacts <id> --emails <a,b>En fazla 200 kişiyi çıkarın ve içinde olmayanları bildirin
openemail audiences import-contacts <id> --contacts <json|@file|->Henüz kişi olmayan adresleri kaydederek en fazla 500 { email, name } satırı içe aktarın

Toplu gönderimler

En fazla 10 kitledeki herkese tek bir mesaj; birleştirme alanları doldurulmuş ve bir abonelikten çıkma bağlantısıyla, her kişiye ayrı bir kopya olarak gönderilir. Her kopya kendi msg_ id'si, olayları ve webhook'ları olan sıradan bir e-postadır.

KomutNe yapar
openemail broadcasts preview --audience-ids <a,b>Bu kitlelere yapılacak bir toplu gönderimin kime ulaşacağını ve abonelikten çıkmış ya da engellenmiş olduğu için kimi atlayacağını sayın. Hiçbir şey göndermez
openemail broadcasts send --audience-ids <a,b> --from <value>--subject ve --html ya da --text ile veya kayıtlı bir --template ile şimdi ya da --scheduled-at zamanında gönderin
openemail broadcasts listToplu gönderimlerden bir sayfa, en yeniden eskiye, canlı sayılarla. --audience-id o kitleye gönderilenleri tutar
openemail broadcasts get <id>Tek bir toplu gönderim, durumu ve canlı sayılarıyla: gönderim sürerken tekrar tekrar sorgulanacak komut
openemail broadcasts stats <id>Teslim edilen, geri dönen, açılan, tıklanan ve abonelikten çıkan toplamları ile her --grain dilimi için bir seri; siz aksini söylemedikçe bir saat
openemail broadcasts list-recipients <id>Her kopyanın kime gittiği ve ona ne olduğu. --filter, bounced ya da not_opened gibi tek bir grubu tutar
openemail broadcasts get-recipient <id> <email-id>Bir kişinin kopyası; konu, HTML ve metin tam olarak aldığı gibi
openemail broadcasts cancel <id>Zamanlanmış, kuyrukta ya da hâlâ gönderilmekte olan bir toplu gönderimi durdurun. Gitmiş kopyalar geri çağrılamaz

Engellemeler

Bu çalışma alanının göndermeyeceği adresler: gerçekleştikçe kaydedilen kalıcı geri dönmeler ve şikâyetler ile elle eklediğiniz her adres. Bunlardan birine yapılan gönderim, hiçbir şey çıkmadan o alıcı için reddedilir.

KomutNe yapar
openemail suppressions listListeden bir sayfa, en yeniden eskiye. --reason, bounce, complaint ya da manual olanları tutar; --q arar
openemail suppressions get <id>Tek bir satır: adres, neden, geri dönmenin ya da şikâyetin taşıdığı ayrıntı ve kaldırılıp kaldırılamayacağı
openemail suppressions add --email <value>Bir adrese göndermeyi durdurun. Zaten orada olan bir adresi eklemek, onun tuttuğu satırı döndürür
openemail suppressions remove <id>Adrese yeniden posta gönderilmesine izin verin. Kalıcı bir geri dönme kaldırılamaz

Engellemeler ve engel listesi farklı listelerdir. suppressions add bir adrese giden postayı durdurur, contacts block ise ondan gelen postayı reddeder.

Kapsamlar

Çoğu komut kendi ad alanının okuma ya da yazma kapsamını gerektirir. Birkaçı başka bir şeyi okuduğu ya da değiştirdiği için başka bir kapsam ister:

KapsamKomutlar
contacts:readcontacts list, get ve list-people
contacts:writecontacts create, update, delete, save, delete-many, set-photo ve remove-photo, ayrıca audiences:write ile birlikte audiences import-contacts
audiences:readaudiences list, growth, get ve list-contacts, ayrıca broadcasts preview; böylece gönderim yapamayan bir anahtar da sayıyı gösterebilir
audiences:writeDiğer tüm audiences komutları ve contacts set-audiences. contacts create --audience-ids bunu contacts:write ile birlikte gerektirir
threads:readcontacts list-threads ve activity, ayrıca list-people içinde postada görülen adresler
settings:readsuppressions list ve get
settings:writesuppressions add ve remove, ayrıca contacts block ve unblock
emails:readbroadcasts list, get, stats, list-recipients ve get-recipient
emails:sendaudiences:read da gerektiren broadcasts send ve broadcasts cancel
  • Belirli adreslerle ya da alan adlarıyla sınırlı bir anahtar, diğer her anahtarla aynı adres defterini okur ve yazar. Yalnızca tuttuğu bir adresten ya da alan adından gönderilen toplu gönderimleri görür, list-people komutundan yalnızca kayıtlı kişileri alır ve contacts list-threads, activity, block ve unblock ile suppressions add ve remove tarafından 422 capability_unsupported ile reddedilir.
  • Yalnızca bazı adreslere erişebilen bir üyenin tarayıcı oturumu, her contacts, audiences ve broadcasts komutunda 422 capability_unsupported ile reddedilir. suppressions add, çalışma alanı sahibi dışındaki herkesin tarayıcı oturumunu reddeder.

Uygulamalı örnekler

Bir dosyadan kitle oluşturun, ardından ona yapılacak bir toplu gönderimin kime ulaşacağını sayın. import-contacts henüz kişi olmayan adresleri kaydeder ve yeniden çalıştırmak hiçbir şeyi iki kez oluşturmaz ya da eklemez.

contacts.json
[  { "email": "[email protected]", "name": "Ada Lovelace" },  { "email": "[email protected]", "name": "Grace Hopper" },  { "email": "[email protected]" }]
Kitleyi oluşturun ve sayın
AUDIENCE=$(openemail audiences create --name 'Product updates' --json | jq -r .id)openemail audiences import-contacts "$AUDIENCE" --contacts @contacts.jsonopenemail broadcasts preview --audience-ids "$AUDIENCE"

Bir toplu gönderimi isteği yazdıran ve hiçbir şey göndermeyen --dry-run ile kontrol edin, sonra gönderin. Toplu gönderim hemen oluşturulur ve arka planda gönderilir, bu yüzden izlemek için get ile sorgulayın. Bu gövde {{unsubscribeUrl}} yerleştirmediği için her kopya tek satırlık bir abonelikten çıkma alt bilgisi alır.

broadcast.json
{  "audienceIds": ["aud_4c1b8e2a7d9f05c36b4e8a71"],  "from": "Acme <[email protected]>",  "subject": "{{firstName|Hello}}, the September release is out",  "html": "<p>Hi {{firstName|there}},</p><p>Here is what changed this month.</p>",  "scheduledAt": "2026-10-01T09:00:00Z"}
Toplu gönderimi kontrol edin, sonra gönderin
openemail broadcasts send --data @broadcast.json --dry-runBROADCAST=$(openemail broadcasts send --data @broadcast.json --yes --json | jq -r .id)openemail broadcasts get "$BROADCAST"openemail broadcasts stats "$BROADCAST" --grain day

Bir toplu gönderimin kime ulaşmadığını görün. --ndjson her satıra bir alıcı, --all --json ise her sayfayı içeren tek bir belge yazdırır.

Kime ulaşmadığı
openemail broadcasts list-recipients brd_5a8c1e3f7b2d94a06c8e1f3b --filter bounced --ndjson | jq -r .emailopenemail broadcasts list-recipients brd_5a8c1e3f7b2d94a06c8e1f3b --filter not_opened --all --json | jq ".items | length"openemail suppressions list --reason bounce --all --max 50

Bir kitlenin abone üyelerini başka bir kitleye kopyalayın. jq akışı add-contacts komutunun aldığı gövdeye dönüştürür ve --data - onu stdin'den okur. --max 200 onu tek bir çağrının kabul ettiği 200 adresle sınırlar.

Abone üyeleri kopyalayın
openemail audiences list-contacts aud_9f2c4b7e1a0d63d84c5f2e7b --statuses subscribed --max 200 --ndjson \  | jq -s '{ emails: map(.email) }' \  | openemail audiences add-contacts aud_1c4e7a9b2d0f36e85a7c1b4d --data -

Yazma ekranının bir alan adında kaydettiği her kişiyi silin. delete-many çağrı başına en fazla 200 adres alır, bu yüzden xargs -n 200 daha uzun bir listeyi böler. Geri alma olmadığı için grupları önce --dry-run ile kontrol edin.

Alan adına göre silin
openemail contacts list --source auto --all --ndjson \  | jq -r 'select(.email | endswith("@old-vendor.example")) | .email' > leaving.txtxargs -n 200 openemail contacts delete-many --dry-run < leaving.txtxargs -n 200 openemail contacts delete-many --yes < leaving.txt

Bir adrese göndermeyi durdurun, birine yeniden izin verin ve bir göndereni engelleyin. removable, suppressions remove komutunun hangi satırları alacağını söyler.

Engelleme listesine ekleyin, izin verin ve engelleyin
openemail suppressions add --email [email protected]openemail suppressions list --q [email protected] --json | jq -r '.items[] | select(.removable) | .id'openemail suppressions remove 7b1e2c3d-4f5a-4b6c-8d7e-9f0a1b2c3d4e --yesopenemail contacts block [email protected]

Onaylar ve doğrulama kodları

Bu komutlar çalışmadan önce terminalde onay ister:

Ad alanıOnay ister
contactsdelete, delete-many, remove-photo ve unblock
audiencesdelete, empty, remove-contact ve remove-contacts
broadcastssend ve cancel
suppressionsremove
  • --yes sizin yerinize onaylar. Gözetimsiz çalışırken, yani --json ya da --no-input ile, CI'da ya da terminal olmadan, soru soracak bir komut Refusing to run unattended. Pass --yes to confirm. iletisi ve 2 çıkış koduyla durur.
  • --dry-run komutun göndereceği isteği yazdırır ve sormadan, hiçbir şeyi değiştirmeden 0 koduyla çıkar.
  • Bir tarayıcı oturumuyla audiences delete, web uygulamasında olduğu gibi önce bir doğrulama kodu ister. --yes bunu asla atlamaz ve gözetimsiz çalışırken komut 4 çıkış koduyla durur. Önceden openemail verify çalıştırın ya da kendisinden asla kod istenmeyen bir API anahtarı kullanın.
  • audiences empty asla doğrulama kodu istemez, bu yüzden --yes vermeden önce id'yi kontrol edin.

Sayfalama

Listeleyen her komut tek bir sayfa okur. Daha fazlası kaldığında, yazdırdığı imleci aynı filtrelerle --cursor bayrağına verin ya da hepsini okuyun:

  • --all her sayfayı okur ve öğeleri akış hâlinde verir: terminalde bir tablo, bir kanala yönlendirildiğinde ya da --ndjson ile her satıra bir JSON nesnesi.
  • --max <n> o kadar öğeden sonra durur ve --all anlamına gelir.
  • --json, --all dahil, tek bir { items, hasMore, nextCursor } belgesi yazdırır.
  • Bozuk ya da eskimiş bir imleç 400 invalid_cursor verir. İmleç olmadan yeniden başlayın.
KomutSayfa boyutu
openemail contacts list1 ile 200 arası, --limit aksini söylemedikçe 50
openemail contacts list-people1 ile 100 arası, --limit aksini söylemedikçe 25
openemail contacts list-threads1 ile 100 arası, --limit aksini söylemedikçe 25
openemail audiences list1 ile 100 arası, --limit aksini söylemedikçe 25
openemail audiences list-contacts1 ile 200 arası, --limit aksini söylemedikçe 50
openemail broadcasts list1 ile 100 arası, --limit aksini söylemedikçe 25
openemail broadcasts list-recipients1 ile 200 arası, --limit aksini söylemedikçe 50
openemail suppressions list1 ile 100 arası, --limit aksini söylemedikçe 25

Bilinmesi iyi olanlar

  • contacts create, defterde zaten bulunan bir adresi 409 contact_exists ile reddeder, bu yüzden bir yeniden deneme birinin düzenlediği bir adın üzerine asla yazmaz. contacts save ise asla reddetmez: adres hangi durumda olursa olsun onu kaydeder, korur ya da geri getirir.
  • contacts delete, yalnızca postada görülmüş bir adresi de alır; bu da o kişiyi list-people listesinden çıkarır. Posta kalır. Geri alma yoktur: adresi yeniden kaydetmek, adı, notları ve varsayılan kitle dışında kitlesi olmayan bir kişi başlatır.
  • Adres bir kişinin kimliğidir, bu yüzden contacts update onu değiştiremez. Bir kişiyi taşımak bir delete ve bir create demektir.
  • contacts set-photo görseli bir dosyadan ya da - ile stdin'den okur. image/jpeg gibi bir --content-type verin: o olmadan görsel application/octet-stream olarak gidebilir ve sunucu bunu 422 invalid_image ile reddeder.
  • broadcasts send --scheduled-at, 2026-10-01T09:00:00Z gibi bir ISO 8601 zamanı ya da PT2H veya P1D gibi bir ISO 8601 süresini, en fazla 365 gün ileriye kadar alır. send --at komutunun aldığı 2h gibi kısa gecikmeler burada reddedilir.
  • Birleştirme alanları --subject, --html ve --text içinde çalışır: {{firstName}}, {{lastName}}, {{name}}, {{email}} ve {{unsubscribeUrl}}; her birinin bir dikey çizgiden sonra bir yedek değeri olabilir, örneğin {{firstName|there}}. {{unsubscribeUrl}} yerleştirmeyen bir gövde tek satırlık bir abonelikten çıkma alt bilgisi alır. Bir şablon olduğu gibi gönderilir, bu yüzden bağlantıyı şablona koyun.
  • Bir toplu gönderim, herhangi bir şey yazılmadan önce planın aylık gönderimlerine göre denetlenir ve her kopya bir gönderim sayılır. Kotanın karşılayamadığı bir toplu gönderim 429 send_quota_exceeded ile reddedilir ve geride hiçbir şey kalmaz.
  • Bir betik adımı yeniden çalıştırabilecekse broadcasts send komutuna kendi --idempotency-key değerinizi verin. Aynı anahtar, yenisini göndermek yerine oluşturduğu toplu gönderimle yanıt verir.
  • Bir toplu gönderimden abonelikten çıkan bir kişi, unsubscribedAt ayarlı olarak kitlede kalır ve o kitleye yapılan sonraki toplu gönderimler onu atlar. audiences list-contacts --statuses unsubscribed bunları listeler.
  • Kalıcı bir geri dönme engelleme listesinde kalır. suppressions remove onu 409 suppression_not_removable ile reddeder ve her satırdaki removable bunu önceden söyler.

Gelen kutunuz,
kendi kurallarınızla.

İşletmeler, yapay zekâ, ajanlar ve kişisel e-posta için e-posta altyapısı. Ölçek, gizlilik ve denetim için kuruldu. E-postanın ilk günden sahip olması gereken her şey.

OpenEmail

İşletmeler, yapay zekâ, ajanlar ve kişisel e-posta için e-posta altyapısı. Ölçek, gizlilik ve denetim için kuruldu. E-postanın ilk günden sahip olması gereken her şey.

© 2026 OpenEmail. Tüm hakları saklıdır.