Listeleme ve getirme
`emails.list`, `emails.listAll`, `emails.iterate`, `emails.get` ve `emails.listEvents`.
emails.list
const first = await openemail.emails.list({ status: ['queued', 'scheduled'], from: '[email protected]', limit: 50,}) const second = first.nextCursor ? await openemail.emails.list({ status: ['queued', 'scheduled'], limit: 50, cursor: first.nextCursor }) : nullBir sayfa { items, hasMore, nextCursor } biçimindedir. Sonraki sayfa için nextCursor değerini aynı filtrelerle cursor olarak geri geçirin.
emails.iterate ve emails.listAll
for await (const email of openemail.emails.iterate({ status: 'failed' })) { console.error(email.id, email.lastError)} const failures = await openemail.emails.listAll({ status: 'failed', from: '[email protected]' })İkisi de nextCursor değerini sizin için izler. iterate bir sayfayı yalnızca döngü oraya ulaştığında getirir, dolayısıyla döngüden çıkmak istekleri durdurur; listAll ise tek bir diziye çözülmeden önce her sayfayı dolaşır, bu yüzden ona sonu olan bir filtre verin. Her iki durumda da keyset sayfalama kullanılır; böylece gezinme sırasında gelen bir mesaj, offset'in yapacağı gibi bir satırı atlamanıza yol açamaz.
emails.get ve emails.listEvents
const email = await openemail.emails.get('msg_…')console.log(email.status, email.recipients) const events = await openemail.emails.listEvents('msg_…')for (const event of events) console.log(event.type, event.createdAt)recipients alanını döndüren tek çağrı get'tir; adres başına bir satır. Her biri alıcılarını taşıyan elli mesajlık bir liste, kimsenin istemediği bir rapor sayfası olurdu.
Parametreler
statusEmailStatus | EmailStatus[]- Bir veya birkaç durum (`queued`, `scheduled`, `sending`, `sent`, `partial`, `cancelled`, `failed`); verilenlerden herhangi biriyle eşleşir. SDK bir diziyi virgülle ayrılmış tek bir değer olarak gönderir, çünkü sunucu virgüllerden böler; bu kümenin dışındaki bir değer, bilinmeyeni adıyla belirten bir 422 verir.
fromstring- Kaydedildiği hâliyle gönderen adresle birebir eşleşme; yani küçük harfe çevrilmiş çıplak `addr@host`. Satır, görünen ad temizlenerek yazılır; dolayısıyla `Acme <[email protected]>` gibi açılı ayraçlı bir adres hiçbir şeyle eşleşmez. Verdiğiniz değer karşılaştırmadan önce küçük harfe çevrilir ve bu bir önek veya alan adı eşleşmesi değil, eşitlik karşılaştırmasıdır.
limitnumber- Bu sayfadaki satır sayısı, 1 ila 100, varsayılan 25. Bu aralığın dışındaki bir değer sınıra çekilmek yerine 422 ile reddedilir.
cursorstring- Sayfalamanın başlayacağı mesaj id'si (`msg_…`). Offset değil keyset: satırlar o mesajın `createdAt` değerinden kesinlikle daha eski olarak gelir; böylece sayfa dolaşılırken gelen gönderimler bir satırı sizden öteye itemez. Bu çalışma alanında hiçbir mesajı göstermeyen bir id 400 verir.
Yanıt: Page<EmailResource>
itemsEmailResource[]- `createdAt` değerine göre en yeniden eskiye sıralanmış tek sayfalık mesaj; API'nin `data` zarfından çıkarılmıştır. Liste satırları adres başına `recipients` dökümünü asla taşımaz. O döküm `get` üzerindedir.
hasMoreboolean- Filtreyle eşleşen, bu sayfanın ötesinde başka satır olup olmadığı. İkinci bir sayım sorgusuyla değil, `limit` değerinden bir satır fazla getirilerek yanıtlanır.
nextCursorstring | null- `cursor` olarak geri geçirilecek id; son sayfada null olur. `iterate` ve `listAll`, bu değer null olduğunda veya `hasMore` false olduğunda durur; çünkü daha fazlası olduğunu söyleyip cursor vermeyen bir sayfa sonsuza dek döngüye girerdi.
items[].object'email'- Bu listenin satırlarında her zaman `'email'`.
items[].idstring- Bu API'nin kendi id'si, `msg_…`. Diğer tüm emails uç noktalarının aldığı ve bir cursor'ın gösterdiği değer budur.
items[].statusEmailStatus- Mesajın yaşam döngüsünde nerede olduğu. `partial`, başarısızlığın bir türü değil kendi başına bir durumdur: bazı alıcılar mesajı almıştır ve bu geri alınamaz, dolayısıyla yeniden denemek yanlıştır.
items[].modeApiKeyMode- `live` veya `test`; gönderen anahtardan alınır. Test gönderimi burada kaydedilir ve asla iletilmez.
items[].fromstring- Gönderimin yetkilendirildiği adres; çıplak ve küçük harfli olarak saklanır, dolayısıyla `from` alanında verilen bir görünen ad ağ üzerinde yine de gider ama burada tutulmaz. Nesne değil düz dizgedir, çünkü bu, yetkilendirilmiş kimliktir: bir anahtarın gönderim kapsamı dışındaki, ne sahip olduğu bir alan adında bulunan ne de üzerinde adı geçen bir adres, sahip olduğu bir adresle sessizce değiştirilmez, 403 ile reddedilir.
items[].subjectstring | null- Saklandığı hâliyle konu. Konusuz kaydedilmiş bir mesajda null.
items[].messageIdstring | null- RFC 5322 Message-ID; bizim id'miz değil. MIME oluşana kadar null'dır ve gönderim servisi tarafından çıkışta yeniden yazılır; dolayısıyla sonraki bir geri dönüş veya DSN farklı bir id taşır ve bunun yerine `items[].id` üzerinden eşleştirilir.
items[].threadIdstring | null- Bu mesajın ait olduğu konuşma dizisi; bir dizi verilmiş veya atanmışsa. Aksi hâlde null.
items[].transportEmailTransport | (string & {}) | null- Baytların nasıl gittiği. Gönderime kadar null'dır ve tipi açık bırakılmıştır; böylece bu SDK'nın henüz adlandırmadığı bir taşıma katmanı kırıcı bir değişiklik olmaz: saklanan kayıtlar artık kullanılmayan katmanları da adlandırabilir.
items[].attemptsnumber- Mesaj için kaç gönderim denemesi yapıldığı; ilkinden önce 0.
items[].lastErrorstring | null- En son gönderim hatası, bir insan için yazılmış. Hiçbir şey başarısız olmadıkça null.
items[].scheduledAtstring | null- Mesajın ne zaman gitmesi gerektiği, bir ISO-8601 anı olarak. Yalnızca iptal penceresi olmayan anlık bir gönderimde null olur: pencere kısa bir gecikmeden ibarettir, bu yüzden `cancellableForSeconds` de burayı doldurur; üstelik `status` değeri `scheduled` değil `queued` olan bir satırda.
items[].cancellableUntilstring | null- Mesajın gitmesi gereken an; ertelenmiş her gönderimde `scheduledAt` ile aynı değeri, ertelenmemiş bir gönderimde ise null taşır. Sunucunun yaptığı sınama değil, gösterilecek bir zaman damgasıdır: `cancel`, `status` üzerinden dallanır ve bir mesajı yalnızca hâlâ `queued` veya `scheduled` iken durdurur.
items[].sentAtstring | null- Ne zaman gittiği. Gönderim tamamlanana kadar null'dır; dallanılacak alanın bu değil `status` olmasının nedeni de budur.
items[].tagsRecord<string, string>- Gönderimde verilen etiketler; aynen geri döndürülür ve asla yorumlanmaz. Her zaman bir nesnedir (hiçbiri ayarlanmamışsa `{}`, asla null değil) ve yalnızca yansıtılır: bu uç nokta `status` ve `from` üzerinden filtreler, dolayısıyla bir etiket mesaj bulmanın yolu değil, bir mesajdan okunacak bir şeydir.
items[].sourceEmailSource- Gönderimi hangi yüzeyin istediği: `composer`, `api`, `mcp`, `ai` veya `queue`. `api` bu istemcidir.
items[].createdAtstring- Gönderim kaydının ne zaman yazıldığı; bu, gönderimden öncedir. Listenin sıraladığı ve bir cursor'ın karşılaştırdığı alan budur.
items[].trackingEmailTrackingSummary- Etkileşim özeti; yalnızca mesajı izlenmiş bir satırda bulunur, aksi hâlde hiç bulunmaz. “Bu izlendi mi?” sorusunun yanıtı yokluğudur; `openCount: 0` ise “kimse açmadı” diye okunurdu.
items[].tracking.opensboolean- Bu mesajın bir pikselle gidip gitmediği. Hesap ayarının şu anda ne dediği değil, bu mesaja ne uygulandığı.
items[].tracking.clicksboolean- Bu mesajın bağlantılarının yeniden yazılıp yazılmadığı. Gövdede yeniden yazılacak bağlantı yoksa false olur, çünkü o zaman hiçbir şey değiştirilmemiştir.
items[].tracking.openedboolean- Sayılan herhangi bir açılma kaydedilip kaydedilmediği; `openCount > 0` ifadesinden türetilir.
items[].tracking.clickedboolean- Sayılan herhangi bir tıklama kaydedilip kaydedilmediği; `clickCount > 0` ifadesinden türetilir.
items[].tracking.openCountnumber- Bir insanın yol açtığına inanılan açılmalar, mesajın her kopyası üzerinden toplanır. Tarayıcı botları ve gizlilik vekilleri kaydedilir ama hariç tutulur; otuz saniye içindeki tekrarlı istekler tek bir açılmaya indirgenir.
items[].tracking.clickCountnumber- Sayılan tıklamalar, kopyalar üzerinden toplanır. Mesaj başına değil bağlantı başına tekilleştirilir, çünkü saniyeler arayla iki bağlantıya tıklamak bir tekrar değil iki ayrı eylemdir.
items[].tracking.firstOpenAtstring | null- Kopyalar arasındaki en erken sayılan açılma; hiç yoksa null. Makine istekleri bunu asla değiştirmez.
items[].translationEmailTranslationResource- Bir liste satırında asla bulunmaz: çeviri kaydı, listenin bilerek getirmediği saklanan istekte yer alır. Buradaki yokluğu, mesajın çevrilip çevrilmediği hakkında hiçbir şey söylemez. `get` çağrısına sorun.