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

संपर्क, ऑडियंस और ब्रॉडकास्ट

पता पुस्तिका, ऑडियंस, ब्रॉडकास्ट और सप्रेशन सूची की हर कमांड, काम करते उदाहरणों के साथ।

ये आपस में कैसे जुड़ते हैं

जिन लोगों को आप लिखते हैं, उन्हें चार नेमस्पेस कवर करते हैं। संपर्क वर्कस्पेस की पता पुस्तिका हैं, ऑडियंस संपर्कों की नाम वाली सूचियाँ हैं, ब्रॉडकास्ट कुछ ऑडियंस में मौजूद हर व्यक्ति को एक संदेश भेजता है, और सप्रेशन सूची में वे पते होते हैं जिन पर वर्कस्पेस नहीं भेजेगा। हर कमांड एक SDK मेथड कॉल करती है, इसलिए SDK पेज उन्हीं कॉल को ज़्यादा विस्तार से बताते हैं।

  • संपर्क की कोई ID नहीं होती। उसका पता ही वह कुंजी है जो हर contacts कमांड लेती है, आगे-पीछे की ख़ाली जगह हटाकर और छोटे अक्षरों में, इसलिए [email protected] और [email protected] एक ही संपर्क हैं। ऑडियंस की aud_ ID होती है, ब्रॉडकास्ट की brd_ ID, और सप्रेशन की वह ID जो suppressions list प्रिंट करती है।
  • हर संपर्क जब तक मौजूद है, डिफ़ॉल्ट ऑडियंस में रहता है। उस ऑडियंस को न हटाया जा सकता है, न ख़ाली किया जा सकता है, न उसमें से किसी को निकाला जा सकता है, और उस पर builtin default होता है।
  • पता पुस्तिका वर्कस्पेस की होती है, इसलिए हर सदस्य और हर कुंजी उसी एक को पढ़ती और लिखती है।
  • हर नेमस्पेस अपने एकवचन रूप से भी चलता है, जैसे openemail contact get, और सामान्य उपनाम काम करते हैं: ls, show, new, edit और rm। suppressions में, जिसके वर्ब add और remove हैं, new से add चलता है और rm से remove।

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

संपर्क

वर्कस्पेस की पता पुस्तिका: वे लोग जिन्हें किसी सदस्य ने ऐप के कंपोज़र से लिखा है, और हाथ से सहेजा गया हर कोई। आने वाली मेल किसी को नहीं जोड़ती, और न ही API या CLI से भेजना।

कमांडयह क्या करता है
openemail contacts listसहेजे गए संपर्कों का एक पेज, सबसे हाल में मेल किए पहले। --source manual या auto संपर्क रखता है, और --q नाम और पतों में खोजता है
openemail contacts get <email>एक संपर्क, हर उस ऑडियंस के साथ जिसमें वह है
openemail contacts create --email <value>--name, --notes और --audience-ids के साथ नया संपर्क सहेजें। पता पुस्तिका में पहले से मौजूद पता 409 contact_exists के साथ अस्वीकार होता है
openemail contacts update <email>--name या --notes बदलें, जहाँ null उसे साफ़ करता है। पता ख़ुद नहीं बदल सकता
openemail contacts delete <email>संपर्क को उसके नोट्स, फ़ोटो और सदस्यताओं के साथ हटाएँ, और पते को छिपा दें ताकि कंपोज़र उसे फिर दर्ज न करे
openemail contacts set-audiences <email> --audience-ids <a,b>संपर्क जिन ऑडियंस में है, उन्हें ठीक इसी सूची के बराबर करें। डिफ़ॉल्ट ऑडियंस हमेशा बनी रहती है
openemail contacts list-peopleसंपर्क पेज पर मौजूद हर कोई: सहेजे गए संपर्क और, threads:read के साथ, मेल में दिखा हर पता, थ्रेड की गिनती के साथ। --sort, --q, --email और --blocked इसे छाँटते हैं
openemail contacts save <email>कोई पता सहेजें, भेजने से दर्ज हुआ पता रखें, या हटाया गया पता वापस लाएँ। पता किसी भी स्थिति में हो, कभी एरर नहीं
openemail contacts delete-many <emails...>एक कॉल में 1 से 200 पते हटाएँ और छिपाएँ
openemail contacts set-photo <email> <data>फ़ोटो फ़ाइल से, या - से stdin से अपलोड करें: 5 MB तक PNG, JPEG, WebP या GIF
openemail contacts remove-photo <email>फ़ोटो हटाएँ और सहेजी गई इमेज मिटा दें
openemail contacts block <email>पते को वर्कस्पेस की ब्लॉकलिस्ट में डालें, ताकि उससे आने वाली मेल अस्वीकार हो। प्लस टैग हटा दिया जाता है
openemail contacts unblock <email>पते को ब्लॉक करने वाला ब्लॉकलिस्ट का हर नियम हटाएँ, पूरे डोमेन वाला नियम भी
openemail contacts list-threads <email>वे थ्रेड जिनमें इस पते ने लिखा या जिनमें इसे लिखा गया, हर फ़ोल्डर में। --q उनके भीतर खोजता है
openemail contacts activity <email>किसी अवधि में इस पते से मिली और इसे भेजी गई मेल, 90 दिन, जब तक --minutes कुछ और न कहे, जवाब का इंतज़ार कर रहे थ्रेड और दोनों ओर के जवाब के मीडियन समय के साथ

