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

प्रमाणीकरण

अपने ब्राउज़र या API कुंजी से साइन इन करें, कई प्रोफ़ाइल रखें, और किसी संवेदनशील बदलाव से पहले कोड सत्यापित करें।

साइन इन करने के दो तरीके

टर्मिनल में openemail login चलाएँ और यह पूछेगी कि आपको कौन-सा चाहिए। दोनों ही तरह साइन-इन एक प्रोफ़ाइल के रूप में सहेजा जाता है, और हर अगली कमांड सक्रिय प्रोफ़ाइल इस्तेमाल करती है।

कमांडकिसके रूप में काम करता हैसत्यापन कोड
openemail loginआप, उस वर्कस्पेस में और उस एक्सेस के साथ जिसे आप मंज़ूरी देते हैंकुछ संवेदनशील बदलावों से पहले माँगा जाता है
openemail login --with-tokenवर्कस्पेस, कुंजी के स्कोप के साथकभी नहीं माँगा जाता
  • सिर्फ़ ब्राउज़र साइन-इन ही ai compose, ai summarize और MCP कमांड इस्तेमाल कर सकता है।
  • ब्राउज़र साइन-इन तब तक चलता है जब तक आपकी चुनी मंज़ूरी की अवधि ख़त्म न हो जाए, या आप साइन आउट न करें। कुंजी तब तक काम करती है जब तक उसे रद्द न किया जाए।

ब्राउज़र साइन-इन

  1. openemail login इस साइन-इन के लिए OpenEmail CLI on <your computer> नाम का नया ऐप रजिस्टर करता है और आपके ब्राउज़र में OpenEmail का मंज़ूरी पेज खोलता है। अगर ब्राउज़र न खुले, तो प्रिंट किया गया लिंक इस्तेमाल करें।
  2. ज़रूरत हो तो साइन इन करें, फिर वर्कस्पेस, CLI को मिलने वाला एक्सेस (पढ़ना, पढ़ना और भेजना, पूरा, या अपनी अनुमतियों का सेट), जिन डोमेन या पतों तक वह पहुँचे, और मंज़ूरी कितनी देर चले, चुनें।
  3. मंज़ूरी दें। ब्राउज़र ख़ुद ही मंज़ूरी टर्मिनल को लौटा देता है, और आप टैब बंद कर सकते हैं। CLI प्रिंट करती है कि आप किसके रूप में साइन इन हैं, वर्कस्पेस, और मंज़ूरी कब ख़त्म होगी।
टर्मिनल
openemail loginopenemail login --scopes emails:send,threads:readopenemail login --profile work
  • CLI आपकी मंज़ूरी के लिए 10 मिनट इंतज़ार करती है। मंज़ूरी पेज पर अभी नहीं चुनने से साइन-इन एग्ज़िट कोड 10 के साथ रद्द हो जाता है।
  • --scopes मंज़ूरी पेज पर अनुमतियाँ पहले से चुन देता है, और आप उन्हें वहाँ अब भी बदल सकते हैं।
  • जब प्रोफ़ाइल में पहले से साइन-इन हो, तो टर्मिनल उसे बदलने से पहले पूछता है। बिना निगरानी के यह मना कर देता है, जब तक आप --force या --yes न दें। ब्राउज़र साइन-इन बदलने से पुराना रद्द हो जाता है।

हर ब्राउज़र साइन-इन अपना अलग कनेक्टेड ऐप है, जो अकाउंट → कनेक्टेड ऐप्स में आपकी दी गई मंज़ूरी के साथ दिखता है, जहाँ आप उसे बदल या हटा सकते हैं। openemail open apps वह पेज खोलता है।

इसके नीचे वही OAuth फ़्लो है जो MCP सर्वर इस्तेमाल करता है: PKCE वाला एक पब्लिक क्लाइंट, एक बार का कोड, और एक एक्सेस टोकन जो एक घंटा चलता है और आपके लिए रिन्यू होता है। ब्राउज़र किसी रैंडम पोर्ट पर 127.0.0.1 पर लौटता है, और वहाँ सिर्फ़ इसी साइन-इन का कोड स्वीकार होता है।

