प्रमाणीकरण
अपने ब्राउज़र या API कुंजी से साइन इन करें, कई प्रोफ़ाइल रखें, और किसी संवेदनशील बदलाव से पहले कोड सत्यापित करें।
साइन इन करने के दो तरीके
टर्मिनल में openemail login चलाएँ और यह पूछेगी कि आपको कौन-सा चाहिए। दोनों ही तरह साइन-इन एक प्रोफ़ाइल के रूप में सहेजा जाता है, और हर अगली कमांड सक्रिय प्रोफ़ाइल इस्तेमाल करती है।
| कमांड | किसके रूप में काम करता है | सत्यापन कोड |
|---|---|---|
| openemail login | आप, उस वर्कस्पेस में और उस एक्सेस के साथ जिसे आप मंज़ूरी देते हैं | कुछ संवेदनशील बदलावों से पहले माँगा जाता है |
| openemail login --with-token | वर्कस्पेस, कुंजी के स्कोप के साथ | कभी नहीं माँगा जाता |
- सिर्फ़ ब्राउज़र साइन-इन ही
ai compose,ai summarizeऔर MCP कमांड इस्तेमाल कर सकता है। - ब्राउज़र साइन-इन तब तक चलता है जब तक आपकी चुनी मंज़ूरी की अवधि ख़त्म न हो जाए, या आप साइन आउट न करें। कुंजी तब तक काम करती है जब तक उसे रद्द न किया जाए।
ब्राउज़र साइन-इन
openemail loginइस साइन-इन के लिएOpenEmail CLI on <your computer>नाम का नया ऐप रजिस्टर करता है और आपके ब्राउज़र में OpenEmail का मंज़ूरी पेज खोलता है। अगर ब्राउज़र न खुले, तो प्रिंट किया गया लिंक इस्तेमाल करें।- ज़रूरत हो तो साइन इन करें, फिर वर्कस्पेस, CLI को मिलने वाला एक्सेस (पढ़ना, पढ़ना और भेजना, पूरा, या अपनी अनुमतियों का सेट), जिन डोमेन या पतों तक वह पहुँचे, और मंज़ूरी कितनी देर चले, चुनें।
- मंज़ूरी दें। ब्राउज़र ख़ुद ही मंज़ूरी टर्मिनल को लौटा देता है, और आप टैब बंद कर सकते हैं। 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 workprofile listहर प्रोफ़ाइल को उसके प्रकार, वर्कस्पेस और यूज़र या कुंजी के साथ दिखाता है, और सक्रिय को चिह्नित करता है। इसके JSON में कभी कोई टोकन या कुंजी नहीं होती।profile currentstdout पर सिर्फ़ नाम प्रिंट करता है, इसलिए$(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 otherOPENEMAIL_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 --force60 मिनट एक ही साइन-इन के होते हैं। किसी दूसरी प्रोफ़ाइल से, या अपने आप साइन इन हुए 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.json | npm से आख़िरी बार नई रिलीज़ के बारे में कब पूछा गया, और उसने क्या कहा |
टोकन और कुंजियाँ सादे टेक्स्ट में ऐसी फ़ाइलों में रखी जाती हैं जिन्हें सिर्फ़ आपका यूज़र पढ़ सकता है, इसलिए फ़ोल्डर को SSH कुंजी की तरह बरतें। जिस फ़ाइल को CLI समझ नहीं पाती, उसे कभी चुपचाप साइन आउट नहीं माना जाता: यह एक बार पाथ के साथ चेतावनी देती है, और नई फ़ाइल लिखने से पहले उसके बगल में एक कॉपी (config.json.bak) रखती है। जो फ़ाइल वह बिल्कुल नहीं पढ़ पाती, जैसे उसकी अनुमतियों की वजह से, वह कमांड को उस फ़ाइल का नाम बताने वाली त्रुटि के साथ रोक देती है।