ऑडियंस

संपर्कों की नाम वाली सूचियाँ, एक वर्कस्पेस में 100 तक। किसी पते को ऑडियंस में जुड़ने से पहले संपर्क होना चाहिए, सिवाय import-contacts के, जो साथ-साथ नए पते सहेजती जाती है।

कमांडयह क्या करता है
openemail audiences listऑडियंस का एक पेज, डिफ़ॉल्ट पहले और बाकी नए पहले, हर एक अपने contactCount के साथ
openemail audiences growthकिसी अवधि में ऑडियंस कैसे बढ़ीं, 30 दिन, जब तक --days या --minutes कुछ और न कहें: हर बकेट में जुड़ने और सदस्यता छोड़ने वाले, और कुल
openemail audiences get <id>एक ऑडियंस, ताज़ा contactCount के साथ
openemail audiences create --name <value>एक ख़ाली ऑडियंस बनाएँ, वैकल्पिक --description के साथ। नाम अनोखे नहीं होते
openemail audiences update <id>--name या --description बदलें। सदस्यता को छुआ नहीं जाता
openemail audiences delete <id>ऑडियंस हटाएँ और उसके संपर्क रखें। डिफ़ॉल्ट ऑडियंस हटाई नहीं जा सकती
openemail audiences empty <id>हर संपर्क को निकाल दें और ऑडियंस को उसकी ID, नाम और विवरण के साथ रखें
openemail audiences list-contacts <id>ऑडियंस के संपर्कों का एक पेज, हर एक कब जुड़ा और क्या उसने सदस्यता छोड़ी, इसके साथ। --sort, --q, --source और --statuses इसे छाँटते हैं
openemail audiences add-contact <id> --email <value>एक मौजूदा संपर्क को ऑडियंस में डालें। जो पहले से वहाँ है उसे जोड़ने से कुछ नहीं बदलता
openemail audiences remove-contact <id> <email>एक संपर्क निकालें। जो संपर्क ऑडियंस में नहीं है वह 404 देता है
openemail audiences add-contacts <id> --emails <a,b>200 तक मौजूदा संपर्क डालें, और जो पते संपर्क नहीं हैं उन्हें missing में बताएँ
openemail audiences remove-contacts <id> --emails <a,b>200 तक संपर्क निकालें, और जो उसमें नहीं थे उन्हें बताएँ
openemail audiences import-contacts <id> --contacts <json|@file|->500 तक { email, name } पंक्तियाँ इंपोर्ट करें, जो पते अभी संपर्क नहीं हैं उन्हें सहेजते हुए

ब्रॉडकास्ट

10 तक ऑडियंस में मौजूद हर व्यक्ति को एक संदेश, हर व्यक्ति के लिए अलग कॉपी के रूप में भेजा गया, मर्ज फ़ील्ड भरे हुए और सदस्यता छोड़ने के लिंक के साथ। हर कॉपी एक सामान्य ईमेल है, अपनी msg_ ID, इवेंट और वेबहुक के साथ।