SSH पर, या बिना ब्राउज़र के

जब CLI इस मशीन पर ब्राउज़र नहीं खोल पाती, तो वह लिंक प्रिंट करती है: SSH पर, CI में, बिना डिस्प्ले वाले Linux पर, या जब आप --no-browser देते हैं। किसी भी डिवाइस के ब्राउज़र में लिंक खोलें और मंज़ूरी दें। फिर पेज एक साइन-इन कोड दिखाता है, जिसे आप टर्मिनल में पेस्ट करते हैं।

टर्मिनल
$ openemail login --no-browserOpen this link in a browser on any device to sign in:  https://api.openemail.uk/auth/mcp/authorize?response_type=code&client_id=…Paste the code from your browser
  • कोड सिर्फ़ उसी साइन-इन के लिए काम करता है जिसने लिंक प्रिंट किया, इसलिए किसी दूसरे टैब का कोड अस्वीकार हो जाता है।
  • ब्राउज़र जिस पूरे पते पर पहुँचा, उसे पेस्ट करना भी काम करता है।
  • टर्मिनल के बिना, कोड stdin पर भेजें।

API कुंजियाँ

API कुंजी किसी स्क्रिप्ट को बिना ब्राउज़र के साइन इन कराती है, और उससे कभी कोड नहीं माँगा जाता। सेटिंग्स → API कुंजियाँ (openemail open api-keys) में सिर्फ़ उन स्कोप के साथ एक कुंजी बनाएँ जिनकी स्क्रिप्ट को ज़रूरत है। CLI कुंजी सहेजने से पहले उसे GET /keys/self से जाँचती है, और oe_live_ और oe_test_ कुंजियाँ स्वीकार करती है। टेस्ट कुंजी से भेजा गया मेल कभी डिलीवर नहीं होता।

टर्मिनल
openemail login --with-token < ~/.config/openemail/keyecho "$OPENEMAIL_KEY" | openemail login --with-token --profile ciopenemail login --token oe_live_…

--token भी काम करता है, पर कुंजी आपकी शेल हिस्ट्री में चली जाती है, इसलिए CLI चेतावनी देती है और --with-token सुझाती है। कुंजी को सहेजे बिना इस्तेमाल करने के दो तरीके हैं:

  • एनवायरनमेंट में OPENEMAIL_API_KEY को हर वह कमांड इस्तेमाल करती है जो उसे देखती है, किसी भी सहेजी प्रोफ़ाइल से पहले।
  • --api-key <key> सिर्फ़ उसी एक कमांड के लिए इस्तेमाल होती है।

जब एक से ज़्यादा क्रेडेंशियल हों, तो इनमें से पहला जीतता है: --api-key, OPENEMAIL_API_KEY, --profile से नामित प्रोफ़ाइल, OPENEMAIL_PROFILE से नामित प्रोफ़ाइल, फिर सक्रिय प्रोफ़ाइल।

प्रोफ़ाइल

प्रोफ़ाइल किसी भी तरह का एक सहेजा हुआ साइन-इन है। पहली का नाम default है। --profile से और साइन इन करें, और उनके बीच बदलें:

टर्मिनल
openemail login --profile workopenemail profile listopenemail profile use workopenemail inbox --profile defaultOPENEMAIL_PROFILE=work openemail statusopenemail profile currentopenemail profile remove work
  • profile list हर प्रोफ़ाइल को उसके प्रकार, वर्कस्पेस और यूज़र या कुंजी के साथ दिखाता है, और सक्रिय को चिह्नित करता है। इसके JSON में कभी कोई टोकन या कुंजी नहीं होती।
  • profile current stdout पर सिर्फ़ नाम प्रिंट करता है, इसलिए $(openemail profile current) स्क्रिप्ट में काम करता है।
  • profile remove <name> वही है जो openemail logout --profile <name>।
  • प्रोफ़ाइल का नाम अधिकतम 64 अक्षरों, अंकों, बिंदुओं, डैश और अंडरस्कोर का होता है।
  • profile use को profile switch भी कहते हैं। सक्रिय प्रोफ़ाइल हटाने या उससे साइन आउट करने पर कोई प्रोफ़ाइल सक्रिय नहीं रहती, और साइन-इन माँगने वाली अगली कमांड openemail profile use <name> की ओर इशारा करती है।

