E-posta gönderme ve izleme
`emails` komutlarıyla postayı gönderin, toplu gönderin, çevirin, zamanlayın ve iptal edin, ardından `tracking` ile teslimini, açılmalarını ve tıklamalarını izleyin.
Genel bakış
emails ad alanı, gönderim API'sinin komut hâlidir; SDK'daki openemail.emails nesnesinin her yöntemi için bir komut. Her biri bir uç noktayı çağırır ve döndürdüğünü yazdırır. tracking ad alanı, gönderdiğiniz postadaki açılmaları ve tıklamaları okur. openemail emails yerine openemail email de çalışır.
Buradaki her komut, tarayıcıdan ya da bir API anahtarıyla açılmış bir oturum ve iki kapsamdan birini gerektirir: gönderme, çevirme, iptal etme ve yeniden zamanlama için emails:send, yalnızca okuyan her şey için emails:read.
Hangi gönderim komutunu kullanmalı
openemail send, Posta sayfasındaki elle yazılmış komuttur ve emails send üzerinden gönderir. Terminal başındaki bir kişi için yapılmıştır: --from vermediğinizde gönderen adresi seçer, gövdeyi bir dosyadan, stdin'den ya da düzenleyicinizden okur, dosyaları yoluyla ekler ve bir şey gönderilmeden önce onaylamanız için bir özet gösterir. openemail emails send ise istek gövdesini her alan için bir bayrak olarak alır ve hiçbir şey sormaz; bu da tam olarak ne gönderdiğini bilen bir betiğe uyar.
| send | emails send |
|---|---|
| --from <address> | --data içermedikçe --to gibi zorunludur. send bunu atlayabilir ve sizin için bir adres seçer |
| -f, --body-file <path> | Gövde için dosya bayrağı yoktur. --html "$(cat body.html)" verin ya da isteğin tamamını --data @email.json ile verin |
| -a, --attach <path> | --attachments, her biri bir filename ve base64 content ya da Dosyalar'da zaten bulunan bir dosyanın fileId değerini taşıyan bir JSON dosya dizisi |
| --at <when> | --scheduled-at <when>, bir ISO 8601 anı ya da PT1H veya P2D gibi bir süre. send ayrıca 10m, 2h ve 1d gibi kısa gecikmeleri de alır |
| --undo <seconds> | --cancellable-for-seconds <n>, 0 ile 900 arası |
| --translate <language> | --translate '{"to":"de"}'; ayrıca from, includeOriginal ve subject alır |
| --template <id> --props <json> | --template '{"id":"welcome","props":{"name":"Ada"}}'; bir version da sabitleyebilir |
| --draft <id> | --draft-id <id> |
| --thread <id> | --thread-id <id> |
| --tag <key=value> | --tags <key=value>, tekrarlanarak ya da bir JSON nesnesi olarak |
Yalnızca emails send içinde tek bir gönderim için açılmaları ya da tıklamaları kapatan --tracking, --signature, özel başlıklar için --headers, dosyaları eklemek ile onlara bağlantı vermek arasında seçim yapmak için --attachment-delivery ve gövdenin tamamını JSON olarak satır içi, @path ile bir dosyadan ya da - ile stdin'den almak için --data bulunur.
İkisi farklı biter. send, e-posta failed olarak döndüğünde 1 koduyla çıkar. emails send ise API yanıt verdiği her durumda 0 koduyla çıkar, bu yüzden yazdırdığı çıktıdaki status değerine bakın.
Tüm emails komutları
send, send-batch, translate, cancel ve reschedule için emails:send gerekir. list, get, list-events ve get-tracking için emails:read gerekir. Bir e-posta id'si, bir gönderimin döndürdüğü gibi msg_ ve ardından 24 onaltılık karakterdir.
| Komut | Ne yapar |
|---|---|
| openemail emails send --from <value> --to <a,b> | Tek bir e-postayı şimdi gönderin, --cancellable-for-seconds ile bir geri alma penceresi boyunca bekletin ya da --scheduled-at ile zamanlayın. Gövde --html, --text ya da ikisi, kayıtlı bir --template ya da kayıtlı bir --draft-id olur |
| openemail emails send-batch <emails> | Tek bir istekte en fazla 100 bağımsız e-posta gönderin; bir dosyadaki, satır içi ya da - ile stdin'deki bir JSON dizisinden. Her öğe emails send gövdesi biçimindedir ve kendi başına başarılı ya da başarısız olur |
| openemail emails translate --to <value> | Çevrilmiş bir gönderimin --subject, --html ya da --text için ne teslim edeceğini önizleyin. Hiçbir şey saklanmaz ya da gönderilmez ve bir yapay zekâ işlemi harcar |
| openemail emails list | Gönderilmiş e-postalardan bir sayfa, en yeniden eskiye, --status, --from ya da --broadcast-id ile daraltılmış |
| openemail emails get <id> | Her alıcının kendi durumu, hatası ve teslim zamanıyla gönderilmiş tek bir e-posta; izlendiyse tam izleme raporuyla birlikte |
| openemail emails list-events <id> | Bir gönderimin olay izi, en eskiden yeniye: kabul edildi, zamanlandı, gönderildi, teslim edildi, geri döndü, şikâyet edildi, açıldı, tıklandı ve diğerleri |
| openemail emails get-tracking <id> | Bir gönderimin etkileşim raporu: toplamları, izlenen her kopya için bir kayıt ve tıklamalarıyla birlikte yeniden yazılmış her bağlantı |
| openemail emails cancel <id> | Kuyruktaki ya da zamanlanmış bir e-postayı gitmeden önce durdurun. Onay ister |
| openemail emails reschedule <id> <scheduled-at> | Kuyruktaki ya da zamanlanmış bir e-postayı bir ISO 8601 anına ya da PT30M gibi bir süre sonrasına, bir saniyeden 365 güne kadar ileriye taşıyın |
Tüm tracking komutları
Beşi de emails:read gerektirir. tracking get, list-opens ve list-clicks, bir mesajın sahip olduğu iki id'den birini alır: gönderiminin döndürdüğü msg_ id'si ya da tracking list ile webhook yüklerinin taşıdığı tmsg_ izleme id'si.
| Komut | Ne yapar |
|---|---|
| openemail tracking list | Bir zaman aralığında gönderilmiş izlenen mesajlardan bir sayfa, en yeniden eskiye, her biri tam raporuyla. --opened ve --clicked daraltır, --no-opened ise kimsenin açmadıklarını tutar. --days ya da --minutes aksini söylemedikçe aralık 30 gündür |
| openemail tracking get-stats | Bir etkileşim panelinin arkasındaki sayılar: izlenen, açılan ve tıklanan mesajlar, açılma ve tıklama oranları, --grain dilimlerinde bir zaman serisi ve en çok öne çıkan bağlantılar, posta istemcileri ve ülkeler |
| openemail tracking get <id> | Tek bir mesajın etkileşim raporu, emails get-tracking komutunun döndürdüğü belgenin aynısı |
| openemail tracking list-opens <id> | Bir mesajın açılma sayısının arkasındaki tek tek açılmalar, en yeniden eskiye, her biri human, proxy ya da machine olarak işaretli. --include-machine sayılmayan isabetleri ekler |
| openemail tracking list-clicks <id> | Bir mesajın bağlantılarındaki tek tek tıklamalar, en yeniden eskiye, her birinin özgün url değeriyle. --include-machine bağlantı tarayıcılarını ve birleştirilmiş tekrarları ekler |
tracking list ve get-stats, web uygulamasında yazılan posta ve MCP araçlarının ya da asistanın gönderdiği posta dahil, posta kutusunun gönderdiği izlenen her mesajı kapsar; emails list ise API'nin oluşturduğu gönderim kayıtlarını tutar. Gönderim kaydı olmayan bir raporda sendId değeri null olur.
Örnekler
Bir betikten kendi eş güçlülük anahtarınızla gönderin. Aynı --idempotency-key ile yeniden çalıştırmak, ikinci bir e-posta göndermek yerine ilk e-postayı replayed: true ile yazdırır.
openemail emails send \ --from 'Acme Billing <[email protected]>' \ --to [email protected] \ --subject 'Your September invoice' \ --html '<p>The invoice is attached. Tell me if anything on it looks wrong.</p>' \ --attachments '[{"fileId":"file_6bb640f5b99e47deb758f1f5"}]' \ --tracking '{"opens":false}' \ --idempotency-key invoice:inv_2026_09_4192 \ --json | jq -r '.id + " " + .status'Bir çeviriyi gitmeden önce bir kişiye okutun. Onaylanan metni --translate olmadan düz --subject ve --html olarak gönderin, yoksa ikinci kez çevrilir. --no-include-original vermediğiniz sürece çevrilmiş html, özgün metninizi zaten altında içerir.
openemail emails translate --to de \ --subject 'Your September invoice' \ --html "$(cat invoice.html)" \ --json > preview.jsonjq -r .html preview.jsonopenemail emails send --from [email protected] --to [email protected] \ --subject "$(jq -r .subject preview.json)" \ --html "$(jq -r .html preview.json)"Bir dosyadan toplu gönderim yapın. Komut, bazı öğeler başarısız olsa bile toplu gönderim işlendiği her durumda 0 koduyla çıkar, bu yüzden failed değerini ve her öğenin status değerini okuyun. Aynı anahtarla yeniden çalıştırmak, dizi sırasını koruduğu sürece giden öğeleri yeniden oynatır ve yalnızca geri kalanları gönderir.
[ { "from": "[email protected]", "to": "[email protected]", "subject": "Receipt 4192", "text": "Thanks for your order." }, { "from": "[email protected]", "to": "[email protected]", "subject": "Receipt 4193", "text": "Thanks for your order." }]openemail emails send-batch receipts.json --idempotency-key receipts:2026-09-27 --json > result.jsonjq '{ sent, failed }' result.jsonjq -r '.items[] | select(.status == "error") | "\(.index) \(.error.code)"' result.jsonBir e-postayı zamanlayın, taşıyın ve iptal edin. --yes, cancel komutunun istediği onayı yanıtlar; bir betik bunu yapamaz.
ID=$(openemail send --from [email protected] --to [email protected] --subject "Standup notes" \ --body-file notes.md --at 2026-10-01T09:00:00Z --json | jq -r .id)openemail emails reschedule "$ID" 2026-10-01T13:00:00Zopenemail emails get "$ID" --json | jq -r '.status + " " + .scheduledAt'openemail emails cancel "$ID" --yesBaşarısız olan gönderimleri bulun ve birine ne olduğunu okuyun. --json olmadan bir kanala yönlendirildiğinde --all her satıra bir JSON nesnesi yazdırır.
openemail emails list --status failed,partial --from [email protected] --all | jq -r .idopenemail emails get msg_3f9a1c07d2b84e6a9c5b1f20openemail emails list-events msg_3f9a1c07d2b84e6a9c5b1f20 --all --json | jq -r '.items[] | .createdAt + " " + .type'Bir haftalık etkileşimi UTC+2 gece yarısında bölünen günler hâlinde okuyun, kimsenin açmadıklarını listeleyin ve tek bir mesajın her bağlantısındaki tıklamaları sayın.
openemail tracking get-stats --days 7 --offset-minutes 120 --json | jq '{ tracked, openRate, clickRate }'openemail tracking list --no-opened --days 7 --all | jq -r .subjectopenemail tracking list-clicks msg_3f9a1c07d2b84e6a9c5b1f20 --all | jq -r .url | sort | uniq -cKapsamlar, kodlar ve onaylar
- Bir tarayıcı oturumu kapsamları onay sayfasında ister ve
openemail login --scopes emails:send,emails:readikisini de önceden seçer. Kapsamı eksik olan bir komut4çıkış kodu veinsufficient_scopeile durur ve kapsamın adını verir. - 5 MB'tan fazla dosyayla
send --attachönce onları Dosyalar'a yükler; bu da ayrıcafiles:writegerektirir. - Bu komutların hiçbiri doğrulama kodu istemez, bu yüzden bir tarayıcı oturumu onları bir API anahtarı gibi çalıştırır.
emails canceliptal etmeden önce sorar ve--yessizin yerinize yanıtlar. Gözetimsiz çalışırken--yesyoksaRefusing to run unattended. Pass --yes to confirm.iletisi ve2çıkış koduyla durur.emails send,send-batchverescheduleasla sormaz.sendbir özet gösterir ve yalnızca bir terminalde sorar;--yesbunu da atlar.--dry-runbir komutun göndereceği isteği yazdırır, hiçbir şey göndermez ve0koduyla çıkar.emails translateüzerinde bu hiçbir yapay zekâ işlemi harcamaz,emails cancelüzerinde ise hiçbir şey sormaz.
Sonuç sayfaları
emails list, emails list-events, tracking list, list-opens ve list-clicks tek bir sayfa okur. --limit boyutunu belirler: iki emails listesi için 1 ile 100 arası, varsayılan 25; üç tracking listesi için 1 ile 200 arası, varsayılan 50. --cursor bir sayfanın yazdırdığı imleçten devam eder.
--allher sayfayı okur ve öğeleri akış hâlinde verir: terminalde bir tablo, bir kanala yönlendirildiğinde ya da--ndjsonile her satıra bir JSON nesnesi.--max <n>o kadar öğeden sonra durur ve--allanlamına gelir.--json,--alldahil, tek bir{ items, hasMore, nextCursor }belgesi yazdırır.- Sayfalama ofset ile değil imleçle yapılır, bu yüzden siz sayfalar arasında gezinirken gönderilen posta hiçbir satırı kaydırmaz ya da tekrarlamaz.
Bilmekte fayda var
- Her çalıştırma kendi eş güçlülük anahtarını üretir ve bu anahtar o çalıştırmanın içindeki yeniden denemeleri kapsar. Bir gönderimi iki kez çalıştırmak, iki çalıştırma da aynı
--idempotency-keydeğerini vermedikçe iki kez gönderir. Aynı anahtar farklı bir gövdeyleidempotency_key_reuseve7çıkış koduyla reddedilir. - Yalnızca
queuedvescheduleddurumundaki posta iptal edilebilir ya da taşınabilir. Geri alma penceresi olmayan anlık bir gönderim istek içinde gider, bu yüzden id'sini elinize aldığınızda genellikle çok geçtir ve çağrıemail_not_cancellableve6çıkış koduyla biter. - İptal edilen bir e-posta iptal edilmiş kalır. Yeniden zamanlama yalnızca zamanı değiştirir; bir süre verildiğinde bu süre sunucunun isteği aldığı andan itibaren sayılır. Metni değiştirmek için iptal edip yeniden gönderin.
- Üretilemeyen bir çeviri gönderimin tamamını reddeder ve hiçbir şey çevrilmeden gitmez. Çevrilmiş bir toplu gönderim,
translatetaşıyan en fazla 10 mesaj içerir. - Tükenmiş bir gönderim kotası, bir gönderimi ayın ilk gününe kadar
send_quota_exceededile durdurur; tükenmiş bir yapay zekâ kotası da bir çeviriyi UTC gece yarısına kadarai_quota_exceededile durdurur. İkisi de8çıkış koduyla biter. - Bir
oe_test_anahtarıyla gönderilen posta asla teslim edilmez.sentolarak görünür,transportdeğeritestolur ve asla izlenmez. emails get-trackingvetracking get, piksel ya da yeniden yazılmış bağlantı taşımayan bir mesaj için 404 ve5çıkış koduyla yanıt verir, çünkü izlenmemiş olmak açılmamış olmakla aynı şey değildir. İzleme, mesajın gönderildiği ayarı izler, bu yüzden sonradan açmak önceki postaya ulaşmaz.- Her sayı bir alt sınırdır. Posta istemcisi görselleri engelleyen bir okuyucu asla açılma olarak sayılmaz ve bir tıklama, okunduğunun bir açılmadan daha güçlü kanıtıdır.
list-opensvelist-clicks, hiçbir şeyin izlenmediği birmsg_id'si için 404 döndürür, ancak birtmsg_id'sini verildiği gibi alır; bu yüzden bilinmeyen bir id boş bir liste olarak döner.- Bazı adreslerle sınırlı bir anahtar yalnızca o adreslerden gönderilen postayı görür; bütün bir alan adını tutan bir anahtar ise oradaki her adresi kapsar.
Tüm bayraklar
Bu sayfa en önemli bayrakları adlandırır. openemail <command> --help, bir komutun aldığı her bağımsız değişkeni ve bayrağı türüyle, gereken kapsamla, yöntemi ve yoluyla, ne döndürdüğüyle ve API başvurusundaki notlarla listeler. Aynı yardımı tek bir JSON belgesi olarak almak için --json ekleyin.
openemail emails --helpopenemail emails send --helpopenemail tracking list-opens --help --json