कमांडयह क्या करता है
openemail broadcasts preview --audience-ids <a,b>गिनें कि इन ऑडियंस को ब्रॉडकास्ट किन तक पहुँचेगा, और सदस्यता छोड़ चुके या सप्रेस होने के कारण किन्हें छोड़ देगा। कुछ नहीं भेजता
openemail broadcasts send --audience-ids <a,b> --from <value>--subject और --html या --text के साथ, या किसी सहेजे --template के साथ भेजें, अभी या --scheduled-at पर
openemail broadcasts listब्रॉडकास्ट का एक पेज, नए पहले, लाइव गिनती के साथ। --audience-id सिर्फ़ उस ऑडियंस को भेजे गए रखता है
openemail broadcasts get <id>एक ब्रॉडकास्ट, उसकी स्थिति और लाइव गिनती के साथ: भेजते समय बार-बार जाँचने के लिए यही कमांड है
openemail broadcasts stats <id>डिलीवर, बाउंस, ओपन, क्लिक और सदस्यता छोड़ने के कुल आँकड़े, और हर --grain बकेट की एक सीरीज़, एक घंटा, जब तक आप कुछ और न कहें
openemail broadcasts list-recipients <id>हर कॉपी किसे गई और उसके साथ क्या हुआ। --filter एक समूह रखता है, जैसे bounced या not_opened
openemail broadcasts get-recipient <id> <email-id>एक व्यक्ति की कॉपी, विषय, HTML और टेक्स्ट ठीक वैसे जैसे उसे मिले
openemail broadcasts cancel <id>शेड्यूल, कतार में या अभी भेजे जा रहे ब्रॉडकास्ट को रोकें। जो कॉपी जा चुकी हैं उन्हें वापस नहीं बुलाया जा सकता

सप्रेशन

वे पते जिन पर यह वर्कस्पेस नहीं भेजेगा: हार्ड बाउंस और शिकायतें, जो होते ही दर्ज होती हैं, और हाथ से जोड़ा गया हर पता। इनमें से किसी को भेजना, कुछ भी निकलने से पहले, उस प्राप्तकर्ता के लिए अस्वीकार हो जाता है।

कमांडयह क्या करता है
openemail suppressions listसूची का एक पेज, नए पहले। --reason bounce, complaint या manual रखता है, और --q खोजता है
openemail suppressions get <id>एक पंक्ति: पता, कारण, बाउंस या शिकायत में आया ब्योरा, और क्या उसे हटाया जा सकता है
openemail suppressions add --email <value>किसी पते पर भेजना बंद करें। जो पहले से वहाँ है उसे जोड़ने पर उसकी मौजूदा पंक्ति लौटती है
openemail suppressions remove <id>उस पते पर फिर से मेल की अनुमति दें। हार्ड बाउंस हटाया नहीं जा सकता

सप्रेशन और ब्लॉकलिस्ट अलग-अलग सूचियाँ हैं। suppressions add किसी पते पर जाने वाली मेल रोकता है, और contacts block उससे आने वाली मेल अस्वीकार करता है।

स्कोप

ज़्यादातर कमांड को अपने नेमस्पेस का पढ़ने या लिखने का स्कोप चाहिए। कुछ को कोई दूसरा चाहिए, क्योंकि वे कुछ और पढ़ती या बदलती हैं:

स्कोपकमांड
contacts:readcontacts list, get और list-people
contacts:writecontacts create, update, delete, save, delete-many, set-photo और remove-photo, और audiences:write के साथ audiences import-contacts
audiences:readaudiences list, growth, get और list-contacts, और broadcasts preview, ताकि जो कुंजी भेज नहीं सकती वह भी गिनती दिखा सके
audiences:writeबाकी हर audiences कमांड, और contacts set-audiences। contacts create --audience-ids को contacts:write के साथ यह भी चाहिए
threads:readcontacts list-threads और activity, और list-people में मेल में दिखे पते
settings:readsuppressions list और get
settings:writesuppressions add और remove, और contacts block और unblock
emails:readbroadcasts list, get, stats, list-recipients और get-recipient
emails:sendbroadcasts send, जिसे audiences:read भी चाहिए, और broadcasts cancel
  • किसी ख़ास पते या डोमेन तक सीमित कुंजी भी वही पता पुस्तिका पढ़ती और लिखती है जो हर दूसरी कुंजी। वह सिर्फ़ उन्हीं ब्रॉडकास्ट को देखती है जो उसके पास मौजूद किसी पते या डोमेन से भेजे गए, list-people से सिर्फ़ सहेजे गए संपर्क पाती है, और contacts list-threads, activity, block और unblock, और suppressions add और remove उसे 422 capability_unsupported के साथ अस्वीकार करते हैं।
  • जिस सदस्य की पहुँच सिर्फ़ कुछ पतों तक है, उसका ब्राउज़र साइन-इन हर contacts, audiences और broadcasts कमांड पर 422 capability_unsupported के साथ अस्वीकार होता है। suppressions add वर्कस्पेस के मालिक के अलावा किसी का भी ब्राउज़र साइन-इन अस्वीकार करता है।

काम करते उदाहरण

फ़ाइल से ऑडियंस बनाएँ, फिर गिनें कि उसे ब्रॉडकास्ट किन तक पहुँचेगा। import-contacts उन पतों को सहेजती है जो अभी संपर्क नहीं हैं, और दोबारा चलाने पर कुछ भी दो बार नहीं बनता या जुड़ता।

contacts.json
[  { "email": "[email protected]", "name": "Ada Lovelace" },  { "email": "[email protected]", "name": "Grace Hopper" },  { "email": "[email protected]" }]
ऑडियंस बनाएँ और गिनें
AUDIENCE=$(openemail audiences create --name 'Product updates' --json | jq -r .id)openemail audiences import-contacts "$AUDIENCE" --contacts @contacts.jsonopenemail broadcasts preview --audience-ids "$AUDIENCE"

--dry-run से ब्रॉडकास्ट जाँचें, जो अनुरोध प्रिंट करता है और कुछ नहीं भेजता, फिर उसे भेजें। ब्रॉडकास्ट तुरंत बनता है और बैकग्राउंड में भेजा जाता है, इसलिए उस पर नज़र रखने के लिए get बार-बार चलाएँ। इस बॉडी में {{unsubscribeUrl}} नहीं रखा गया है, इसलिए हर कॉपी को एक लाइन का सदस्यता छोड़ने वाला फ़ुटर मिलता है।

broadcast.json
{  "audienceIds": ["aud_4c1b8e2a7d9f05c36b4e8a71"],  "from": "Acme <[email protected]>",  "subject": "{{firstName|Hello}}, the September release is out",  "html": "<p>Hi {{firstName|there}},</p><p>Here is what changed this month.</p>",  "scheduledAt": "2026-10-01T09:00:00Z"}
ब्रॉडकास्ट जाँचें, फिर भेजें
openemail broadcasts send --data @broadcast.json --dry-runBROADCAST=$(openemail broadcasts send --data @broadcast.json --yes --json | jq -r .id)openemail broadcasts get "$BROADCAST"openemail broadcasts stats "$BROADCAST" --grain day

देखें कि ब्रॉडकास्ट किन तक नहीं पहुँचा। --ndjson हर लाइन में एक प्राप्तकर्ता प्रिंट करता है, और --all --json हर पेज वाला एक दस्तावेज़।

यह किन तक नहीं पहुँचा
openemail broadcasts list-recipients brd_5a8c1e3f7b2d94a06c8e1f3b --filter bounced --ndjson | jq -r .emailopenemail broadcasts list-recipients brd_5a8c1e3f7b2d94a06c8e1f3b --filter not_opened --all --json | jq ".items | length"openemail suppressions list --reason bounce --all --max 50

एक ऑडियंस के सब्सक्राइब सदस्यों को दूसरी में कॉपी करें। jq स्ट्रीम को उस बॉडी में बदलता है जो add-contacts लेती है, और --data - उसे stdin से पढ़ता है। --max 200 इसे उन 200 पतों तक रखता है जो एक कॉल स्वीकार करती है।