साइन-इन किस API से बात करता है

सहेजी गई प्रोफ़ाइल उस API को याद रखती है जिसमें उसने साइन इन किया, और उसका क्रेडेंशियल सिर्फ़ वहीं भेजा जाता है। कोई दूसरा ओरिजिन बताने वाला --base-url या OPENEMAIL_BASE_URL कुछ भी भेजे जाने से पहले कमांड को एग्ज़िट कोड 2 के साथ रोक देता है, और बताता है कि उस ओरिजिन में अलग प्रोफ़ाइल से साइन इन कैसे करें।

टर्मिनल
openemail login --profile other --base-url https://api.example.comopenemail inbox --profile other
  • OPENEMAIL_API_KEY या --api-key से मिली कुंजी सहेजी गई प्रोफ़ाइल नहीं है, इसलिए वह --base-url या OPENEMAIL_BASE_URL के ओरिजिन पर जाती है, या दोनों में से कोई सेट न हो तो https://api.openemail.uk पर।
  • जो कमांड कोई क्रेडेंशियल नहीं भेजतीं, वे कोई भी प्रोफ़ाइल सक्रिय हो, --base-url और OPENEMAIL_BASE_URL का पालन करती हैं: डिस्पोज़ेबल इनबॉक्स, वे मेथड जिन्हें कुंजी नहीं चाहिए, docs और open।
  • सादा http, localhost, 127.0.0.1 और ::1 को छोड़कर हर ओरिजिन के लिए एग्ज़िट कोड 2 के साथ अस्वीकार होता है: API, वेब ऐप, साइन-इन, टोकन और रद्द करने के अनुरोध, और MCP सर्वर। बाकी सब के लिए https इस्तेमाल करें।
  • API ओरिजिन से बाहर जाने वाला अनुरोध पाथ, जैसे openemail api //example.com/x, कुछ भी भेजे जाने से पहले एग्ज़िट कोड 2 और invalid_path के साथ रुक जाता है।

हर साइन-इन क्या नहीं कर सकता

ब्राउज़र साइन-इन आपकी ओर से काम करता है, पर कुछ चीज़ें किसी ऐप को कभी मंज़ूर नहीं होतीं, आप चाहे जो एक्सेस चुनें:

  • API कुंजियाँ प्रबंधित करना। keys:write और keys:manage कभी नहीं दिए जाते, इसलिए कुंजियाँ बनाने, रोटेट करने और रद्द करने के लिए keys:manage वाली API कुंजी या वेब ऐप चाहिए। openemail me rotate उस कुंजी को रोटेट करता है जिससे आप कॉल कर रहे हैं, इसलिए इसे API कुंजी चाहिए।
  • बिलिंग, और ख़ुद वर्कस्पेस। प्लान, इनवॉइस, और वर्कस्पेस बनाना, बदलना या हटाना वेब ऐप में ही रहते हैं।
  • आपका मुफ़्त पता। ऐप को किसी बिज़नेस वर्कस्पेस के लिए मंज़ूरी मिलती है, और मुफ़्त पते वाला पर्सनल वर्कस्पेस कभी पेश नहीं किया जाता, वही नियम जो API मानता है।
  • सदस्य और भूमिकाएँ, जब तक मंज़ूरी पूरे वर्कस्पेस को कवर न करे। कुछ डोमेन या पतों तक सीमित मंज़ूरी से members:write और roles:write हटा दिए जाते हैं।

