सूची और get
`emails->list`, `emails->listAll`, `emails->iterate`, `emails->get` और `emails->listEvents`।
emails->list
$filters = ['status' => ['queued', 'scheduled'], 'from' => '[email protected]']; $first = $client->emails->list(...$filters, limit: 50);$second = $first->hasMore ? $client->emails->list(...$filters, limit: 50, cursor: $first->nextCursor) : null; echo count($first), ' ', $second === null ? 0 : count($second), PHP_EOL;पेज एक OpenEmail\Result\Page है जिसमें items, hasMore और nextCursor होते हैं। उसके बाद वाले पेज के लिए nextCursor को उन्हीं फ़िल्टरों के साथ cursor: के रूप में वापस भेजें। फ़िल्टरों के एक array को हर कॉल में फैलाने से, जैसा ...$filters करता है, वे एक जैसे रहते हैं।
emails->iterate और emails->listAll
foreach ($client->emails->iterate(status: 'failed') as $email) { error_log($email['id'] . ' ' . ($email['lastError'] ?? ''));} $failures = $client->emails->listAll(status: 'failed', from: '[email protected]');echo count($failures), PHP_EOL;दोनों आपके लिए nextCursor का पीछा करते हैं। iterate एक Generator लौटाता है जो पेज तभी लाता है जब चलना वहाँ पहुँचता है, इसलिए foreach से break करने पर रिक्वेस्ट रुक जाती हैं, जबकि listAll एक array लौटाने से पहले हर पेज पर चलता है, इसलिए उसे ऐसा फ़िल्टर दें जो ख़त्म हो। दोनों में keyset paging है, इसलिए बीच में आने वाला संदेश इसे कोई पंक्ति छोड़ने पर मजबूर नहीं कर सकता, जैसा offset के साथ होता।
emails->get और emails->listEvents
$email = $client->emails->get('msg_3f9a1c07d2b84e6a9c5b1f20');echo $email['status'], PHP_EOL;print_r($email['recipients']); $events = $client->emails->listAllEvents('msg_3f9a1c07d2b84e6a9c5b1f20'); foreach ($events as $event) { echo $event['type'], ' ', $event['createdAt'], PHP_EOL;}get अकेली कॉल है जो recipients लौटाती है, हर पते के लिए एक array जिसमें उसका अपना status, error और deliveredAt होता है। पचास संदेशों की सूची, जिसमें हर संदेश अपने प्राप्तकर्ता लिए हो, रिपोर्ट का ऐसा पेज है जो किसी ने माँगा नहीं।
listEvents एक send की event श्रृंखला पढ़ता है, सबसे पुरानी पहले: email.accepted, email.queued, email.sent, email.delivered, email.bounced, email.opened और बाकी, हर एक के साथ एक data array जिसका आकार उसके type पर निर्भर करता है। listAllEvents और iterateEvents आपके लिए पूरी श्रृंखला पर चलते हैं। वेबहुक इन्हीं events का एक हिस्सा होते ही पहुँचाते हैं, इसलिए जब कोई वेबहुक छूट जाए तो यहीं देखें।
पैरामीटर
statusstring or array- एक या कई status (`queued`, `scheduled`, `sending`, `sent`, `partial`, `bounced`, `cancelled`, `failed`), जो दिए गए किसी भी एक से मेल खाते हैं। `bounced` का मतलब है कि संदेश जिन प्राप्तकर्ताओं को गया वे सभी bounce हुए, जबकि जो संदेश कुछ के लिए bounce हुआ और बाकी तक पहुँचा, वह `partial` होता है। क्लाइंट array को कॉमा से अलग किए गए एक मान के रूप में भेजता है क्योंकि सर्वर कॉमा पर बाँटता है, और समूह के बाहर का मान अज्ञात मान का नाम लेने वाला 422 होता है।
broadcastIdstring- सिर्फ़ एक ब्रॉडकास्ट की कॉपियाँ, `broadcasts->send` से मिली `brd_` id। ब्रॉडकास्ट जिस भी व्यक्ति तक पहुँचता है उसे अपना अलग संदेश मिलता है, इसलिए यह बताता है कि यह किन्हें गया और हर कॉपी के साथ क्या हुआ। `broadcasts->listRecipients` इन्हीं लोगों को उनके opens, clicks और unsubscribes के साथ सूचीबद्ध करता है।
fromstring- भेजने वाले पते पर सटीक मिलान, जैसा वह दर्ज हुआ था, यानी छोटे अक्षरों में सादा `addr@host`। पंक्ति हर display name हटाकर लिखी जाती है, इसलिए `Acme <[email protected]>` जैसा angle-addr किसी से मेल नहीं खाता। तुलना से पहले आपका मान छोटे अक्षरों में बदला जाता है, और यह बराबरी है, prefix या डोमेन मिलान नहीं।
scheduledFromDateTimeInterface or string- सिर्फ़ इस क्षण या उसके बाद के लिए शेड्यूल किए गए संदेश। `scheduledTo:` और `status: ['scheduled', 'queued']` के साथ यह किसी अवधि में बाहर जाने का इंतज़ार कर रहे संदेशों की सूची देता है, जैसा ऐप का कैलेंडर करता है। जिस संदेश में `scheduledAt` नहीं है उसे छोड़ दिया जाता है। UTC में क्षण के रूप में भेजा जाने वाला `DateTimeInterface`, या offset वाला ISO 8601 क्षण पास करें: बिना समय वाली तारीख़ की स्ट्रिंग इन दोनों फ़िल्टरों द्वारा अस्वीकार की जाती है।
scheduledToDateTimeInterface or string- सिर्फ़ वे संदेश जो इस क्षण या पहले के लिए शेड्यूल हैं। `scheduledTo:` के बाद का `scheduledFrom:` 422 `invalid_parameter` है।
limitint- इस पेज की पंक्तियाँ, 1 से 100, डिफ़ॉल्ट 25। उस सीमा से बाहर का मान सीमा में काटे जाने के बजाय 422 के रूप में अस्वीकार होता है। `listAll` और `iterate` पर यह उनके लाए हर पेज का आकार है।
cursorstring- जिस संदेश id (`msg_…`) से पेजिंग करनी है। offset नहीं, keyset: पंक्तियाँ उस संदेश के `createdAt` से सख़्ती से पुरानी लौटती हैं, इसलिए पेज के बीच आए sends कोई पंक्ति आपसे आगे नहीं धकेल सकते। जो id इस वर्कस्पेस के किसी संदेश का नाम नहीं लेती वह 400 `invalid_cursor` है।
apiKeystring- क्लाइंट की कुंजी के बजाय इस कुंजी से सूची लेता है।
कुछ पतों तक सीमित कुंजी सिर्फ़ उन पतों से भेजे गए संदेश पढ़ती है जिन्हें वह कवर करती है, और पेज उस फ़िल्टर के बाद काटा जाता है, इसलिए आख़िरी को छोड़ हर पेज में फिर भी limit पंक्तियाँ होती हैं। जो from: कुंजी कवर नहीं करती वह 403 के बजाय एक ख़ाली आख़िरी पेज लौटाता है।
जवाब: OpenEmail\Result\Page
itemsarray- संदेशों का एक पेज, `createdAt` के अनुसार सबसे नए पहले, API के `data` लिफ़ाफ़े से निकाला हुआ। list की पंक्तियाँ प्रति-पता `recipients` विवरण कभी नहीं ढोतीं। वह `get` पर है।
hasMorebool- क्या इस पेज के आगे भी और पंक्तियाँ फ़िल्टर से मेल खाती हैं। इसका उत्तर दूसरी count query से नहीं, बल्कि `limit` से एक पंक्ति ज़्यादा लाकर दिया जाता है।
nextCursorstring or null- `cursor:` के रूप में वापस भेजी जाने वाली id, और आख़िरी पेज पर null। `iterate` और `listAll` तब रुकते हैं जब यह null हो या `hasMore` false हो, क्योंकि जो पेज और होने का दावा करे पर कोई cursor न बताए, वह हमेशा लूप करता रहेगा।
हर आइटम
objectstring- इस सूची की पंक्ति पर हमेशा `email`।
idstring- इस API की अपनी id, `msg_…`। बाक़ी हर emails कॉल यही लेती है, और cursor भी इसी का नाम लेता है।
statusstring- संदेश अपने जीवन में कहाँ है। `partial` failed का कोई रूप नहीं बल्कि अपने आप में एक स्थिति है: कुछ प्राप्तकर्ताओं के पास वह पहुँच चुका है और उसे वापस नहीं लिया जा सकता, इसलिए दोबारा कोशिश करना ग़लत है। `bounced` का अर्थ है कि भेजे जाने के बाद वह हर प्राप्तकर्ता से बाउंस हो गया, इसलिए वह किसी के पास नहीं है, और `get` में हर प्राप्तकर्ता इसका कारण बताता है।
modestring- `live` या `test`, उसी कुंजी से लिया गया जिसने भेजा। test send यहाँ दर्ज होता है और कभी प्रेषित नहीं होता।
fromstring- वह पता जिसके तहत send की अनुमति मिली, सादा और lowercase करके सहेजा गया, इसलिए `from` पर दिया गया display name नेटवर्क पर तो जाता है पर यहाँ नहीं रखा जाता। यह array के बजाय सादी स्ट्रिंग है क्योंकि यही वह पहचान है जिसे अनुमति मिली: कुंजी के send scope के बाहर का पता, जो न उसके किसी डोमेन पर है और न उस पर नामित है, 403 के साथ अस्वीकार किया जाता है, उसे कभी चुपचाप scope के भीतर के किसी पते से नहीं बदला जाता।
subjectstring or null- सहेजा गया subject। जो संदेश बिना subject के दर्ज हुआ उस पर null।
messageIdstring or null- RFC 5322 Message-ID, हमारी id नहीं। MIME बनने तक null, और बाहर जाते समय भेजने वाली सेवा इसे फिर से लिखती है, इसलिए बाद में आने वाला bounce या DSN एक अलग id रखता है और इसके बजाय `id` से जुड़ता है।
threadIdstring or null- वह thread जिसका यह संदेश है, जहाँ कोई दिया या सौंपा गया हो। अन्यथा null।
transportstring or null- बाइट्स कैसे गए। dispatch होने तक null। सहेजे गए रिकॉर्ड में ऐसे transport के नाम भी हो सकते हैं जो अब इस्तेमाल नहीं होते, इसलिए जो मान आप न जानते हों उसे error के बजाय जानकारी मानें।
attemptsint- संदेश के कितने dispatch प्रयास हो चुके हैं; पहले प्रयास से पहले 0।
lastErrorstring or null- सबसे हाल की dispatch error, किसी व्यक्ति के लिए लिखी गई। जब तक कुछ विफल न हुआ हो तब तक null।
scheduledAtstring or null- संदेश कब जाना है, ISO 8601 क्षण के रूप में। null सिर्फ़ उस तुरंत send पर जिसमें रद्द करने की कोई अवधि न हो: अवधि बस एक छोटी देरी है और कुछ नहीं, इसलिए `cancellableForSeconds` भी इसे भरता है, ऐसी पंक्ति पर जिसका `status` `scheduled` के बजाय `queued` है।
cancellableUntilstring or null- वह क्षण जब संदेश रवाना होना है; किसी भी टाले गए send पर यह `scheduledAt` जैसा ही मान रखता है और न टाले गए पर null। यह दिखाने के लिए एक timestamp है, वह परीक्षा नहीं जो सर्वर करता है: `cancel` `status` पर शाखा बनाता है, और संदेश को केवल तब तक रोकता है जब तक वह `queued` या `scheduled` हो।
sentAtstring or null- कब गया। dispatch पूरा होने तक null, इसीलिए branch करने के लिए यह नहीं, बल्कि `status` फ़ील्ड है।
tagsarray- send पर दिए गए लेबल, जो वैसे ही लौटाए जाते हैं और कभी interpret नहीं किए जाते। हमेशा एक array, कोई सेट न होने पर ख़ाली और कभी null नहीं, और सिर्फ़ लौटाए जाते हैं: यह सूची `status`, `from`, `broadcastId` और शेड्यूल की अवधि पर फ़िल्टर करती है, इसलिए tag संदेश ढूँढने का तरीक़ा नहीं, बल्कि संदेश से पढ़ी जाने वाली चीज़ है।
broadcastIdstring or null- वह `brd_` broadcast जिसकी यह संदेश एक कॉपी है, या अकेले भेजे गए संदेश के लिए null।
sourcestring- किस सतह ने send माँगा: `composer`, `api`, `mcp`, `ai` या `queue`। `api` यही क्लाइंट है।
createdAtstring- send का रिकॉर्ड कब लिखा गया, जो dispatch से पहले होता है। यही वह फ़ील्ड है जिससे सूची क्रम में लगती है और जिससे cursor तुलना करता है।
trackingarray- engagement का सारांश, सिर्फ़ उस पंक्ति पर मौजूद जिसका संदेश track किया गया, वरना अनुपस्थित। अनुपस्थित होना ही “क्या इसे track किया गया” का जवाब है, जबकि 0 वाला `openCount` “किसी ने नहीं खोला” पढ़ा जाता, इसलिए कुंजी मानकर चलने के बजाय इसे `?? null` के साथ पढ़ें।
translationarray- list की पंक्ति पर कभी मौजूद नहीं: अनुवाद का रिकॉर्ड संग्रहित रिक्वेस्ट में रहता है, जिसे list जानबूझकर नहीं लाती। यहाँ इसकी अनुपस्थिति इस बारे में कुछ नहीं कहती कि संदेश अनूदित हुआ था या नहीं। `get` से पूछें।
किसी आइटम की ट्रैकिंग
opensbool- क्या यह संदेश pixel के साथ गया। यह वही है जो इस संदेश पर लागू हुआ, न कि वह जो खाता-सेटिंग अब कहती है।
clicksbool- क्या इस संदेश के लिंक दोबारा लिखे गए। जब बॉडी में दोबारा लिखने को कोई लिंक न हो तो false, क्योंकि तब कुछ बदला ही नहीं।
openedbool- क्या कोई गिना गया open दर्ज हुआ, जो `openCount` के 0 से ऊपर होने से निकाला जाता है।
clickedbool- क्या कोई गिना गया click दर्ज हुआ, जो `clickCount` के 0 से ऊपर होने से निकाला जाता है।
openCountint- वे opens जिनके बारे में माना जाता है कि वे किसी व्यक्ति के कारण हुए, संदेश की हर प्रति पर जोड़कर। स्कैनर और privacy proxies दर्ज तो होते हैं पर बाहर रखे जाते हैं, और तीस सेकंड के भीतर की दोहराई गई fetch एक में समा जाती हैं।
clickCountint- गिने गए clicks, सभी प्रतियों पर जोड़कर। इनका दोहराव प्रति संदेश नहीं बल्कि प्रति लिंक हटाया जाता है, क्योंकि कुछ सेकंड के अंतर पर दो लिंक खोलना दो कर्म हैं, दोहराव नहीं।
firstOpenAtstring or null- सभी प्रतियों में सबसे पहला गिना गया open, और कोई न होने पर null। मशीनी hits इसे कभी नहीं हिलातीं।