थ्रेड, ड्राफ़्ट और लेबल
threads, drafts और labels नेमस्पेस की हर कमांड, और वे inbox, read, archive और दूसरी मेल कमांड के नीचे कैसे काम करती हैं।
अवलोकन
मेल कमांड, जैसे inbox, read, archive और label add, लोगों के लिए लिखी गई हैं: वे एक साथ कई थ्रेड ID लेती हैं, जो प्रिंट करती हैं उसे फ़ॉर्मैट करती हैं और लेबल ID को नज़र से दूर रखती हैं। उनमें से हर एक इस पेज की कमांड चलाती है, जो थ्रेड, ड्राफ़्ट और लेबल के SDK मेथड हैं, हर मेथड के लिए एक कमांड, इसलिए threads.listAttachments बनता है openemail threads list-attachments।
इन्हें तब इस्तेमाल करें जब आपको वह चाहिए जो मेल कमांड छोड़ देती हैं: ठीक वैसा थ्रेड जैसा API लौटाता है, किसी संदेश की फ़ाइलें, ड्राफ़्ट, और लेबल बनाना, उनका नाम बदलना, रंग बदलना या हटाना।
- बहुवचन नामों के साथ
openemail threadऔरopenemail draftभी काम करते हैं।openemail labelsका कोई एकवचन रूप नहीं है:openemail labelवह मेल कमांड है जो थ्रेड पर लेबल लगाती है। - वर्ब सामान्य उपनाम लेते हैं:
listके लिएls,getके लिएshowऔरview,createके लिएnewऔरadd,updateके लिएedit, औरdeleteके लिएrm,delऔरremove। - हर फ़्लैग
openemail <namespace> <verb> --helpमें है, जैसेopenemail threads list --help।
थ्रेड
मेलबॉक्स की बातचीत। CAHk7pQ2x9LmZ4 जैसी थ्रेड ID threads list, openemail inbox या openemail search से मिलती है।
| कमांड | यह क्या करता है |
|---|---|
| openemail threads list | किसी फ़ोल्डर के थ्रेड का एक पेज दिखाएँ, नए पहले। हर पंक्ति सिर्फ़ एक ID है। --folder, --query, --label-ids, --sort, --date-from, --date-to और --from-contacts इसे छाँटते और क्रम देते हैं |
| openemail threads get <id> | किसी थ्रेड को उसके हर संदेश के साथ पढ़ें, पुराने पहले, उसके लेबल और अनपढ़ी स्थिति के साथ |
| openemail threads update <id> | --read से थ्रेड को पढ़ा हुआ या --no-read से अनपढ़ा चिह्नित करें, और --add-label-ids और --remove-label-ids से लेबल लगाएँ या हटाएँ, हर एक में 50 तक |
| openemail threads trash <id> | थ्रेड को एक ही बार में इनबॉक्स, स्पैम, स्नूज़ और आर्काइव से निकालकर बिन में ले जाएँ। पुष्टि माँगती है |
| openemail threads snooze <id> <wake-at> | किसी थ्रेड को भविष्य के किसी समय तक छिपाएँ, जैसे 2026-10-01T09:00:00Z। फिर से स्नूज़ करने पर लौटने का समय बदल जाता है |
| openemail threads unsnooze <id> | स्नूज़ किए थ्रेड को अभी इनबॉक्स में वापस लाएँ और उसका लौटने का समय हटा दें |
| openemail threads list-attachments <id> <message-id> | एक संदेश के अटैचमेंट दिखाएँ, हर एक के बाइट content में base64 के रूप में इनलाइन |
--folderडिफ़ॉल्ट रूप सेinboxहै और लेबल ID के रूप में मिलाया जाता है, इसलिएsent,archive,spam,trash,draft,snoozed,starredऔरunreadकाम करते हैं,binकोtrashपढ़ा जाता है, औरUSER_RECEIPTSजैसी यूज़र लेबल ID भी काम करती है। जो फ़ोल्डर किसी से मेल नहीं खाता, वह एरर नहीं, ख़ाली पेज लौटाता है।--queryऐप का खोज सिंटैक्स लेता है, औरin:anywhereहर फ़ोल्डर में खोजता है।--label-idsऔर छाँटता है, क्योंकि थ्रेड में फ़ोल्डर और आपकी दी हर ID होनी चाहिए।--date-fromऔर--date-toहर थ्रेड का सबसे नया संदेश देखते हैं, और दोनों सिरे शामिल होते हैं।threads getसंदेशों में बिना भेजे ड्राफ़्ट जवाब भी शामिल करती है,isDraft: trueके निशान के साथ, और यह ड्राफ़्ट ID भी खोलती है।threads updateको--read,--no-readया जोड़ने या हटाने के लिए कोई लेबल चाहिए। हटाना जोड़ने से पहले लागू होता है। जो लेबल ID किसी लेबल की नहीं है, वहlabel_not_foundके साथ अस्वीकार होती है और थ्रेड पर कुछ नहीं बदलता, इसलिए पहले लेबल बनाएँ।TRASH,SNOOZEDऔरDRAFTlabel_not_directly_settableके साथ अस्वीकार होते हैं:threads trashऔरthreads snoozeइस्तेमाल करें।threads trashकुछ नहीं हटाती, और थ्रेडthreads getसे पढ़ने लायक रहता है, पर कोई कमांड थ्रेड को बिन से वापस नहीं निकालती। स्नूज़ किए थ्रेड को बिन में डालने से उसका लौटना भी रद्द हो जाता है।threads snooze<wake-at>को जैसा है वैसा भेजती है, इसलिए इसेZया ऑफ़सेट वाला भविष्य का ISO 8601 समय दें, क्योंकि बिना इनके समय सर्वर के टाइम ज़ोन में पढ़ा जाता है।3hजैसी देरी अमान्य मानकर अस्वीकार होती है।openemail snooze --until 3hदेरी लेता है। थ्रेड हर घंटे होने वाली जाँच पर लौटते हैं, लगभग एक घंटे तक देर से, और हमेशा इनबॉक्स में।threads list-attachmentsहर फ़ाइल पूरी की पूरी एक ही जवाब में लौटाती है। संदेश IDthreads getकेmessagesसे लें। जब सहेजे गए बाइट न मिलें तोcontentख़ाली स्ट्रिंग होता है, इसलिए डिकोड करने से पहले उसकी लंबाई जाँचें।
ड्राफ़्ट
मेलबॉक्स में सहेजे गए बिना भेजे संदेश। ड्राफ़्ट ID draft- से शुरू होती है।
| कमांड | यह क्या करता है |
|---|---|
| openemail drafts list | ड्राफ़्ट का एक पेज दिखाएँ, सबसे हाल में सहेजे पहले। हर पंक्ति सिर्फ़ एक ID है, और --query उनमें खोजता है |
| openemail drafts get <id> | किसी ड्राफ़्ट के प्राप्तकर्ता, विषय, बॉडी, भेजने वाला, वह थ्रेड जिसका वह जवाब है और उसके अटैचमेंट के नाम पढ़ें |
| openemail drafts create | --to, --cc, --bcc, --subject, --html, --text, --from और --thread-id से नया ड्राफ़्ट सहेजें, सभी वैकल्पिक |
| openemail drafts update <id> | सहेजे गए ड्राफ़्ट के फ़ील्ड बदलें। जो फ़ील्ड आप छोड़ देते हैं, उसका मान बना रहता है |
| openemail drafts delete <id> | ड्राफ़्ट को हमेशा के लिए हटाएँ। यह बिन में नहीं जाता। पुष्टि माँगती है |
drafts list --queryविषय, भेजने वाले और बॉडी की शुरुआत में खोजता है, और कभी ड्राफ़्ट से बाहर नहीं जाता।older_than:30dऔर दूसरे तारीख़ ऑपरेटर देखते हैं कि ड्राफ़्ट आख़िरी बार कब सहेजा गया, औरto:,cc:औरbcc:ड्राफ़्ट पर किसी से मेल नहीं खाते।- ड्राफ़्ट
DRAFTलेबल वाले थ्रेड के रूप में सहेजा जाता है, इसलिएthreads getउसे खोलती है औरopenemail inbox draftउनकी सूची देता है।drafts get,updateऔरdeleteसामान्य थ्रेड ID को 404 के साथ अस्वीकार करती हैं। - बिना कुछ जोड़े
openemail drafts createएक ख़ाली ड्राफ़्ट सहेजती है। सिर्फ़ लंबाई जाँची जाती है: विषय 998 वर्ण तक, और--htmlऔर--textहर एक 1,000,000 तक, और दोनों दिए हों तो--htmlरखा जाता है। अटैचमेंट के लिए कोई फ़्लैग नहीं है। drafts updateआपकी भेजी हर फ़ील्ड को बदल देती है। कोई सूची सहेजी गई सूची को पूरा बदल देती है, इसलिए एक पते वाला--toबाकी पतों को हटा देता है, और अपडेट ड्राफ़्ट की अटैचमेंट सूची ख़ाली कर देता है।--thread-idउस थ्रेड को दर्ज करता है जिसका ड्राफ़्ट जवाब है, पर ड्राफ़्ट फिर भी अपने अलग थ्रेड के रूप में सहेजा जाता है।drafts createदोबारा चलाने से दूसरा ड्राफ़्ट सहेजा जाता है, क्योंकि यह कोई idempotency कुंजी नहीं लेती। कॉमा वाला डिस्प्ले नाम दो टूटे प्राप्तकर्ताओं में बँट जाता है, इसलिए कॉमा न डालें।openemail send --draft <id> --to <address>एक ड्राफ़्ट भेजता है। बॉडी ड्राफ़्ट से आती है, और विषय भी, जब तक आप--subjectन दें, जबकि प्राप्तकर्ता वही होते हैं जो आप बताते हैं। इसे बॉडी,--templateया--translateके साथ नहीं मिलाया जा सकता।
लेबल
वे लेबल जो थ्रेड पर लग सकते हैं। यूज़र लेबल ID USER_ के बाद वह नाम होती है जिससे लेबल बनाया गया, बड़े अक्षरों में, और लगातार ख़ाली जगह का हर हिस्सा _ में बदला हुआ, इसलिए Big Clients बनता है USER_BIG_CLIENTS।
| कमांड | यह क्या करता है |
|---|---|
| openemail labels list | वर्कस्पेस के यूज़र लेबल की सूची, नाम के क्रम में, हर एक अपने रंग, threadCount, createdAt और updatedAt के साथ |
| openemail labels list-colors | ऐप की दी गई पैलेट की सूची, चौदह ठोस रंग और सात ग्रेडिएंट। रंग के रूप में value दें |
| openemail labels get <id> | एक यूज़र लेबल पढ़ें, जिसकी ID बड़े-छोटे अक्षरों का फ़र्क़ मानकर मिलाई जाती है |
| openemail labels create --name <value> | यूज़र लेबल बनाएँ। --color-background-color उसे रंग देता है |
| openemail labels update <id> | लेबल का नाम या रंग बदलें। ID वही रहती है, और उस लेबल वाले थ्रेड भी |
| openemail labels delete <id> | लेबल हटाएँ और उसे हर उस थ्रेड से हटाएँ जिस पर वह लगा था। पुष्टि माँगती है |
- ID कभी नहीं बदलती, नाम बदलने के बाद भी, इसलिए नाम की जगह ID सहेजें।
INBOX,STARREDऔरUNREADजैसे सिस्टम लेबल सूची में नहीं आते और बदले या हटाए नहीं जा सकते, हालाँकिthreads updateउन्हें लेती है। उनमें से किसी परlabels get404 देती है।- एक वर्कस्पेस में 50 तक यूज़र लेबल होते हैं। जो नाम किसी दूसरे लेबल का पहले से है, बड़े-छोटे अक्षरों का फ़र्क़ किए बिना, वह
label_name_takenके साथ अस्वीकार होता है। - रंग
#3B82F6जैसा hex मान याgradient:sunsetजैसा ग्रेडिएंट टोकन होता है।--label-colorपूरा रंग JSON के रूप में लेता है, और--label-color nullउसे हटा देता है। - लेबल वर्कस्पेस का होता है, इसलिए उसका नाम या रंग बदलने या उसे हटाने से वह उसमें मौजूद सभी के लिए बदल जाता है।
labels deleteको पूर्ववत नहीं किया जा सकता। उसी नाम से फिर लेबल बनाने पर वही ID मिलती है, पर थ्रेड को वह वापस नहीं मिलता।labels getमें उसकाthreadCountबताता है कि कितनी बातचीत से वह हट जाएगा।
मेल कमांड इन्हें कैसे इस्तेमाल करती हैं
| मेल कमांड | यह क्या चलाती है |
|---|---|
| inbox [folder] | एक पेज के लिए threads list, फिर हर थ्रेड पर threads get, एक बार में छह |
| search <query...> | threads list --query, फिर हर थ्रेड पर threads get |
| read <thread-id> | threads get, फिर threads update --read, जब तक आप --no-mark-read न दें |
| reply <thread-id> | प्राप्तकर्ता, विषय और भेजने वाले पते के लिए threads get, फिर थ्रेड में emails send |
| archive <thread-id...> | threads update --add-label-ids ARCHIVE --remove-label-ids INBOX |
| unarchive <thread-id...> | threads update --add-label-ids INBOX --remove-label-ids ARCHIVE |
| star, unstar <thread-id...> | STARRED जोड़ने या हटाने वाली threads update |
| mark read, unread <thread-id...> | threads update --read, या --no-read |
| trash <thread-id...> | threads trash |
| snooze <thread-id...> --until <when> | threads snooze, जिसमें 3h जैसी देरी पहले एक समय में बदली जाती है |
| unsnooze <thread-id...> | threads unsnooze |
| label add, remove <thread-id...> | threads update --add-label-ids, या --remove-label-ids |
| send --draft <id> | emails send --draft-id |
- मेल कमांड कई थ्रेड ID लेती है और हर एक के बारे में बताती है, और
--jsonके साथ{ results, succeeded, failed }प्रिंट करती है। इस पेज की कमांड एक ID लेती है और वह प्रिंट करती है जो API लौटाता है। openemail inboxअपनी सूची के हर थ्रेड को पढ़ता है ताकि दिखा सके कि आख़िरी बार किसने लिखा और विषय क्या है।threads listहर पेज के लिए एक अनुरोध करती है और सिर्फ़ ID प्रिंट करती है, जो किसी पाइपलाइन के लिए काफ़ी है।openemail readHTML संदेश को टेक्स्ट में बदलता है और थ्रेड को पढ़ा हुआ चिह्नित करता है।threads getथ्रेड को वैसा ही प्रिंट करती है जैसा API लौटाता है और कुछ नहीं बदलती।
उदाहरण
एक ही अनुरोध में थ्रेड को पढ़ा हुआ चिह्नित करें, आर्काइव करें और लेबल लगाएँ, जहाँ mark read, archive और label add तीन अनुरोध करतीं:
openemail threads update CAHk7pQ2x9LmZ4 --read --add-label-ids ARCHIVE,USER_RECEIPTS --remove-label-ids INBOX --jsonएक लेबल बनाएँ और हर मेल खाते थ्रेड को उसके तहत रखें। पाइप करने पर --all हर लाइन में एक JSON ऑब्जेक्ट प्रिंट करता है:
openemail labels create --name Receipts --color-background-color gradient:meadowopenemail threads list --query "in:anywhere subject:receipt newer_than:1y" --all | jq -r .id | xargs openemail label add --label USER_RECEIPTSकिसी संदेश से एक फ़ाइल सहेजें। संदेश ID threads get के messages में होती हैं:
openemail threads get CAHk7pQ2x9LmZ4 --json | jq -r ".messages[].id"openemail threads list-attachments CAHk7pQ2x9LmZ4 message_4c1b257a --json | jq -r '.[] | select(.filename == "invoice.pdf") | .content' | base64 --decode > invoice.pdfड्राफ़्ट लिखें, उसे बदलें, वापस पढ़ें, फिर भेजें:
DRAFT=$(openemail drafts create --to [email protected] --subject "Engine notes for Thursday" --html "<p>Agenda below.</p>" --json | jq -r .id)openemail drafts update "$DRAFT" --to [email protected],[email protected]openemail drafts get "$DRAFT"openemail send --draft "$DRAFT" --from [email protected] --to [email protected],[email protected]जिन ड्राफ़्ट को 30 दिनों से किसी ने नहीं सहेजा, उन्हें साफ़ करें। ड्राई रन हर DELETE को भेजे बिना प्रिंट करता है, और --yes पुष्टि का जवाब देता है:
openemail drafts list --query older_than:30d --all | jq -r .id > stale.txtxargs -n 1 openemail drafts delete --dry-run < stale.txtxargs -n 1 openemail drafts delete --yes < stale.txtपैलेट से एक ग्रेडिएंट चुनें, बदलाव का प्रीव्यू देखें, उसे लागू करें, और बाद में रंग फिर से हटा दें:
openemail labels list-colors --json | jq -r '.[] | select(.kind == "gradient") | .value'openemail labels update USER_RECEIPTS --name "Receipts 2026" --color-background-color gradient:aurora --dry-runopenemail labels update USER_RECEIPTS --name "Receipts 2026" --color-background-color gradient:auroraopenemail labels update USER_RECEIPTS --label-color nullस्कोप और सत्यापन कोड
| स्कोप | कमांड |
|---|---|
| threads:read | threads list, get और list-attachments |
| threads:write | threads update, trash, snooze और unsnooze |
| drafts:read | drafts list और get |
| drafts:write | drafts create, update और delete |
| labels:read | labels list, list-colors और get |
| labels:write | labels create, update और delete |
स्कोप न होने पर कमांड एग्ज़िट कोड 4 के साथ रुकती है। इनमें से कोई भी कमांड सत्यापन कोड नहीं माँगती, न ब्राउज़र साइन-इन के साथ न API कुंजी के साथ।
कुछ पतों तक सीमित साइन-इन या कुंजी सिर्फ़ उन पतों पर पहुँचे थ्रेड देखती है, और कोई भी दूसरा थ्रेड 404 होता है, जैसे वह मौजूद ही न हो। लेबल वर्कस्पेस के होते हैं, इसलिए वह फिर भी हर लेबल देखती है, पर threadCount सिर्फ़ वही बातचीत गिनता है जो उसे दिखती है।
पेज, पुष्टि और ड्राई रन
threads list,drafts listऔरlabels listएक पेज पढ़ती हैं, 25, जब तक--limitकुछ और न कहे, 100 तक।--cursorकिसी पेज के प्रिंट किए कर्सर से आगे बढ़ता है। थ्रेड कर्सर वही क्रम रखता है जिसमें वह दिया गया था, इसलिए उसके साथ वही फ़िल्टर भेजें।--allहर पेज पढ़ता है और--max <n>उतने के बाद रुकता है। पाइप करने पर या--ndjsonके साथ यह हर लाइन में एक JSON ऑब्जेक्ट प्रिंट करता है, और--jsonके साथ एक{ items, hasMore, nextCursor }दस्तावेज़।- जो पेज आख़िरी निकलता है उस पर भी
hasMoretrue हो सकता है, और तब अगली कॉल कोई आइटम नहीं लौटाती। पेज करते समय जिस थ्रेड में नई मेल आती है वह कर्सर से आगे चला जाता है और बाद के पेज में नहीं लौटता, और पेज करते समय सहेजा गया ड्राफ़्ट भी ऐसा ही करता है। threads trash,drafts deleteऔरlabels deleteपुष्टि माँगती हैं। बिना निगरानी के,--json,--no-inputके साथ या बिना टर्मिनल के, वे एग्ज़िट कोड2के साथ रुकती हैं और कुछ नहीं बदलतीं, जब तक आप--yesन दें।--dry-runवह अनुरोध प्रिंट करता है जो कमांड भेजती, क्रेडेंशियल छिपाकर, और उसे भेजे या पुष्टि माँगे बिना कोड0के साथ बाहर निकलता है।--jsonके साथ यह{ dryRun, request }प्रिंट करता है।
JSON बॉडी और फ़ील्ड ख़ाली करना
--data पूरी बॉडी JSON के रूप में लेता है, इनलाइन, @path से फ़ाइल से, या - से stdin से, और साथ में दिया गया फ़्लैग उसी नाम की JSON कुंजी को बदल देता है।
ख़ाली फ़्लैग मान उपयोग की एरर है, इसलिए जो फ़ील्ड ख़ाली मान से साफ़ होती है वह इसके बजाय --data से जाती है। --label-color null लेबल का रंग हटा देता है।
openemail drafts update draft-5f0c2a9e-8b1d-4e7a-a3c6-2d9f41b7e0c8 --data '{"from":""}'openemail drafts update draft-5f0c2a9e-8b1d-4e7a-a3c6-2d9f41b7e0c8 --data '{"threadId":""}'openemail drafts update draft-5f0c2a9e-8b1d-4e7a-a3c6-2d9f41b7e0c8 --data '{"to":[]}'openemail drafts create --data @draft.json --subject "Overrides the file"पहला ड्राफ़्ट को बिना भेजने वाले के सहेजता है, दूसरा उसे उस थ्रेड से अलग करता है जिसका वह जवाब था, और तीसरा उसके प्राप्तकर्ता हटा देता है।
हर फ़्लैग
openemail threads --helpopenemail threads list --helpopenemail drafts create --help --jsonopenemail <namespace> <verb> --help हर आर्ग्युमेंट और फ़्लैग को उसके टाइप के साथ दिखाता है, साथ में कॉल के ज़रूरी स्कोप, उसका मेथड और पाथ, वह क्या लौटाती है और API रेफ़रेंस के नोट्स। वही मदद डेटा के रूप में पाने के लिए --json जोड़ें।