API कुंजी की अपनी एक सीमा है। ai compose, ai summarize और config के सिवा हर openemail mcp कमांड MCP सर्वर से होकर जाती है, जिसे ब्राउज़र साइन-इन चाहिए, इसलिए कुंजी के साथ ये एग्ज़िट कोड 4 के साथ रुकती हैं और कारण बताती हैं।

सत्यापन कोड

ब्राउज़र साइन-इन के साथ कुछ बदलाव पहले सत्यापन कोड माँगते हैं, जैसे वेब ऐप में। CLI तब पूछती है जब उसे ज़रूरत होती है: यह आपको छह अंकों का कोड ईमेल करती है, या, अगर दो-चरणीय साइन-इन चालू है, तो आपके ऑथेंटिकेटर ऐप से कोड या आपके बैकअप कोड में से एक माँगती है। कोड सही होने पर कमांड चलती है, और उस साइन-इन से 60 मिनट तक फिर नहीं पूछा जाता। API कुंजी से कभी नहीं पूछा जाता।

कमांडकोड कब माँगती है
webhooks create, updateहमेशा
rules create, updateहमेशा
roles update, deleteहमेशा
members add, update, removeहमेशा
members grant-address, revoke-addressहमेशा
domains delete, delete-addressहमेशा
audiences deleteआपकी बनाई ऑडियंस के लिए
audiences emptyआपकी बनाई ऐसी ऑडियंस के लिए जिसमें अभी भी संपर्क हैं
mcp call createRule, setRuleEnabledहमेशा
mcp call removeDomain, removeDomainAddressहमेशा
mcp call deleteAudience, emptyAudienceजैसे संबंधित ऑडियंस कमांड करती है
apiजब इसके ज़रिए कॉल होने वाला ऑपरेशन ऊपर वालों में से एक हो
टर्मिनल
$ openemail webhooks create --url https://acme.com/hooks/openemailWe emailed a code to a•••@acme.com.Verification code: 482913Verified. You will not be asked again for 60 minutes.
  • ईमेल दोबारा भेजवाने के लिए प्रॉम्प्ट पर r टाइप करें। ग़लत कोड बताता है कि कितनी कोशिशें बची हैं।
  • कोड स्वीकार होने के बाद कमांड एक बार और चलती है, कभी दो बार नहीं।
  • --yes किसी हटाने की पुष्टि करता है, पर कभी कोड नहीं छोड़ता।
  • बिना निगरानी के (--json या --no-input के साथ, CI में, या बिना टर्मिनल के) कोई कोड टाइप नहीं कर सकता, इसलिए कमांड एग्ज़िट कोड 4 के साथ रुकती है और कुछ नहीं बदलती।
  • एक कोड पर 5 कोशिशें मिलती हैं, और पाँचवीं गलत कोशिश के बाद CLI नया कोड पेश करती है। हर साइन-इन एक घंटे में 5 और एक दिन में 20 कोड माँग सकता है।
  • एक साइन-इन के लिए 24 घंटे में दस गलत कोड उसका सत्यापन रोक देते हैं। तब CLI बताती है कि यह फिर कब शुरू होगा और दूसरा कोड पेश किए बिना एग्ज़िट कोड 4 और step_up_paused के साथ रुक जाती है, और इसे समझाने वाले ईमेल में ऐप का नाम होता है।

कोई स्क्रिप्ट या AI क्लाइंट कुछ संवेदनशील करे, उससे पहले openemail verify चलाएँ। यह अभी कोड माँगती है, और अगले 60 मिनट उस प्रोफ़ाइल की हर कमांड बिना कोड के चलती है, openemail mcp call और लोकल MCP ब्रिज समेत।

टर्मिनल
openemail verifyopenemail verify --statusopenemail verify --status --jsonopenemail verify --force

60 मिनट एक ही साइन-इन के होते हैं। किसी दूसरी प्रोफ़ाइल से, या अपने आप साइन इन हुए AI क्लाइंट से, उसका अपना कोड माँगा जाता है, और साइन आउट करना इन्हें तुरंत ख़त्म कर देता है। --force नया कोड माँगता है और नए 60 मिनट शुरू करता है।

