दस्तावेज़ पर जाएँ
CLI

थ्रेड, ड्राफ़्ट और लेबल

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 और DRAFT label_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 हर फ़ाइल पूरी की पूरी एक ही जवाब में लौटाती है। संदेश ID threads 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 get 404 देती है।
  • एक वर्कस्पेस में 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 read HTML संदेश को टेक्स्ट में बदलता है और थ्रेड को पढ़ा हुआ चिह्नित करता है। 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:readthreads list, get और list-attachments
threads:writethreads update, trash, snooze और unsnooze
drafts:readdrafts list और get
drafts:writedrafts create, update और delete
labels:readlabels list, list-colors और get
labels:writelabels 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 } दस्तावेज़।
  • जो पेज आख़िरी निकलता है उस पर भी hasMore true हो सकता है, और तब अगली कॉल कोई आइटम नहीं लौटाती। पेज करते समय जिस थ्रेड में नई मेल आती है वह कर्सर से आगे चला जाता है और बाद के पेज में नहीं लौटता, और पेज करते समय सहेजा गया ड्राफ़्ट भी ऐसा ही करता है।
  • 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 --json

openemail <namespace> <verb> --help हर आर्ग्युमेंट और फ़्लैग को उसके टाइप के साथ दिखाता है, साथ में कॉल के ज़रूरी स्कोप, उसका मेथड और पाथ, वह क्या लौटाती है और API रेफ़रेंस के नोट्स। वही मदद डेटा के रूप में पाने के लिए --json जोड़ें।

आपका इनबॉक्स,
आपकी अपनी शर्तों पर।

व्यवसायों, AI, एजेंट और निजी ईमेल के लिए ईमेल इन्फ़्रास्ट्रक्चर। स्केल, निजता और नियंत्रण के लिए बना। वह सब जो ईमेल में पहले दिन से होना चाहिए था।

OpenEmail

व्यवसायों, AI, एजेंट और निजी ईमेल के लिए ईमेल इन्फ़्रास्ट्रक्चर। स्केल, निजता और नियंत्रण के लिए बना। वह सब जो ईमेल में पहले दिन से होना चाहिए था।

© 2026 OpenEmail. सर्वाधिकार सुरक्षित।