सब्सक्राइब सदस्य कॉपी करें
openemail audiences list-contacts aud_9f2c4b7e1a0d63d84c5f2e7b --statuses subscribed --max 200 --ndjson \  | jq -s '{ emails: map(.email) }' \  | openemail audiences add-contacts aud_1c4e7a9b2d0f36e85a7c1b4d --data -

किसी एक डोमेन पर कंपोज़र के दर्ज किए हर संपर्क को हटाएँ। delete-many एक कॉल में 200 तक पते लेती है, इसलिए xargs -n 200 लंबी सूची को बाँटता है। पहले --dry-run से बैच जाँच लें, क्योंकि इसे पूर्ववत नहीं किया जा सकता।

डोमेन के हिसाब से हटाएँ
openemail contacts list --source auto --all --ndjson \  | jq -r 'select(.email | endswith("@old-vendor.example")) | .email' > leaving.txtxargs -n 200 openemail contacts delete-many --dry-run < leaving.txtxargs -n 200 openemail contacts delete-many --yes < leaving.txt

किसी पते पर भेजना बंद करें, किसी को फिर अनुमति दें, और एक भेजने वाले को ब्लॉक करें। removable बताता है कि suppressions remove कौन-सी पंक्तियाँ लेगी।

सप्रेस, अनुमति और ब्लॉक
openemail suppressions add --email [email protected]openemail suppressions list --q [email protected] --json | jq -r '.items[] | select(.removable) | .id'openemail suppressions remove 7b1e2c3d-4f5a-4b6c-8d7e-9f0a1b2c3d4e --yesopenemail contacts block [email protected]

पुष्टि और सत्यापन कोड

ये कमांड चलने से पहले टर्मिनल में पुष्टि माँगती हैं:

नेमस्पेसपुष्टि माँगती है
contactsdelete, delete-many, remove-photo और unblock
audiencesdelete, empty, remove-contact और remove-contacts
broadcastssend और cancel
suppressionsremove
  • --yes आपकी ओर से पुष्टि करता है। बिना निगरानी के, --json या --no-input के साथ, CI में या बिना टर्मिनल के, जो कमांड पूछती वह Refusing to run unattended. Pass --yes to confirm. और एग्ज़िट कोड 2 के साथ रुकती है।
  • --dry-run वह अनुरोध प्रिंट करता है जो कमांड भेजती, और बिना पूछे और बिना कुछ बदले कोड 0 के साथ बाहर निकलता है।
  • ब्राउज़र साइन-इन के साथ, audiences delete पहले सत्यापन कोड माँगती है, जैसे वेब ऐप करता है। --yes इसे कभी नहीं छोड़ता, और बिना निगरानी के कमांड एग्ज़िट कोड 4 के साथ रुकती है। पहले openemail verify चलाएँ, या API कुंजी इस्तेमाल करें, जिससे कभी नहीं पूछा जाता।
  • audiences empty कभी सत्यापन कोड नहीं माँगती, इसलिए --yes देने से पहले ID जाँच लें।

पेजिंग

सूची देने वाली हर कमांड एक पेज पढ़ती है। जब और बाकी हों, तो प्रिंट किया गया कर्सर उन्हीं फ़िल्टर के साथ --cursor को दें, या सब पढ़ें:

  • --all हर पेज पढ़ता है और आइटम स्ट्रीम करता है: टर्मिनल पर एक टेबल, और पाइप करने पर या --ndjson के साथ हर लाइन में एक JSON ऑब्जेक्ट।
  • --max <n> उतने आइटम के बाद रुकता है, और इसमें --all अपने आप शामिल है।
  • --json एक ही { items, hasMore, nextCursor } दस्तावेज़ प्रिंट करता है, --all के साथ भी।
  • ग़लत या पुराना कर्सर 400 invalid_cursor देता है। बिना कर्सर के फिर से शुरू करें।