समय-सीमा, साइन आउट और रद्द करना

  • ब्राउज़र साइन-इन के पीछे का एक्सेस टोकन एक घंटा चलता है। CLI उसके ख़त्म होने से पहले उसे रिन्यू करती है और नया सहेजती है, इसलिए आपको कभी पता नहीं चलता।
  • हर रिफ़्रेश टोकन सिर्फ़ एक बार चलता है। CLI के बदलने के 30 सेकंड से ज़्यादा बाद इस्तेमाल हुआ पुराना टोकन, जैसे किसी दूसरी मशीन पर config.json की कॉपी से, सर्वर से वह साइन-इन पूरी तरह रद्द करवा देता है, इसलिए फ़ाइल कॉपी करने के बजाय हर मशीन पर साइन इन करें।
  • मंज़ूरी उतनी देर चलती है जितनी आपने मंज़ूरी पेज पर चुनी थी। जब यह ख़त्म हो, या जब ऐप अकाउंट → कनेक्टेड ऐप्स में हटाया जाए, तो CLI आपकी ओर से काम नहीं कर पाती और आपसे फिर से openemail login चलाने को कहती है।
  • openemail logout ब्राउज़र साइन-इन को सर्वर पर रद्द करता है, जिससे वह कनेक्टेड ऐप्स से हट जाता है, फिर उसे इस डिवाइस पर भूल जाता है, भले ही सर्वर तक न पहुँचा जा सके। --all हर प्रोफ़ाइल से साइन आउट करता है।
  • API कुंजी से साइन आउट करना उसे सिर्फ़ यहाँ भुलाता है। कुंजी तब तक काम करती रहती है जब तक आप उसे openemail keys revoke <id> से या वेब ऐप में रद्द न करें।

साइन-इन कहाँ रखे जाते हैं

सब कुछ ~/.openemail में, या OPENEMAIL_CONFIG_DIR में नामित फ़ोल्डर में रहता है। फ़ोल्डर सिर्फ़ आप पढ़ सकते हैं (0700), और उसकी हर फ़ाइल भी (0600)। हर फ़ाइल पहले एक अस्थायी फ़ाइल में लिखी जाती है और फिर नाम बदलकर अपनी जगह रखी जाती है, ताकि कोई क्रैश कभी आधी फ़ाइल न छोड़े, और हर बदलाव एक लॉक फ़ाइल के तहत होता है, ताकि साथ-साथ चलती कमांड कभी कोई प्रोफ़ाइल न खोएँ।

फ़ाइलइसमें क्या है
config.jsonआपकी प्रोफ़ाइल: API कुंजियाँ, एक्सेस और रिफ़्रेश टोकन, और कौन-सी प्रोफ़ाइल सक्रिय है
temp-mail.jsonइस CLI के बनाए डिस्पोज़ेबल इनबॉक्स, उनके इनबॉक्स टोकन के साथ
update-check.jsonnpm से आख़िरी बार नई रिलीज़ के बारे में कब पूछा गया, और उसने क्या कहा

टोकन और कुंजियाँ सादे टेक्स्ट में ऐसी फ़ाइलों में रखी जाती हैं जिन्हें सिर्फ़ आपका यूज़र पढ़ सकता है, इसलिए फ़ोल्डर को SSH कुंजी की तरह बरतें। जिस फ़ाइल को CLI समझ नहीं पाती, उसे कभी चुपचाप साइन आउट नहीं माना जाता: यह एक बार पाथ के साथ चेतावनी देती है, और नई फ़ाइल लिखने से पहले उसके बगल में एक कॉपी (config.json.bak) रखती है। जो फ़ाइल वह बिल्कुल नहीं पढ़ पाती, जैसे उसकी अनुमतियों की वजह से, वह कमांड को उस फ़ाइल का नाम बताने वाली त्रुटि के साथ रोक देती है।

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

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

OpenEmail

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

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