कमांडपेज का आकार
openemail contacts list1 से 200, 50, जब तक --limit कुछ और न कहे
openemail contacts list-people1 से 100, 25, जब तक --limit कुछ और न कहे
openemail contacts list-threads1 से 100, 25, जब तक --limit कुछ और न कहे
openemail audiences list1 से 100, 25, जब तक --limit कुछ और न कहे
openemail audiences list-contacts1 से 200, 50, जब तक --limit कुछ और न कहे
openemail broadcasts list1 से 100, 25, जब तक --limit कुछ और न कहे
openemail broadcasts list-recipients1 से 200, 50, जब तक --limit कुछ और न कहे
openemail suppressions list1 से 100, 25, जब तक --limit कुछ और न कहे

जानना अच्छा है

  • contacts create पता पुस्तिका में पहले से मौजूद पते को 409 contact_exists के साथ अस्वीकार करती है, इसलिए दोबारा कोशिश कभी किसी के बदले नाम को नहीं मिटाती। contacts save कभी अस्वीकार नहीं करती: पता किसी भी स्थिति में हो, यह उसे सहेजती, रखती या वापस लाती है।
  • contacts delete ऐसा पता भी लेती है जो सिर्फ़ मेल में दिखा था, जिससे वह व्यक्ति list-people से हट जाता है। मेल बनी रहती है। इसे पूर्ववत नहीं किया जा सकता: पता फिर से सहेजने पर संपर्क बिना नाम, बिना नोट्स और डिफ़ॉल्ट के अलावा बिना किसी ऑडियंस के शुरू होता है।
  • पता ही संपर्क की पहचान है, इसलिए contacts update उसे नहीं बदल सकती। संपर्क को दूसरे पते पर ले जाना एक delete और एक create है।
  • contacts set-photo इमेज फ़ाइल से, या - से stdin से पढ़ती है। --content-type दें, जैसे image/jpeg: इसके बिना इमेज application/octet-stream के रूप में जा सकती है, जिसे सर्वर 422 invalid_image के साथ अस्वीकार करता है।
  • broadcasts send --scheduled-at 2026-10-01T09:00:00Z जैसा ISO 8601 समय, या PT2H या P1D जैसी ISO 8601 अवधि लेता है, 365 दिन आगे तक। send --at जो छोटी देरी लेता है, जैसे 2h, वह यहाँ अस्वीकार होती है।
  • मर्ज फ़ील्ड --subject, --html और --text में काम करते हैं: {{firstName}}, {{lastName}}, {{name}}, {{email}} और {{unsubscribeUrl}}, हर एक खड़ी लकीर के बाद एक फ़ॉलबैक मान के साथ, जैसे {{firstName|there}}। जिस बॉडी में {{unsubscribeUrl}} नहीं रखा गया, उसे एक लाइन का सदस्यता छोड़ने वाला फ़ुटर मिलता है। टेम्पलेट जैसा है वैसा भेजा जाता है, इसलिए लिंक टेम्पलेट में डालें।
  • कुछ भी लिखे जाने से पहले ब्रॉडकास्ट को प्लान की मासिक भेजने की सीमा से जाँचा जाता है, और हर कॉपी एक भेजना गिनी जाती है। जिसे कोटा पूरा न कर सके वह 429 send_quota_exceeded के साथ अस्वीकार होता है, और पीछे कुछ नहीं छूटता।
  • जब कोई स्क्रिप्ट यह चरण दोबारा चला सकती हो, तो broadcasts send को अपनी --idempotency-key दें। वही कुंजी नया भेजने के बजाय वह ब्रॉडकास्ट लौटाती है जो उसने बनाया था।
  • ब्रॉडकास्ट से सदस्यता छोड़ने वाला संपर्क unsubscribedAt सेट होकर ऑडियंस में बना रहता है, और उस ऑडियंस को बाद के ब्रॉडकास्ट उसे छोड़ देते हैं। audiences list-contacts --statuses unsubscribed उनकी सूची देती है।
  • हार्ड बाउंस सप्रेशन सूची में बना रहता है। suppressions remove उसे 409 suppression_not_removable के साथ अस्वीकार करती है, और हर पंक्ति का removable यह पहले से बता देता है।

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

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

OpenEmail

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

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